| | |
| | | } |
| | | |
| | | final CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getCouponId()); |
| | | if(couponTemplateDO==null){ |
| | | throw new ValidationException("优惠券不存在"); |
| | | } |
| | | |
| | | // TODO 活动优惠券和积分优惠券需要根据库存来控制- 根据优惠券的发放数量来控制有没有超发 |
| | | |
| | |
| | | } |
| | | |
| | | // 优惠券字段冗余 |
| | | |
| | | if(null!=couponTemplateDO){ |
| | | couponRecordDO.setCategory(couponTemplateDO.getGetUserType()); |
| | | couponRecordDO.setCouponCode(couponTemplateDO.getCouponCode()); |
| | | couponRecordDO.setCouponName(couponTemplateDO.getCouponName()); |
| | | couponRecordDO.setCouponDiscountValue(couponTemplateDO.getCouponDiscountValue()); |
| | | couponRecordDO.setMinOrderAmount(couponTemplateDO.getMinOrderAmount()); |
| | | couponRecordDO.setGetType(couponTemplateDO.getGetType()); |
| | | couponRecordDO.setCouponDiscountType(couponTemplateDO.getCouponDiscountType()); |
| | | couponRecordDO.setGetUserType(couponTemplateDO.getGetUserType()); |
| | | couponRecordDO.setPoint(couponTemplateDO.getPoint()); |
| | | couponRecordDO.setCategory(couponTemplateDO.getGetUserType()); |
| | | couponRecordDO.setCouponCode(couponTemplateDO.getCouponCode()); |
| | | couponRecordDO.setCouponName(couponTemplateDO.getCouponName()); |
| | | couponRecordDO.setCouponDiscountValue(couponTemplateDO.getCouponDiscountValue()); |
| | | couponRecordDO.setMinOrderAmount(couponTemplateDO.getMinOrderAmount()); |
| | | couponRecordDO.setGetType(couponTemplateDO.getGetType()); |
| | | couponRecordDO.setCouponDiscountType(couponTemplateDO.getCouponDiscountType()); |
| | | couponRecordDO.setGetUserType(couponTemplateDO.getGetUserType()); |
| | | couponRecordDO.setPoint(couponTemplateDO.getPoint()); |
| | | |
| | | |
| | | // 根据优惠券模板来计算优惠券的生效开始时间和结束时间 |
| | | if(StringUtils.isNotBlank(couponTemplateDO.getCategory()) && couponTemplateDO.getCategory().equals(CouponCategoryEnum.MEMBER.getStatus())){ |
| | | // 如果是会员优惠券的话,则设置为优惠券的使用条件为优惠券的时间 |
| | | // 根据优惠券模板来计算优惠券的生效开始时间和结束时间 |
| | | if(StringUtils.isNotBlank(couponTemplateDO.getCategory()) && couponTemplateDO.getCategory().equals(CouponCategoryEnum.MEMBER.getStatus())){ |
| | | // 如果是会员优惠券的话,则设置为优惠券的使用条件为优惠券的时间 |
| | | couponRecordDO.setEffectiveStart(couponTemplateDO.getUsageStartDate()); |
| | | couponRecordDO.setEffectiveEnd(couponTemplateDO.getUsageEndDate()); |
| | | }else{ |
| | | // 非会员的根据领取时间类型来计算优惠券的时间 |
| | | if(StringUtils.isNotBlank(couponTemplateDO.getUsageType()) && couponTemplateDO.getUsageType().equals(CouponUsageTypeEnum.GET.getType())){ |
| | | // 与领取时间一致 |
| | | couponRecordDO.setEffectiveStart(couponTemplateDO.getGetStartDate()); |
| | | couponRecordDO.setEffectiveEnd(couponTemplateDO.getGetEndDate()); |
| | | } |
| | | if(StringUtils.isNotBlank(couponTemplateDO.getUsageType()) && couponTemplateDO.getUsageType().equals(CouponUsageTypeEnum.FIXED.getType())){ |
| | | // 固定时间 |
| | | couponRecordDO.setEffectiveStart(couponTemplateDO.getUsageStartDate()); |
| | | couponRecordDO.setEffectiveEnd(couponTemplateDO.getUsageEndDate()); |
| | | }else{ |
| | | // 非会员的根据领取时间类型来计算优惠券的时间 |
| | | if(StringUtils.isNotBlank(couponTemplateDO.getUsageType()) && couponTemplateDO.getUsageType().equals(CouponUsageTypeEnum.GET.getType())){ |
| | | // 与领取时间一致 |
| | | couponRecordDO.setEffectiveStart(couponTemplateDO.getGetStartDate()); |
| | | couponRecordDO.setEffectiveEnd(couponTemplateDO.getGetEndDate()); |
| | | } |
| | | if(StringUtils.isNotBlank(couponTemplateDO.getUsageType()) && couponTemplateDO.getUsageType().equals(CouponUsageTypeEnum.FIXED.getType())){ |
| | | // 固定时间 |
| | | couponRecordDO.setEffectiveStart(couponTemplateDO.getUsageStartDate()); |
| | | couponRecordDO.setEffectiveEnd(couponTemplateDO.getUsageEndDate()); |
| | | } |
| | | if(StringUtils.isNotBlank(couponTemplateDO.getUsageType()) && couponTemplateDO.getUsageType().equals(CouponUsageTypeEnum.GET_AFTER_TIME.getType())){ |
| | | // 领取后有段时间 领取后有效时间 |
| | | // 根据发放后有效期来设置时间 |
| | | if (couponTemplateDO.getUsageTimeNum() == null || couponTemplateDO.getUsageTimeNum() <= 0) { |
| | | throw new IllegalArgumentException("使用时间数量必须为正整数"); |
| | | } |
| | | LocalDateTime currentTime = LocalDateTime.now(); |
| | | couponRecordDO.setEffectiveStart(currentTime); |
| | | if (couponTemplateDO.getUsageTimeType().equals(CouponUsageTimeTypeEnum.DAY.getType())) { |
| | | // 天 |
| | | couponRecordDO.setEffectiveEnd(currentTime.plusDays(couponTemplateDO.getUsageTimeNum())); |
| | | } |
| | | if (couponTemplateDO.getUsageTimeType().equals(CouponUsageTimeTypeEnum.HOUR.getType())) { |
| | | // 小时 |
| | | couponRecordDO.setEffectiveEnd(currentTime.plusHours(couponTemplateDO.getUsageTimeNum())); |
| | | } |
| | | if (couponTemplateDO.getUsageTimeType().equals(CouponUsageTimeTypeEnum.MINUTE.getType())) { |
| | | // 分钟 |
| | | couponRecordDO.setEffectiveEnd(currentTime.plusMinutes(couponTemplateDO.getUsageTimeNum())); |
| | | } |
| | | |
| | | } |
| | | } |
| | | if(StringUtils.isNotBlank(couponTemplateDO.getUsageType()) && couponTemplateDO.getUsageType().equals(CouponUsageTypeEnum.GET_AFTER_TIME.getType())){ |
| | | // 领取后有段时间 领取后有效时间 |
| | | // 根据发放后有效期来设置时间 |
| | | if (couponTemplateDO.getUsageTimeNum() == null || couponTemplateDO.getUsageTimeNum() <= 0) { |
| | | throw new IllegalArgumentException("使用时间数量必须为正整数"); |
| | | } |
| | | LocalDateTime currentTime = LocalDateTime.now(); |
| | | couponRecordDO.setEffectiveStart(currentTime); |
| | | if (couponTemplateDO.getUsageTimeType().equals(CouponUsageTimeTypeEnum.DAY.getType())) { |
| | | // 天 |
| | | couponRecordDO.setEffectiveEnd(currentTime.plusDays(couponTemplateDO.getUsageTimeNum())); |
| | | } |
| | | if (couponTemplateDO.getUsageTimeType().equals(CouponUsageTimeTypeEnum.HOUR.getType())) { |
| | | // 小时 |
| | | couponRecordDO.setEffectiveEnd(currentTime.plusHours(couponTemplateDO.getUsageTimeNum())); |
| | | } |
| | | if (couponTemplateDO.getUsageTimeType().equals(CouponUsageTimeTypeEnum.MINUTE.getType())) { |
| | | // 分钟 |
| | | couponRecordDO.setEffectiveEnd(currentTime.plusMinutes(couponTemplateDO.getUsageTimeNum())); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | |