cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
@@ -6,6 +6,7 @@ import com.dsh.account.model.vo.userBenefitDetail.*; import com.dsh.account.service.RechargeRecordsService; import com.dsh.account.service.TAppUserService; import com.dsh.account.service.UserIntegralChangesService; import com.dsh.account.util.ResultUtil; import com.dsh.account.util.TokenUtil; import io.swagger.annotations.ApiImplicitParam; @@ -41,6 +42,9 @@ @Autowired private RechargeRecordsService rechargeRService; @Autowired private UserIntegralChangesService uicService; private final SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); @@ -210,7 +214,7 @@ */ @ResponseBody @PostMapping("/api/useBenefit/payment") @ApiOperation(value = "充值中心-支付", tags = {"APP-开始上课"}) @ApiOperation(value = "充值中心-支付", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) @@ -228,5 +232,53 @@ } /** * 积分商城 */ @ResponseBody @PostMapping("/api/useBenefit/integralMallList") @ApiOperation(value = "积分商城", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) public ResultUtil<PointMallDetailsResponse> pointsMallList(MallRequest request){ try { Integer userIdFormRedis = tokenUtil.getUserIdFormRedis(); if(null == userIdFormRedis){ return ResultUtil.tokenErr(); } // TODO: 2023/7/10 积分商品列表查询 return ResultUtil.success(); }catch (Exception e){ return ResultUtil.runErr(); } } /** * 积分明细 */ @ResponseBody @PostMapping("/api/useBenefit/integralMallList") @ApiOperation(value = "积分明细", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "年月", name = "yearMonth", required = true, dataType = "string"), @ApiImplicitParam(value = "记录(1充值 2扣除)", name = "recordId", required = true, dataType = "int"), }) public ResultUtil<IntegralDetailsResponse> pointDetails(String yearMonth, Integer recordId){ try { Integer userIdFormRedis = tokenUtil.getUserIdFormRedis(); if(null == userIdFormRedis){ return ResultUtil.tokenErr(); } return ResultUtil.success(uicService.queryUserPointsDetails(yearMonth,recordId,userIdFormRedis)); }catch (Exception e){ return ResultUtil.runErr(); } } } cloud-server-account/src/main/java/com/dsh/account/entity/UserIntegralChanges.java
New file @@ -0,0 +1,68 @@ package com.dsh.account.entity; import com.baomidou.mybatisplus.enums.IdType; import java.util.Date; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.activerecord.Model; import com.baomidou.mybatisplus.annotations.TableName; import java.io.Serializable; import com.baomidou.mybatisplus.annotations.Version; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * <p> * 用户积分变动记录 * </p> * * @author jqs * @since 2023-07-10 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("t_user_integral_changes") public class UserIntegralChanges extends Model<UserIntegralChanges> { private static final long serialVersionUID = 1L; /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 用户id */ private Integer appUserId; /** * 积分类型(1=赠送积分,2=兑换商品,3=完成课后练习,4=观看教学视频) */ private Integer type; /** * 历史积分 */ private Integer oldIntegral; /** * 新积分 */ private Integer newIntegral; /** * 备注 */ private String remark; /** * 添加时间 */ private Date insertTime; @Override protected Serializable pkVal() { return this.id; } } cloud-server-account/src/main/java/com/dsh/account/mapper/UserIntegralChangesMapper.java
New file @@ -0,0 +1,16 @@ package com.dsh.account.mapper; import com.dsh.account.entity.UserIntegralChanges; import com.baomidou.mybatisplus.mapper.BaseMapper; /** * <p> * 用户积分变动记录 Mapper 接口 * </p> * * @author jqs * @since 2023-07-10 */ public interface UserIntegralChangesMapper extends BaseMapper<UserIntegralChanges> { } cloud-server-account/src/main/java/com/dsh/account/mapper/xml/UserIntegralChangesMapper.xml
New file @@ -0,0 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dsh.account.mapper.UserIntegralChangesMapper"> <!-- 开启二级缓存 --> <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/> </mapper> cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/IntegralDetailsResponse.java
New file @@ -0,0 +1,35 @@ package com.dsh.account.model.vo.userBenefitDetail; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class IntegralDetailsResponse { @ApiModelProperty(value = "可用积分") private Integer wpGold; @ApiModelProperty(value = "记录列表") private List<IntegralsData> detailList; @Data public static class IntegralsData{ @ApiModelProperty(value = "名称") private String consumeName; @ApiModelProperty(value = "时间") private String consumeTime; @ApiModelProperty(value = "金额 例如 -90 ") private String consumeAmount; @ApiModelProperty(value = "1扣减 2增加") private Integer detailsType; } } cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/MallRequest.java
New file @@ -0,0 +1,25 @@ package com.dsh.account.model.vo.userBenefitDetail; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class MallRequest { @ApiModelProperty(value = "经度") private String lon; @ApiModelProperty(value = "纬度") private String lat; @ApiModelProperty(value = "排序规则 1积分高到低 2积分从低到高 3兑换从高到低") private Integer rank; @ApiModelProperty(value = "商品类型: 1实物 2课包 3门票 4优惠券") private Integer goodsType; @ApiModelProperty(value = "搜索内容") private String search; } cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointMallDetailsResponse.java
New file @@ -0,0 +1,52 @@ package com.dsh.account.model.vo.userBenefitDetail; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data public class PointMallDetailsResponse { @ApiModelProperty(value = "头像") private String headImg; @ApiModelProperty(value = "姓名") private String name; @ApiModelProperty(value = "可用积分") private Integer integral; @ApiModelProperty(value = "商品列表") private List<Goods> goods; @Data public static class Goods{ @ApiModelProperty(value = "商品id") private Integer goodId; @ApiModelProperty(value = "商品封面图") private String goodImg; @ApiModelProperty(value = "商品名称") private String goodName; @ApiModelProperty(value = "金额") private BigDecimal amount; @ApiModelProperty(value = "积分") private Integer integral; @ApiModelProperty(value = "适用范围: 1 仅限会员 2仅限学员 3全部用户") private Integer belongsType; @ApiModelProperty(value = "商品类型: 1实物 2课包 3门票 4优惠券") private Integer goodsType; } } cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java
New file @@ -0,0 +1,19 @@ package com.dsh.account.service; import com.baomidou.mybatisplus.service.IService; import com.dsh.account.entity.UserIntegralChanges; import com.dsh.account.model.vo.userBenefitDetail.IntegralDetailsResponse; /** * <p> * 用户积分变动记录 服务类 * </p> * * @author jqs * @since 2023-07-10 */ public interface UserIntegralChangesService extends IService<UserIntegralChanges> { IntegralDetailsResponse queryUserPointsDetails(String yearMonth, Integer recordId, Integer userIdFormRedis); } cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java
New file @@ -0,0 +1,99 @@ package com.dsh.account.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.dsh.account.entity.TAppUser; import com.dsh.account.entity.UserIntegralChanges; import com.dsh.account.mapper.TAppUserMapper; import com.dsh.account.mapper.UserIntegralChangesMapper; import com.dsh.account.model.vo.userBenefitDetail.IntegralDetailsResponse; import com.dsh.account.service.UserIntegralChangesService; import com.dsh.account.util.DateTimeHelper; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * <p> * 用户积分变动记录 服务实现类 * </p> * * @author jqs * @since 2023-07-10 */ @Service public class UserIntegralChangesServiceImpl extends ServiceImpl<UserIntegralChangesMapper, UserIntegralChanges> implements UserIntegralChangesService { @Resource private TAppUserMapper tauMapper; @Override public IntegralDetailsResponse queryUserPointsDetails(String yearMonth, Integer recordId, Integer userIdFormRedis) { IntegralDetailsResponse vo = new IntegralDetailsResponse(); List<IntegralDetailsResponse.IntegralsData> details = new ArrayList<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM-dd HH:mm"); Date monthStart = null; Date monthEnd = null; if (StringUtils.hasText(yearMonth)) { monthStart = DateTimeHelper.getCurrentIdetMouthStart(yearMonth); monthEnd = DateTimeHelper.getCurrentIdeaMouthEnd(yearMonth); } else { monthStart = DateTimeHelper.getCurrentMouthStart(); monthEnd = DateTimeHelper.getCurrentMouthEnd(); } List<UserIntegralChanges> userIntegralChanges = this.baseMapper.selectList(new EntityWrapper<UserIntegralChanges>() .eq("appUserId",userIdFormRedis ) .between("insertTime",monthStart,monthEnd) .orderBy("insertTime",false)); if (userIntegralChanges.size() > 0 ){ for (UserIntegralChanges userIntegralChange : userIntegralChanges) { IntegralDetailsResponse.IntegralsData detail= new IntegralDetailsResponse.IntegralsData(); switch (userIntegralChange.getType()){ case 1: detail.setConsumeAmount("+"+(userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeName("赠送积分"); detail.setDetailsType(2); break; case 2: detail.setConsumeAmount("-"+(userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeName("兑换商品"); detail.setDetailsType(1); break; case 3: detail.setConsumeAmount("+"+(userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeName("完成课后练习"); detail.setDetailsType(2); break; case 4: detail.setConsumeAmount("+"+(userIntegralChange.getNewIntegral() - userIntegralChange.getOldIntegral())); detail.setConsumeTime(simpleDateFormat.format(userIntegralChange.getInsertTime())); detail.setConsumeName("观看教学视频"); detail.setDetailsType(2); break; default: break; } detail.setConsumeTime(simpleDateFormat.format(userIntegralChange.getInsertTime())); details.add(detail); } if (null != recordId){ details = details.stream() .filter(obj -> obj instanceof IntegralDetailsResponse.IntegralsData) .filter(obj -> Objects.equals(obj.getDetailsType(), recordId)) .collect(Collectors.toList()); } TAppUser tAppUser = tauMapper.selectById(userIdFormRedis); vo.setWpGold(tAppUser.getIntegral()); vo.setDetailList(details); } return vo; } } cloud-server-account/src/main/java/com/dsh/account/web/UserIntegralChangesController.java
New file @@ -0,0 +1,21 @@ package com.dsh.account.web; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * 用户积分变动记录 前端控制器 * </p> * * @author jqs * @since 2023-07-10 */ @RestController @RequestMapping("/user-integral-changes") public class UserIntegralChangesController { } cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java
@@ -53,7 +53,7 @@ */ @ResponseBody @PostMapping("/api/useBenefit/weekLimitedBenefit") @ApiOperation(value = "使用福利-本周福利限时折扣列表", tags = {"APP-开始上课"}) @ApiOperation(value = "本周福利-限时折扣列表", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(name = "discountType",value = "默认显示 限时折扣 (1限时折扣 2赠送课时)")