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>