src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateUserDTO.java
@@ -72,6 +72,6 @@ @ApiModelProperty(value = "指定的用户列表id") @NotNull(message = "指定的用户列表id不能为空") private List<String> pointCostomIdList; private List<Long> pointCostomIdList; } src/main/java/com/mzl/flower/dto/request/coupon/QueryActivityEffectCouponDTO.java
对比新文件 @@ -0,0 +1,29 @@ package com.mzl.flower.dto.request.coupon; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel("App活动优惠券实体类") public class QueryActivityEffectCouponDTO { @ApiModelProperty(value = "优惠券类型(COUPON_TYPE)" ,hidden = true) private String couponDiscountType; @ApiModelProperty(value = "领取渠道(COUPON_GET_TYPE)",hidden = true) private String getType; @ApiModelProperty(value = "领取用户类型(COUPON_GET_USER_TYPE)",hidden = true) private String getUserType; @ApiModelProperty(value = "优惠券种类(COUPON_CATEGORY)",hidden = true) private String category; @ApiModelProperty(value = "优惠券状态(COUPON_STATUS)",hidden = true) private String status; } src/main/java/com/mzl/flower/dto/request/coupon/QueryCouponDTO.java
@@ -5,7 +5,7 @@ @Data public class QueryCouponDTO extends QueryCouponVipDTO { public class QueryCouponDTO { @ApiModelProperty(value = "id") @@ -29,4 +29,6 @@ @ApiModelProperty(value = "优惠券状态") private String status; } src/main/java/com/mzl/flower/dto/request/coupon/QueryCouponVipDTO.java
@@ -13,9 +13,7 @@ @ApiModelProperty(value = "优惠券类型") private String couponDiscountType; @ApiModelProperty(value = "id") private String id; } src/main/java/com/mzl/flower/dto/request/coupon/QueryExistCouponDTO.java
@@ -7,8 +7,8 @@ @Data public class QueryExistCouponDTO { @ApiModelProperty(value = "优惠券ID") private String customerId; @ApiModelProperty(value = "商户ID") private Long customerId; @ApiModelProperty(value = "优惠券ID") private String couponId; src/main/java/com/mzl/flower/enums/CouponGetTypeEnum.java
对比新文件 @@ -0,0 +1,27 @@ package com.mzl.flower.enums; import lombok.Getter; /** * 优惠券领取渠道 */ public enum CouponGetTypeEnum { HOME("home","首页弹框"), ACTIVITY("activity","活动入口"), CENTER("center","领券中心"), ; @Getter private String type; private String desc; private CouponGetTypeEnum(String type, String desc){ this.type=type; this.desc=desc; } } src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.dto.request.coupon.BatchCouponTemplateDTO; import com.mzl.flower.dto.request.coupon.QueryActivePointCouponDTO; import com.mzl.flower.dto.request.coupon.QueryActivityEffectCouponDTO; import com.mzl.flower.dto.request.coupon.QueryCouponDTO; import com.mzl.flower.dto.response.coupon.CouponTemplateVO; import com.mzl.flower.entity.coupon.CouponTemplateDO; @@ -46,4 +47,6 @@ List<CouponTemplateVO> getCouponPointList(@Param("param") QueryActivePointCouponDTO dto); Page<CouponTemplateVO> getPointPage(Page page,@Param("param") QueryActivePointCouponDTO dto); List<CouponTemplateVO> getActivityEffectList(@Param("param") QueryActivityEffectCouponDTO dto); } src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java
@@ -56,6 +56,15 @@ * @param queryExistCouponDTO * @return */ int getExistCouponAmount(QueryExistCouponDTO queryExistCouponDTO); Integer getExistCouponAmount(QueryExistCouponDTO queryExistCouponDTO); /** * 根据优惠券的ID来查找已经领取的优惠券的数量 * @param couponId * @return */ Integer getExistGainCouponRecordAmountById(String couponId); Integer getUserGainCouponRecordAmountById(String couponId,Long customerId); } src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java
@@ -82,5 +82,14 @@ */ Page<CouponTemplateVO> getPointPage(Page page, QueryActivePointCouponDTO dto); /** * 获取活动优惠券 * 1.需要领取时间在有效期内的 * 2.已经发布的 * @param dto * @return */ List<CouponTemplateVO> getActivityEffectList(QueryActivityEffectCouponDTO dto); void exchangeCoupon(ExchangeCouponDTO dto); } src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java
@@ -67,6 +67,8 @@ @Override public boolean createCouponRecord(CreateCouponRecordDTO dto) { // TODO 需要控制超领 final Customer customer = customerMapper.selectById(dto.getCustomerId()); if(null==customer){ throw new ValidationException("商户信息不存在"); @@ -77,10 +79,32 @@ throw new ValidationException("优惠券不存在"); } // TODO 活动优惠券和积分优惠券需要根据库存来控制- 根据优惠券的发放数量来控制有没有超发 // 活动优惠券和积分优惠券需要根据库存来控制- 根据优惠券的发放数量来控制有没有超发 if(StringUtils.isNotBlank(couponTemplateDO.getCategory()) && ( couponTemplateDO.getCategory().equals(CouponCategoryEnum.ACTIVITY.getStatus()) || couponTemplateDO.getCategory().equals(CouponCategoryEnum.POINT.getStatus()) )){ // 获取当前优惠券已经领取的数量 final Integer gainTotal = getExistGainCouponRecordAmountById(couponTemplateDO.getId()); if(couponTemplateDO.getCouponAmount().compareTo(gainTotal)<=0){ throw new ValidationException("当前优惠券已经领完!"); } } // 根据用户领取设置的getLimit 查看当前用户是否已经超领优惠券 if(StringUtils.isNotBlank(couponTemplateDO.getCategory()) && couponTemplateDO.getCategory().equals(CouponCategoryEnum.ACTIVITY.getStatus()) ){ // 查看当前优惠券的领取时间在不在设置的领取时间范围类 LocalDateTime now = LocalDateTime.now(); // 判断当前时间是否在领取时间范围内 if (!(now.isAfter(couponTemplateDO.getGetStartDate()) && now.isBefore(couponTemplateDO.getGetEndDate()))) { throw new ValidationException("当前时间不在优惠券的领取时间范围内,无法操作!"); } // TODO 根据用户领取设置的getLimit 查看当前用户是否已经超领优惠券 // 获取当前优惠券已经领取的数量 final Integer customGainTotal = getUserGainCouponRecordAmountById(couponTemplateDO.getId(),customer.getId()); if(couponTemplateDO.getGetLimit().compareTo(customGainTotal)<=0){ throw new ValidationException("超出个人领取限制,每人限领"+couponTemplateDO.getGetLimit()+"张!"); } } CouponRecordDO couponRecordDO=new CouponRecordDO(); @@ -146,7 +170,6 @@ } } return baseMapper.insert(couponRecordDO)>0; } @@ -297,13 +320,33 @@ } @Override public int getExistCouponAmount(QueryExistCouponDTO dto) { public Integer getExistCouponAmount(QueryExistCouponDTO dto) { QueryWrapper<CouponRecordDO> queryWrapper=new QueryWrapper<>(); queryWrapper.lambda().eq(CouponRecordDO::getDeleted, TrueOrFalseEnum.FALSE.isFlag()) .eq(StringUtils.isNotBlank(dto.getCouponId()), CouponRecordDO::getCouponId,dto.getCouponId()) .eq(StringUtils.isNotBlank(dto.getCustomerId()),CouponRecordDO::getCustomerId,dto.getCustomerId()) .eq(null!=dto.getCustomerId(),CouponRecordDO::getCustomerId,dto.getCustomerId()) .eq(StringUtils.isNotBlank(dto.getCategory()),CouponRecordDO::getCategory,dto.getCategory()); return baseMapper.selectCount(queryWrapper); } @Override public Integer getExistGainCouponRecordAmountById(String couponId) { QueryWrapper<CouponRecordDO> queryWrapper=new QueryWrapper<>(); queryWrapper.lambda().eq(CouponRecordDO::getDeleted, TrueOrFalseEnum.FALSE.isFlag()) .eq(StringUtils.isNotBlank(couponId), CouponRecordDO::getCouponId,couponId) ; return baseMapper.selectCount(queryWrapper); } @Override public Integer getUserGainCouponRecordAmountById(String couponId, Long customerId) { QueryWrapper<CouponRecordDO> queryWrapper=new QueryWrapper<>(); queryWrapper.lambda().eq(CouponRecordDO::getDeleted, TrueOrFalseEnum.FALSE.isFlag()) .eq(StringUtils.isNotBlank(couponId), CouponRecordDO::getCouponId,couponId) .eq(null!=customerId,CouponRecordDO::getCustomerId,customerId) ; return baseMapper.selectCount(queryWrapper); } } src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
@@ -382,4 +382,10 @@ customerPointDetailMapper.insert(detail); } @Override public List<CouponTemplateVO> getActivityEffectList(QueryActivityEffectCouponDTO dto) { return couponTemplateMapperCustom.getActivityEffectList(dto); } } src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java
对比新文件 @@ -0,0 +1,77 @@ package com.mzl.flower.web.v2.coupon; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.base.BaseController; import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; import com.mzl.flower.dto.request.coupon.QueryActivityEffectCouponDTO; import com.mzl.flower.dto.request.coupon.QueryCouponDTO; import com.mzl.flower.dto.response.coupon.CouponTemplateVO; import com.mzl.flower.enums.CouponCategoryEnum; import com.mzl.flower.enums.CouponGetTypeEnum; import com.mzl.flower.enums.CouponStatusEnum; import com.mzl.flower.service.coupon.CouponTemplateService2; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author @TaoJie * @since 2024-08-22 */ @RestController @RequestMapping("/api/v2/coupon/app") @Api(value = "优惠券管理-小程序", tags = "优惠券管理-小程序") @Validated public class CouponTemplateAppController extends BaseController { @Autowired CouponTemplateService2 couponTemplateService; @GetMapping("/home/list") @ApiOperation(value = "查询-首页弹框", notes = "查询-首页弹框") public ResponseEntity<ReturnDataDTO<Page<CouponTemplateVO>>> homeList(QueryActivityEffectCouponDTO dto) { // TODO 需要查找到领取时间优惠券的开始时间和结束时间内的优惠券 // 活动优惠券 dto.setCategory(CouponCategoryEnum.ACTIVITY.getStatus()); // 已经发布 dto.setStatus(CouponStatusEnum.ACTIVE.getStatus()); // 首页弹窗 dto.setGetType(CouponGetTypeEnum.HOME.getType()); couponTemplateService.getActivityEffectList(dto); return returnData(R.SUCCESS.getCode(),null); } @GetMapping("/activy/list") @ApiOperation(value = "查询-活动", notes = "查询-活动") public ResponseEntity<ReturnDataDTO<Page<CouponTemplateVO>>> activyList(QueryActivityEffectCouponDTO dto) { // TODO return returnData(R.SUCCESS.getCode(),null); } @GetMapping("/center/list") @ApiOperation(value = "查询-中心", notes = "查询-中心") public ResponseEntity<ReturnDataDTO<Page<CouponTemplateVO>>> centerList(QueryActivityEffectCouponDTO dto) { // TODO return returnData(R.SUCCESS.getCode(),null); } } src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml
@@ -69,6 +69,11 @@ <include refid="QueryPointSql" /> </select> <!-- app活动优惠券--> <select id="getActivityEffectList" resultType="com.mzl.flower.dto.response.coupon.CouponTemplateVO"> </select> <sql id="QueryPointSql"> select * from t_coupon_template