diff --git a/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java b/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java new file mode 100644 index 00000000..9eabd094 --- /dev/null +++ b/consumer/src/main/java/cn/lili/event/impl/RegisteredCouponActivityExecute.java @@ -0,0 +1,41 @@ +package cn.lili.event.impl; + +import cn.lili.event.MemberRegisterEvent; +import cn.lili.modules.member.entity.dos.Member; +import cn.lili.modules.promotion.entity.dos.CouponActivity; +import cn.lili.modules.promotion.entity.enums.CouponActivityTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.service.CouponActivityService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 注册赠券活动 + * + * @author Bulbasaur + * @date: 2021/5/24 10:48 上午 + */ +@Component +public class RegisteredCouponActivityExecute implements MemberRegisterEvent { + + @Autowired + private CouponActivityService couponActivityService; + + /** + * 获取进行中的注册赠券的优惠券活动 + * 发送注册赠券 + * + * @param member 会员 + */ + @Override + public void memberRegister(Member member) { + List couponActivities = couponActivityService.list(new LambdaQueryWrapper() + .eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name()) + .eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.START.name())); + couponActivityService.registered(couponActivities, member); + + } +} diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/couponActivity/CouponActivityExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/couponActivity/CouponActivityExecute.java new file mode 100644 index 00000000..9481998d --- /dev/null +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/couponActivity/CouponActivityExecute.java @@ -0,0 +1,79 @@ +package cn.lili.timetask.handler.impl.couponActivity; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.lili.modules.promotion.entity.dos.CouponActivity; +import cn.lili.modules.promotion.entity.enums.CouponActivityTypeEnum; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.service.CouponActivityService; +import cn.lili.timetask.handler.EveryMinuteExecute; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 优惠券活动状态监测 + * + * @author Bulbasaur + * @date: 2021/5/24 10:08 上午 + */ +@Component +public class CouponActivityExecute implements EveryMinuteExecute { + + @Autowired + private CouponActivityService couponActivityService; + + @Override + public void execute() { + //精确发券活动 + specify(); + //注册赠券的活动 + registered(); + } + + /** + * 监测精确发券活动 + * 达到活动时间发送优惠券 + */ + private void specify(){ + DateTime dateTime=DateUtil.date(); + List couponActivities=couponActivityService.list(new LambdaQueryWrapper() + .eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.SPECIFY.name()) + .le(CouponActivity::getStartTime, dateTime) + .eq(CouponActivity::getPromotionStatus,PromotionStatusEnum.NEW.name())); + //如果有符合要求的优惠券活动,发送优惠券 + if(couponActivities.size()>0){ + for (CouponActivity CouponActivity:couponActivities) { + couponActivityService.specify(CouponActivity.getId()); + } + //修改精准发券优惠券活动状态 + couponActivityService.update(new LambdaUpdateWrapper() + .eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.SPECIFY.name()) + .set(CouponActivity::getPromotionStatus,PromotionStatusEnum.END.name())); + } + + } + /** + * 注册赠券活动状态监测 + */ + private void registered(){ + //开启注册赠券优惠券活动 + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name()) + .eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.NEW.name()) + .le(CouponActivity::getStartTime, DateUtil.date()) + .set(CouponActivity::getActivityScope,PromotionStatusEnum.START.name()); + couponActivityService.update(lambdaUpdateWrapper); + + //关闭注册赠券优惠券活动 + LambdaUpdateWrapper endWrapper = new LambdaUpdateWrapper<>(); + endWrapper.eq(CouponActivity::getCouponActivityType, CouponActivityTypeEnum.REGISTERED.name()) + .eq(CouponActivity::getPromotionStatus, PromotionStatusEnum.START.name()) + .le(CouponActivity::getEndTime, DateUtil.date()) + .set(CouponActivity::getActivityScope,PromotionStatusEnum.END.name()); + couponActivityService.update(endWrapper); + } +} diff --git a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java index c0aee57d..f347e484 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java @@ -48,19 +48,13 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { log.info("促销活动信息消费:{}", promotionMessage); // 如果为促销活动开始,则需要发布促销活动结束的定时任务 if (PromotionStatusEnum.START.name().equals(promotionMessage.getPromotionStatus())) { - if (!promotionService.updatePromotionStatus(promotionMessage)) { - log.error("开始促销活动失败: {}", promotionMessage); - return; - } - // 促销活动开始后,设置促销活动结束的定时任务 - promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name()); - String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId(); - // 结束时间(延时一分钟) - long closeTime = promotionMessage.getEndTime().getTime() + 60000; - TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic()); - timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(promotionMessage.getEndTime().getTime())); - } else { - promotionService.updatePromotionStatus(promotionMessage); + //设置活动关闭时间 + setCloseTime(promotionMessage); + } + //更新促销活动状态 + if (!promotionService.updatePromotionStatus(promotionMessage)) { + log.error("开始促销活动失败: {}", promotionMessage); + return; } return; } @@ -73,5 +67,22 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { } } + /** + * 设置促销活动结束时间 + * + * @param promotionMessage 信息队列传输促销信息实体 + */ + private void setCloseTime(PromotionMessage promotionMessage) { + //如果设置了活动结束时间则创建促销结束延时任务 + if(promotionMessage.getEndTime()!=null){ + // 促销活动开始后,设置促销活动结束的定时任务 + promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name()); + String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId(); + // 结束时间(延时一分钟) + long closeTime = promotionMessage.getEndTime().getTime() + 60000; + TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic()); + timeTrigger.addDelay(timeTriggerMsg, DateUtil.getDelayTime(promotionMessage.getEndTime().getTime())); + } + } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java index f26919dc..9c9739e0 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/Coupon.java @@ -81,4 +81,14 @@ public class Coupon extends BasePromotion { @ApiModelProperty(value = "消费门槛") private Double consumeThreshold; + /** + * @see cn.lili.modules.promotion.entity.enums.CouponRangeDayEnum + * + */ + @ApiModelProperty(value = "时间范围类型") + private String rangeDayType; + + @ApiModelProperty(value = "有效期") + private Integer effectiveDays; + } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java index 00be19bc..6cb4c216 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/CouponActivity.java @@ -1,6 +1,7 @@ package cn.lili.modules.promotion.entity.dos; import cn.lili.modules.promotion.entity.dto.BasePromotion; +import cn.lili.modules.promotion.entity.enums.CouponActivityTypeEnum; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -23,6 +24,12 @@ import javax.validation.constraints.NotNull; @ApiModel(value = "优惠券活动实体类") public class CouponActivity extends BasePromotion { + /** + * @see CouponActivityTypeEnum + * @author Bulbasaur + * @date: 2021/5/24 10:28 上午 + * + */ @NotNull(message = "优惠券活动类型不能为空") @ApiModelProperty(value = "优惠券活动类型") private String couponActivityType; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponRangeDayEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponRangeDayEnum.java new file mode 100644 index 00000000..d67aa29d --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/CouponRangeDayEnum.java @@ -0,0 +1,27 @@ +package cn.lili.modules.promotion.entity.enums; + +/** + * 优惠券时间范围枚举 + * + * @author Bulbasaur + * @date: 2021/5/24 8:31 上午 + */ +public enum CouponRangeDayEnum { + + /** + * 枚举 + */ + FIXEDTIME("固定时间"), DYNAMICTIME("动态时间"); + + private final String description; + + CouponRangeDayEnum(String str) { + this.description = str; + } + + public String description() { + return description; + } + + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java index 2a346080..e7e2a883 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java @@ -11,7 +11,13 @@ public enum PromotionTypeEnum { /** * 促销枚举 */ - PINTUAN("拼团"), SECKILL("秒杀"), COUPON("优惠券"), FULL_DISCOUNT("满减"), POINTS_GOODS("积分商品"); + PINTUAN("拼团"), + SECKILL("秒杀"), + COUPON("优惠券"), + FULL_DISCOUNT("满减"), + POINTS_GOODS("积分商品"), + COUPON_ACTIVITY("优惠券活动") + ; /** * 拼团秒杀拥有独立库存,如果其他促销也有独立库存涉及库存扣减的,请添加在下方 diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java index f178b21d..6992fb95 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/CouponActivityService.java @@ -1,7 +1,9 @@ package cn.lili.modules.promotion.service; +import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -46,17 +48,16 @@ public interface CouponActivityService extends IService { /** * 注册赠券 * - * @param couponActivityIds 优惠券活动ID - * @param memberId + * @param couponActivityList 优惠券活动 + * @param member 会员 */ - void registered(List couponActivityIds, String memberId); + void registered(List couponActivityList, Member member); - //编辑优惠券活动 //删除优惠券活动 //关闭优惠券活动 - + boolean updateCouponActivityStatus(String id, PromotionStatusEnum promotionStatus); //开启优惠券活动 //查看优惠券活动 diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java index 4ae3801b..c78b41ae 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/CouponActivityServiceImpl.java @@ -10,6 +10,7 @@ import cn.lili.modules.promotion.entity.dos.CouponActivityItem; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import cn.lili.modules.promotion.mapper.CouponActivityMapper; import cn.lili.modules.promotion.service.CouponActivityItemService; @@ -53,7 +54,6 @@ public class CouponActivityServiceImpl extends ServiceImpl couponActivityIds, String memberId) { - for (String couponActivityId : couponActivityIds) { - //获取优惠券 - CouponActivity couponActivity = this.getById(couponActivityId); + public void registered(List couponActivityList, Member member) { + for (CouponActivity couponActivity : couponActivityList) { //获取会员信息 List> memberList = new ArrayList<>(); Map map = new HashMap<>(); - map.put("id", memberId); - map.put("nick_name", memberService.getById(memberId).getNickName()); + map.put("id", member.getId()); + map.put("nick_name", member.getNickName()); memberList.add(map); //优惠优惠券活动的优惠券列表 @@ -111,6 +108,13 @@ public class CouponActivityServiceImpl extends ServiceImpl promotionGoodsList = pintuanVO.getPromotionGoodsList(); - // 更新促销商品索引 - for (PromotionGoods promotionGoods : promotionGoodsList) { - Pintuan pintuan1 = JSONUtil.toBean(JSONUtil.toJsonStr(pintuanVO), Pintuan.class); - this.goodsIndexService.updateEsGoodsIndex(promotionGoods.getSkuId(), pintuan1, esPromotionKey, promotionGoods.getPrice()); - } - this.mongoTemplate.save(pintuanVO); + result = this.updatePintuan(promotionMessage, esPromotionKey, promotionTypeEnum); break; //优惠券 case COUPON: @@ -146,16 +96,11 @@ public class PromotionServiceImpl implements PromotionService { break; //积分商品 case POINTS_GOODS: - PointsGoodsVO pointsGoodsVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PointsGoodsVO.class); - if (pointsGoodsVO == null) { - this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); - break; - } - pointsGoodsVO.setPromotionStatus(promotionMessage.getPromotionStatus()); - result = this.pointsGoodsService.update(promotionMessage.updateWrapper()); - PointsGoods pointsGoods = JSONUtil.toBean(JSONUtil.toJsonStr(pointsGoodsVO), PointsGoods.class); - this.goodsIndexService.updateEsGoodsIndex(pointsGoodsVO.getSkuId(), pointsGoods, esPromotionKey, null); - this.mongoTemplate.save(pointsGoodsVO); + result = this.updatePointsGoods(promotionMessage, esPromotionKey, promotionTypeEnum); + break; + //优惠券活动 + case COUPON_ACTIVITY: + result = this.updateCouponActivity(promotionMessage, promotionTypeEnum); break; default: break; @@ -285,6 +230,13 @@ public class PromotionServiceImpl implements PromotionService { return promotionMap; } + /** + * 修改满额活动状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ private boolean updateFullDiscount(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { boolean result; //从mongo中获取促销备份 @@ -315,19 +267,31 @@ public class PromotionServiceImpl implements PromotionService { return result; } + /** + * 修改优惠券状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ private boolean updateCoupon(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { boolean result; + //从mongo中获取优惠券信息 CouponVO couponVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), CouponVO.class); if (couponVO == null) { this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); return false; } + //修改优惠券 couponVO.setPromotionStatus(promotionMessage.getPromotionStatus()); - result = this.couponService.update(promotionMessage.updateWrapper()); - - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper().eq(MemberCoupon::getCouponId, couponVO.getId()).set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); - this.memberCouponService.update(updateWrapper); + //优惠券活动结束,会员已领取的优惠券状态修改为:已过期 + if(couponVO.getPromotionStatus().equals(PromotionStatusEnum.END)){ + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .eq(MemberCoupon::getCouponId, couponVO.getId()) + .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name()); + this.memberCouponService.update(updateWrapper); + } // clone一个活动信息,用于存放与索引中 CouponVO clone = ObjectUtil.clone(couponVO); clone.setPromotionGoodsList(null); @@ -343,11 +307,127 @@ public class PromotionServiceImpl implements PromotionService { return result; } + /** + * 修改拼团状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ + private boolean updatePintuan(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + boolean result; + PintuanVO pintuanVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PintuanVO.class); + if (pintuanVO == null) { + this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); + return false; + } + pintuanVO.setPromotionStatus(promotionMessage.getPromotionStatus()); + result = this.pintuanService.update(promotionMessage.updateWrapper()); + this.promotionGoodsService.updateBatchById(pintuanVO.getPromotionGoodsList()); + List promotionGoodsList = pintuanVO.getPromotionGoodsList(); + // 更新促销商品索引 + for (PromotionGoods promotionGoods : promotionGoodsList) { + Pintuan pintuan1 = JSONUtil.toBean(JSONUtil.toJsonStr(pintuanVO), Pintuan.class); + this.goodsIndexService.updateEsGoodsIndex(promotionGoods.getSkuId(), pintuan1, esPromotionKey, promotionGoods.getPrice()); + } + this.mongoTemplate.save(pintuanVO); + return result; + } + + /** + * 修改秒杀状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ + private boolean updateSeckill(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + boolean result; + SeckillVO seckill = this.mongoTemplate.findById(promotionMessage.getPromotionId(), SeckillVO.class); + if (seckill == null) { + this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); + return false; + } + seckill.setPromotionStatus(promotionMessage.getPromotionStatus()); + result = this.seckillService.update(promotionMessage.updateWrapper()); + for (SeckillApply seckillApply : seckill.getSeckillApplyList()) { + if (seckillApply.getPromotionApplyStatus().equals(PromotionApplyStatusEnum.PASS.name())) { + // 下一个时间,默认为当天结束时间 + int nextHour = 23; + String[] split = seckill.getHours().split(","); + int[] hoursSored = Arrays.stream(split).mapToInt(Integer::parseInt).toArray(); + // 排序时间段 + Arrays.sort(hoursSored); + for (int i : hoursSored) { + // 如果当前时间段大于排序后的时间段的某个,当前时间段的下个时间段即为排序后的时间段的某个 + if (seckillApply.getTimeLine() < i) { + nextHour = i; + break; + } + } + Seckill seckill1 = JSONUtil.toBean(JSONUtil.toJsonStr(seckill), Seckill.class); + String format = cn.hutool.core.date.DateUtil.format(seckill.getStartTime(), DateUtil.STANDARD_DATE_FORMAT); + DateTime parseStartTime = cn.hutool.core.date.DateUtil.parse((format + " " + seckillApply.getTimeLine()), "yyyy-MM-dd HH"); + DateTime parseEndTime = cn.hutool.core.date.DateUtil.parse((format + " " + nextHour), "yyyy-MM-dd HH"); + // 如果是当天最后的时间段则设置到当天结束时间的59分59秒 + if (nextHour == seckillApply.getTimeLine()) { + parseEndTime = cn.hutool.core.date.DateUtil.parse((format + " " + nextHour + ":59:59"), DateUtil.STANDARD_FORMAT); + } + seckill1.setStartTime(parseStartTime); + // 当时商品的限时抢购活动结束时间为下个时间段的开始 + seckill1.setEndTime(parseEndTime); + this.goodsIndexService.updateEsGoodsIndex(seckillApply.getSkuId(), seckill1, promotionTypeEnum.name() + "-" + seckillApply.getTimeLine(), seckillApply.getPrice()); + } + } + return result; + } + + /** + * 修改积分商品状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ + private boolean updatePointsGoods(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + boolean result; + PointsGoodsVO pointsGoodsVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PointsGoodsVO.class); + if (pointsGoodsVO == null) { + this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); + return false; + } + pointsGoodsVO.setPromotionStatus(promotionMessage.getPromotionStatus()); + result = this.pointsGoodsService.update(promotionMessage.updateWrapper()); + PointsGoods pointsGoods = JSONUtil.toBean(JSONUtil.toJsonStr(pointsGoodsVO), PointsGoods.class); + this.goodsIndexService.updateEsGoodsIndex(pointsGoodsVO.getSkuId(), pointsGoods, esPromotionKey, null); + this.mongoTemplate.save(pointsGoodsVO); + return result; + } + + /** + * 修改优惠券活动状态 + * @param promotionMessage 信息队列传输促销信息实体 + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ + private boolean updateCouponActivity(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum){ + boolean result; + CouponActivityVO couponActivityVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), CouponActivityVO.class); + if (couponActivityVO == null) { + this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); + return false; + } + couponActivityVO.setPromotionStatus(promotionMessage.getPromotionStatus()); + result = this.couponActivityService.update(promotionMessage.updateWrapper()); + this.mongoTemplate.save(couponActivityVO); + return result; + } + /** * 更新促销商品信息 * - * @param promotionId - * @param promotionStatus + * @param promotionId 促销活动ID + * @param promotionStatus 活动状态 */ private void updatePromotionGoods(String promotionId, String promotionStatus) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java index 8dabf79f..b71e55bb 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/CouponActivityManagerController.java @@ -1,16 +1,20 @@ package cn.lili.controller.promotion; +import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; +import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.promotion.entity.dos.CouponActivity; import cn.lili.modules.promotion.entity.dto.CouponActivityDTO; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import cn.lili.modules.promotion.entity.vos.CouponActivityVO; import cn.lili.modules.promotion.service.CouponActivityService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -44,8 +48,27 @@ public class CouponActivityManagerController { } @ApiOperation(value = "添加优惠券活动") - @PostMapping("/add") + @PostMapping("/addCouponActivity") public ResultMessage addCouponActivity(@Validated CouponActivityDTO couponActivityDTO) { return ResultUtil.data(couponActivityService.addCouponActivity(couponActivityDTO)); } + + @ApiOperation(value = "修改优惠券活动") + @PutMapping("/updateCouponActivity") + public ResultMessage updateCouponActivity(@Validated CouponActivityDTO couponActivityDTO) { + return ResultUtil.data(couponActivityService.updateCouponActivity(couponActivityDTO)); + } + + @ApiOperation(value = "关闭、启动优惠券") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "优惠券活动ID", required = true, dataType = "String", paramType = "path"), + @ApiImplicitParam(name = "promotionStatus", value = "活动状态", required = true, dataType = "String", paramType = "path") + }) + @PutMapping("/updateStatus/{id}/{promotionStatus}") + public ResultMessage updateStatus(@PathVariable String id,@PathVariable String promotionStatus) { + if(couponActivityService.updateCouponActivityStatus(id, PromotionStatusEnum.valueOf(promotionStatus))){ + return ResultUtil.success(ResultCode.SUCCESS); + } + throw new ServiceException(ResultCode.ERROR); + } }