From f1ff3a875905e068cf0f0b55b72c344b171c6da0 Mon Sep 17 00:00:00 2001 From: gongzuming <gongzuming> Date: 星期五, 30 八月 2024 11:00:09 +0800 Subject: [PATCH] 消费积分记录 --- src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java | 131 +++++++++++++++++++++++++------------------ 1 files changed, 76 insertions(+), 55 deletions(-) diff --git a/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java b/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java index de6d5f1..a56b81e 100644 --- a/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java +++ b/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java @@ -9,15 +9,13 @@ import com.mzl.flower.dto.request.coupon.CreateCouponRecordDTO; import com.mzl.flower.dto.request.coupon.QueryCouponRecordDTO; import com.mzl.flower.dto.request.coupon.QueryCouponStatisticsBO; +import com.mzl.flower.dto.request.coupon.QueryExistCouponDTO; import com.mzl.flower.dto.response.coupon.CouponRecordVO; 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.CouponCategoryEnum; -import com.mzl.flower.enums.CouponUsageTimeTypeEnum; -import com.mzl.flower.enums.CouponUsageTypeEnum; -import com.mzl.flower.enums.CouponUsedStatusEnum; +import com.mzl.flower.enums.*; import com.mzl.flower.mapper.coupon.CouponRecordMapper; import com.mzl.flower.mapper.coupon.CouponRecordMapperCustom; import com.mzl.flower.mapper.customer.CustomerMapper; @@ -74,67 +72,79 @@ throw new ValidationException("商户信息不存在"); } + final CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getCouponId()); + if(couponTemplateDO==null){ + throw new ValidationException("优惠券不存在"); + } + + // TODO 活动优惠券和积分优惠券需要根据库存来控制- 根据优惠券的发放数量来控制有没有超发 + + + // TODO 根据用户领取设置的getLimit 查看当前用户是否已经超领优惠券 + + CouponRecordDO couponRecordDO=new CouponRecordDO(); BeanUtils.copyProperties(dto,couponRecordDO); couponRecordDO.create(SecurityUtils.getUserId()); // 设置为待使用状态 couponRecordDO.setStatus(CouponUsedStatusEnum.UNUSED.getType()); + // 根据商户设置用户id + if(StringUtils.isBlank(dto.getUserId()) && StringUtils.isNotBlank(customer.getUserId())){ + couponRecordDO.setUserId(customer.getUserId()); + } + // 优惠券字段冗余 - final CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getCouponId()); - 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.plusDays(couponTemplateDO.getUsageTimeNum())); - } - if (couponTemplateDO.getUsageTimeType().equals(CouponUsageTimeTypeEnum.MINUTE.getType())) { - // 分钟 - couponRecordDO.setEffectiveEnd(currentTime.plusDays(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())); + } + } } @@ -273,16 +283,27 @@ } @Override - public int statisCouponTemplateCount(QueryCouponStatisticsBO queryCouponStatisticsBO) { + public Integer statisCouponTemplateCount(QueryCouponStatisticsBO queryCouponStatisticsBO) { return couponRecordMapperCustom.statisCouponTemplateCount(queryCouponStatisticsBO); } @Override - public int statisCouponTemplateCurMonCount(QueryCouponStatisticsBO queryCouponStatisticsBO) { + public Integer statisCouponTemplateCurMonCount(QueryCouponStatisticsBO queryCouponStatisticsBO) { return couponRecordMapperCustom.statisCouponTemplateCurMonCount(queryCouponStatisticsBO); } @Override - public int statisCouponPointCurMonPontAmonut(QueryCouponStatisticsBO queryCouponStatisticsBO) { + public Integer statisCouponPointCurMonPontAmonut(QueryCouponStatisticsBO queryCouponStatisticsBO) { return couponRecordMapperCustom.statisCouponPointCurMonPointAmonut(queryCouponStatisticsBO); } + + @Override + public int 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(StringUtils.isNotBlank(dto.getCategory()),CouponRecordDO::getCategory,dto.getCategory()); + + return baseMapper.selectCount(queryWrapper); + } } -- Gitblit v1.9.3