陶杰
2024-09-02 dde5cf11c3ca6bddbd6aaeccf4e69d4f96ae8a45
1.优惠券返回字段增加
已修改13个文件
260 ■■■■ 文件已修改
src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateBO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateVipDTO.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateActivyVO.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateVO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateVipVO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/entity/coupon/CouponRecordDO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/entity/coupon/CouponTemplateDO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java 105 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/coupon/CouponTemplateMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateBO.java
@@ -139,7 +139,7 @@
     */
    @ApiModelProperty(value = "会员等级")
    @NotEmpty(message = "会员等级不能为空")
    private String vipGrade;
    private Integer memberId;
    @ApiModelProperty(value = "指定的用户列表id")
src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateVipDTO.java
@@ -1,7 +1,6 @@
package com.mzl.flower.dto.request.coupon;
import com.mzl.flower.base.annotation.DictTrans;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -56,14 +55,13 @@
     *  会员等级
     */
    @ApiModelProperty(value = "会员等级")
    @NotEmpty(message = "会员等级不能为空")
    private String vipGrade;
    @NotNull(message = "会员等级不能为空")
    private Integer memberId;
    /**
     * 领取后有效类型(COUPON_usage_time_type)天、小时、分钟
     */
    @ApiModelProperty(value = "领取后有效类型(COUPON_USAGE_TIME_TYPE)")
    @DictTrans(target = "usageTimeTypeName",codeType = "COUPON_USAGE_TIME_TYPE")
    private String usageTimeType;
    /**
@@ -72,7 +70,5 @@
    @ApiModelProperty(value = "领取后有效时间整数")
    private Integer usageTimeNum;
    @ApiModelProperty(value = "领取后有效类型名称")
    private String usageTimeTypeName;
}
src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateActivyVO.java
@@ -144,4 +144,12 @@
    @ApiModelProperty(value = "领取后有效时间整数")
    private Integer usageTimeNum;
    @ApiModelProperty(value = "使用时间类型(COUPON_USAGE_TYPE)")
    @DictTrans(target = "usageTypeName",codeType = "COUPON_USAGE_TYPE")
    private String usageType;
    @ApiModelProperty(value = "使用时间类型")
    private String usageTypeName;
}
src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateVO.java
@@ -3,6 +3,7 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mzl.flower.base.AbstractTransDTO;
import com.mzl.flower.base.annotation.DictTrans;
import com.mzl.flower.entity.menber.Member;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -227,9 +228,18 @@
    private String updateByName;
    @ApiModelProperty(value = "会员等级")
    private String vipGrade;
    private Integer memberId;
    @ApiModelProperty(value = "会员等级名称")
    private String memberName;
    @ApiModelProperty(value = "商户列表")
    List<CouponTemplateCustomerVO> customerList;
    @ApiModelProperty(value = "会员等级对象")
    private Member member;
}
src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateVipVO.java
@@ -3,6 +3,7 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mzl.flower.base.AbstractTransDTO;
import com.mzl.flower.base.annotation.DictTrans;
import com.mzl.flower.entity.menber.Member;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -111,4 +112,13 @@
    @ApiModelProperty(value = "领取后有效类型名称")
    private String usageTimeTypeName;
    @ApiModelProperty(value = "会员等级")
    private Integer memberId;
    @ApiModelProperty(value = "会员等级名称")
    private String memberName;
    @ApiModelProperty(value = "会员等级对象")
    private Member member;
}
src/main/java/com/mzl/flower/entity/coupon/CouponRecordDO.java
@@ -104,4 +104,9 @@
     */
    private String orderNo;
    /**
     * 会员等级
     */
    private Integer memberId;
}
src/main/java/com/mzl/flower/entity/coupon/CouponTemplateDO.java
@@ -136,7 +136,7 @@
    private Integer point;
    @ApiModelProperty(value = "会员等级")
    private String vipGrade;
    private Integer memberId;
}
src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java
@@ -58,4 +58,7 @@
     */
    List<CouponTemplateCustomerVO> getCouponCustomerList(@Param("id") String id);
    List<CouponTemplateVO> getVipList(@Param("param") QueryCouponDTO dto);
    List<CouponTemplateVO> getCouponTemplateVipPage(Page page, @Param("param") QueryCouponDTO dto);
}
src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java
@@ -1,6 +1,5 @@
package com.mzl.flower.service.impl.coupon;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -11,7 +10,6 @@
import com.mzl.flower.entity.coupon.CouponRecordDO;
import com.mzl.flower.entity.coupon.CouponTemplateDO;
import com.mzl.flower.entity.customer.Customer;
import com.mzl.flower.entity.system.User;
import com.mzl.flower.enums.*;
import com.mzl.flower.mapper.coupon.CouponRecordMapper;
import com.mzl.flower.mapper.coupon.CouponRecordMapperCustom;
@@ -125,6 +123,7 @@
        couponRecordDO.setCouponDiscountType(couponTemplateDO.getCouponDiscountType());
        couponRecordDO.setGetUserType(couponTemplateDO.getGetUserType());
        couponRecordDO.setPoint(couponTemplateDO.getPoint());
        couponRecordDO.setMemberId(couponRecordDO.getMemberId());
        // 根据优惠券模板来计算优惠券的生效开始时间和结束时间
@@ -217,56 +216,58 @@
    @Override
    public boolean grantVipCouponRecordList() {
        try{
            LocalDateTime now = LocalDateTime.now();
            LocalDateTime firstDayStart = now.with(TemporalAdjusters.firstDayOfMonth()).withHour(0).withMinute(0).withSecond(0).withNano(0);
            LocalDateTime lastDayEnd = now.with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59).withNano(0);
            // 获取所有会员模版列表
            List<CouponTemplateDO> vipTemplateList= couponTemplateService.getVipCouponTemplate();
            // 遍历所有相同等级用户信息,并根据优惠券设置的规则构造优惠券
            final List<CouponTemplateDO> updateCouponTemplateList = vipTemplateList.stream().map(couponTemplateDO -> {
                final List<User> vipGradeUserList = userService.getVipGradeUserList(couponTemplateDO.getVipGrade());
                final List<CouponRecordDO> gradeCouponRecordList = vipGradeUserList.stream().map(user -> {
                    CouponRecordDO couponRecordDO = new CouponRecordDO();
                    BeanUtils.copyProperties(couponTemplateDO, couponRecordDO);
                    couponRecordDO.setId(IdUtil.simpleUUID());
                    couponRecordDO.setCouponId(couponTemplateDO.getId());
                    couponRecordDO.setUserId(user.getId());
                    couponRecordDO.setStatus(CouponUsedStatusEnum.UNUSED.getType());
                    couponRecordDO.setEffectiveStart(firstDayStart);
                    couponRecordDO.setEffectiveEnd(lastDayEnd);
                    // 创建信息
                    couponRecordDO.create();
                    return couponRecordDO;
                }).collect(Collectors.toList());
                // 批量保存等级下的优惠券信息
                saveBatch(gradeCouponRecordList);
                couponTemplateDO.setUsageStartDate(firstDayStart);
                couponTemplateDO.setUsageEndDate(lastDayEnd);
                couponTemplateDO.setGetStartDate(firstDayStart);
                couponTemplateDO.setGetEndDate(lastDayEnd);
                // 设置默认类型固定
                couponTemplateDO.setUsageType(CouponUsageTypeEnum.FIXED.getType());
                return couponTemplateDO;
            }).collect(Collectors.toList());
            // 批量更新原模版时间
            couponTemplateService.updateBatchById(updateCouponTemplateList);
            return true;
        }catch (Exception e){
            // 报错日志信息报错
            log.error(e.getMessage());
            return false;
        }
        // TODO 会员等级修改
//        try{
//            LocalDateTime now = LocalDateTime.now();
//            LocalDateTime firstDayStart = now.with(TemporalAdjusters.firstDayOfMonth()).withHour(0).withMinute(0).withSecond(0).withNano(0);
//            LocalDateTime lastDayEnd = now.with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59).withNano(0);
//
//            // 获取所有会员模版列表
//            List<CouponTemplateDO> vipTemplateList= couponTemplateService.getVipCouponTemplate();
//
//            // 遍历所有相同等级用户信息,并根据优惠券设置的规则构造优惠券
//            final List<CouponTemplateDO> updateCouponTemplateList = vipTemplateList.stream().map(couponTemplateDO -> {
//                final List<User> vipGradeUserList = userService.getVipGradeUserList(couponTemplateDO.getVipGrade());
//                final List<CouponRecordDO> gradeCouponRecordList = vipGradeUserList.stream().map(user -> {
//                    CouponRecordDO couponRecordDO = new CouponRecordDO();
//                    BeanUtils.copyProperties(couponTemplateDO, couponRecordDO);
//                    couponRecordDO.setId(IdUtil.simpleUUID());
//                    couponRecordDO.setCouponId(couponTemplateDO.getId());
//                    couponRecordDO.setUserId(user.getId());
//                    couponRecordDO.setStatus(CouponUsedStatusEnum.UNUSED.getType());
//                    couponRecordDO.setEffectiveStart(firstDayStart);
//                    couponRecordDO.setEffectiveEnd(lastDayEnd);
//
//                    // 创建信息
//                    couponRecordDO.create();
//                    return couponRecordDO;
//                }).collect(Collectors.toList());
//
//                // 批量保存等级下的优惠券信息
//                saveBatch(gradeCouponRecordList);
//
//                couponTemplateDO.setUsageStartDate(firstDayStart);
//                couponTemplateDO.setUsageEndDate(lastDayEnd);
//                couponTemplateDO.setGetStartDate(firstDayStart);
//                couponTemplateDO.setGetEndDate(lastDayEnd);
//
//                // 设置默认类型固定
//                couponTemplateDO.setUsageType(CouponUsageTypeEnum.FIXED.getType());
//
//                return couponTemplateDO;
//
//            }).collect(Collectors.toList());
//
//            // 批量更新原模版时间
//            couponTemplateService.updateBatchById(updateCouponTemplateList);
//
//            return true;
//        }catch (Exception e){
//            // 报错日志信息报错
//            log.error(e.getMessage());
//            return false;
//        }
        return false;
    }
    @Override
src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
@@ -16,6 +16,7 @@
import com.mzl.flower.entity.coupon.CouponTemplateCustomerDO;
import com.mzl.flower.entity.coupon.CouponTemplateDO;
import com.mzl.flower.entity.customer.Customer;
import com.mzl.flower.entity.menber.Member;
import com.mzl.flower.entity.point.CustomerPoint;
import com.mzl.flower.entity.point.CustomerPointDetail;
import com.mzl.flower.enums.*;
@@ -27,6 +28,7 @@
import com.mzl.flower.service.coupon.CouponRecordService;
import com.mzl.flower.service.coupon.CouponTemplateCustomerService;
import com.mzl.flower.service.coupon.CouponTemplateService2;
import com.mzl.flower.service.menber.MemberService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
@@ -36,6 +38,7 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -70,6 +73,9 @@
    @Autowired
    private CustomerPointDetailMapper customerPointDetailMapper;
    @Autowired
    private MemberService memberService;
@@ -146,13 +152,29 @@
    @Override
    public List<CouponTemplateVO> getList(QueryCouponDTO dto) {
        List<CouponTemplateVO> list = couponTemplateMapperCustom.getList(dto);
        List<CouponTemplateVO> list =new ArrayList<>();
        if(StringUtils.isNotBlank(dto.getCategory())
                && dto.getCategory().equals(CouponCategoryEnum.MEMBER.getStatus())
        ){
            // 会员优惠券
            list = couponTemplateMapperCustom.getVipList(dto);
        }else{
            list = couponTemplateMapperCustom.getList(dto);
        }
        return list;
    }
    @Override
    public Page<CouponTemplateVO> getPage(Page page, QueryCouponDTO dto) {
        List<CouponTemplateVO> result = couponTemplateMapperCustom.getCouponTemplatePage(page, dto);
        List<CouponTemplateVO> result =new ArrayList<>();
        if(StringUtils.isNotBlank(dto.getCategory())
                && dto.getCategory().equals(CouponCategoryEnum.MEMBER.getStatus())
        ){
            // 会员优惠券
            result = couponTemplateMapperCustom.getCouponTemplateVipPage(page, dto);
        }else{
            result = couponTemplateMapperCustom.getCouponTemplatePage(page, dto);
        }
        return page.setRecords(result);
    }
@@ -163,10 +185,23 @@
        final List<CouponTemplateVO> list = getList(dto);
        if (CollectionUtils.isNotEmpty(list)) {
            CouponTemplateVO vo =list.get(0);
            if(vo.getCategory().equals(CouponCategoryEnum.USER.getStatus())){
            // 用户获取
            if(StringUtils.isNotBlank(vo.getCategory())
                  &&  vo.getCategory().equals(CouponCategoryEnum.USER.getStatus())){
                List<CouponTemplateCustomerVO> customerList= couponTemplateMapperCustom.getCouponCustomerList(id);
                vo.setCustomerList(customerList);
            }
            // 会员等级
            if(StringUtils.isNotBlank(vo.getCategory()) && null!=vo.getMemberId()
                    &&  vo.getCategory().equals(CouponCategoryEnum.MEMBER.getStatus())){
                final Member member = memberService.getById(vo.getMemberId());
                if(null!=member){
                    vo.setMember(member);
                    vo.setMemberName(member.getName());
                }
            }
            return vo;
        }
        return null;
@@ -222,6 +257,7 @@
                List<CouponRecordDO> couponUsageDOList = couponTemplateCustomerDOList.stream().map(pointCustomRe -> {
                    CouponRecordDO couponRecordDO = new CouponRecordDO();
                    couponRecordDO.setId(IdUtil.simpleUUID());
                    couponRecordDO.setCouponId(pointCustomRe.getCouponId());
                    couponRecordDO.setCustomerId(pointCustomRe.getCustomId());
                    final Customer customer = customerMapper.selectById(pointCustomRe.getCustomId());
@@ -247,6 +283,7 @@
                    couponRecordDO.setCouponDiscountType(couponTemplateDO.getCouponDiscountType());
                    couponRecordDO.setGetUserType(couponTemplateDO.getGetUserType());
                    couponRecordDO.setPoint(couponTemplateDO.getPoint());
                    couponRecordDO.setMemberId(couponRecordDO.getMemberId());
                    // 创建相关信息
                    couponRecordDO.create(SecurityUtils.getUserId());
src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java
@@ -10,9 +10,11 @@
import com.mzl.flower.dto.response.coupon.CouponTemplateVO;
import com.mzl.flower.dto.response.coupon.CouponTemplateVipVO;
import com.mzl.flower.entity.coupon.CouponTemplateDO;
import com.mzl.flower.entity.menber.Member;
import com.mzl.flower.enums.CouponCategoryEnum;
import com.mzl.flower.enums.CouponTypeEnum;
import com.mzl.flower.service.coupon.CouponTemplateService2;
import com.mzl.flower.service.menber.MemberService;
import com.mzl.flower.utils.ConverterUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -37,6 +39,9 @@
    @Autowired
    CouponTemplateService2 couponTemplateService;
    @Autowired
    MemberService memberService;
    @PostMapping("")
    @ApiOperation(value = "新增", notes = "新增")
@@ -121,6 +126,12 @@
    private void valid(CreateCouponTemplateVipDTO dto){
        final Member member = memberService.getById(dto.getMemberId());
        if(null==member){
            throw new ValidationException("会员等级不存在");
        }
        if (StringUtils.isNotBlank(dto.getCouponDiscountType())
                && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())
                && dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0) {
src/main/resources/mapper/coupon/CouponTemplateMapper.xml
@@ -32,7 +32,7 @@
        <result column="usage_time_num" property="usageTimeNum" />
        <result column="status" property="status" />
        <result column="vip_grade" property="vipGrade" />
        <result column="member_id" property="memberId" />
    </resultMap>
src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml
@@ -33,7 +33,7 @@
        <result column="usage_time_num" property="usageTimeNum" />
        <result column="status" property="status" />
        <result column="point" property="point" />
        <result column="vip_grade" property="vipGrade" />
        <result column="member_id" property="memberId" />
    </resultMap>
    <update id="activeBatchCouponTemplate">
@@ -103,6 +103,12 @@
        and c.id=#{id}
    </select>
    <select id="getVipList" resultType="com.mzl.flower.dto.response.coupon.CouponTemplateVO">
        <include refid="QuerySqlVip" />
    </select>
    <select id="getCouponTemplateVipPage" resultType="com.mzl.flower.dto.response.coupon.CouponTemplateVO">
        <include refid="QuerySqlVip" />
    </select>
    <sql id="QueryPointSql">
        select *
@@ -164,4 +170,45 @@
        order by t.create_time desc
    </sql>
    <sql id="QuerySqlVip">
        select *
        from (
            select t.*,
            create_by_user.nick_name as createByName,
            IFNULL(get_num.cnt, 0) as getNum,
            IFNULL(t.coupon_amount, 0) - IFNULL(get_num.cnt, 0) as unGetNum,
            m.`name` as member_name
            from t_coupon_template t
            left join t_user create_by_user
            on t.create_by =create_by_user.id
            left join (select coupon_id,count(1) as cnt  from t_coupon_record where deleted=0 group by coupon_id) get_num
            on t.id=get_num.coupon_id
            left join t_member m
            on t.member_id=m.id
        ) t
        where t.deleted=0
        <if test="param.name != null and param.name != ''">
            AND t.coupon_name like concat('%', #{param.name},'%')
        </if>
        <if test="param.couponDiscountType != null and param.couponDiscountType != ''">
            AND t.coupon_discount_type =  #{param.couponDiscountType}
        </if>
        <if test="param.getType != null and param.getType != ''">
            AND t.get_type =  #{param.getType}
        </if>
        <if test="param.getUserType != null and param.getUserType != ''">
            AND t.get_user_type =  #{param.getUserType}
        </if>
        <if test="param.id != null and param.id != ''">
            AND t.id =  #{param.id}
        </if>
        <if test="param.category != null and param.category != ''">
            AND t.category =  #{param.category}
        </if>
        <if test="param.status != null and param.status != ''">
            AND t.status =  #{param.status}
        </if>
        order by t.create_time desc
    </sql>
</mapper>