From dde5cf11c3ca6bddbd6aaeccf4e69d4f96ae8a45 Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期一, 02 九月 2024 13:02:05 +0800 Subject: [PATCH] 1.优惠券返回字段增加 --- src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java | 168 +++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 107 insertions(+), 61 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 a56b81e..4a577d0 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 @@ -1,20 +1,15 @@ 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; import com.mzl.flower.config.exception.ValidationException; import com.mzl.flower.config.security.SecurityUtils; -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.request.coupon.*; 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.*; import com.mzl.flower.mapper.coupon.CouponRecordMapper; import com.mzl.flower.mapper.coupon.CouponRecordMapperCustom; @@ -67,6 +62,8 @@ @Override public boolean createCouponRecord(CreateCouponRecordDTO dto) { + // TODO 需要控制超领 + final Customer customer = customerMapper.selectById(dto.getCustomerId()); if(null==customer){ throw new ValidationException("商户信息不存在"); @@ -77,10 +74,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(); @@ -104,6 +123,7 @@ couponRecordDO.setCouponDiscountType(couponTemplateDO.getCouponDiscountType()); couponRecordDO.setGetUserType(couponTemplateDO.getGetUserType()); couponRecordDO.setPoint(couponTemplateDO.getPoint()); + couponRecordDO.setMemberId(couponRecordDO.getMemberId()); // 根据优惠券模板来计算优惠券的生效开始时间和结束时间 @@ -146,7 +166,6 @@ } } - return baseMapper.insert(couponRecordDO)>0; } @@ -197,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 @@ -297,13 +318,38 @@ } @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); + } + + @Override + public List<CouponRecordVO> getMineCouponRecordList(QueryMineCouponRecordDTO dto) { + return couponRecordMapperCustom.getMineCouponRecordList(dto); + } } -- Gitblit v1.9.3