lisy
2023-07-10 62d4c7e8c56592df98d706dfa13684ffbb85ee3f
使用福利:积分商城接口开发
2个文件已修改
9个文件已添加
399 ■■■■■ 已修改文件
cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/entity/UserIntegralChanges.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/mapper/UserIntegralChangesMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/mapper/xml/UserIntegralChangesMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/IntegralDetailsResponse.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/MallRequest.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointMallDetailsResponse.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/web/UserIntegralChangesController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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赠送课时)")