From 531ca13555fb166bb65ad6ed820a581646d9f2f8 Mon Sep 17 00:00:00 2001 From: pikachu <1321288662@qq.com> Date: Tue, 6 Jul 2021 18:35:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A0=8D=E4=BB=B7=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lili/common/enums/ResultCode.java | 10 +- .../entity/dos/KanJiaActivityGoods.java | 76 +++++++++ .../entity/dto/KanJiaActivityEditDTO.java | 51 ++++++ .../entity/dto/KanJiaActivityGoodsDTO.java | 60 +++++++ .../entity/enums/PromotionTypeEnum.java | 3 +- .../entity/vos/KanJiaActivityGoodsParams.java | 61 ++++++++ .../mapper/KanJiaActivityGoodsMapper.java | 15 ++ .../service/KanJiaActivityGoodsService.java | 41 +++++ .../KanJiaActivityGoodsServiceImpl.java | 146 ++++++++++++++++++ .../serviceimpl/PromotionServiceImpl.java | 75 ++++++--- .../KanJiaActivityGoodsManagerController.java | 48 ++++++ 11 files changed, 562 insertions(+), 24 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityEditDTO.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java create mode 100644 manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index bd499283..f1cffc46 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -237,6 +237,8 @@ public enum ResultCode { PROMOTION_GOODS_ERROR(40006,"请选择要参与活动的商品"), PROMOTION_STATUS_END(40007,"当前活动已停止"), PROMOTION_UPDATE_ERROR(40008,"当前活动已开始/结束,无法编辑!"), + PROMOTION_ACTIVITY_GOODS_ERROR(40009,"当前活动已经开始无法添加商品"), + PROMOTION_ACTIVITY_ERROR(40009,"当前促销活动不存在"), /** * 优惠券 @@ -320,7 +322,13 @@ public enum ResultCode { * 其他促销 */ MEMBER_SIGN_REPEAT(47001, "请勿重复签到"), - POINT_GOODS_ACTIVE_STOCK_ERROR(47002, "活动库存数量不能高于商品库存"), + POINT_GOODS_ACTIVE_STOCK_ERROR(47002, "最低金额不能高于商品金额"), + + /** + * 砍价活动 + */ + KANJIIA_GOODS_ACTIVE_STOCK_ERROR(48001, "活动库存数量不能高于商品库存"), + KANJIIA_GOODS_ACTIVE_PRICE_ERROR(48001, "活动库存数量不能高于商品库存"), /** * 店铺 */ diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java new file mode 100644 index 00000000..4ec7ce0e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java @@ -0,0 +1,76 @@ +package cn.lili.modules.promotion.entity.dos; + +import cn.lili.base.BaseEntity; +import cn.lili.modules.promotion.entity.dto.BasePromotion; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * 砍价活动商品实体类 + * + * @author qiuqiu + * @date 2020-7-1 10:44 上午 + */ +@Data +@Entity +@Table(name = "li_kanjia_activity_goods") +@TableName("li_kanjia_activity_goods") +@ApiModel(value = "砍价活动对象") +public class KanJiaActivityGoods extends BaseEntity { + + private static final long serialVersionUID = 6694714877345423488L; + + @ApiModelProperty(value = "结算价格") + private Double settlementPrice; + + @ApiModelProperty(value = "最低购买金额") + private Double purchasePrice; + + @ApiModelProperty(value = "货品id") + private String skuId; + + @ApiModelProperty(value = "货品名称") + private String goodsName; + + @ApiModelProperty(value = "缩略图") + private String thumbnail; + + @ApiModelProperty(value = "活动库存") + private Integer stock; + + @ApiModelProperty(value = "每人最低砍价金额") + private Double lowestPrice; + + @ApiModelProperty(value = "每人最高砍价金额") + private Double highestPrice; + + /** + * @see PromotionStatusEnum + */ + @ApiModelProperty(value = "活动状态") + @NotNull(message = "活动状态不能为空") + private String promotionStatus; + + @Min(message = "活动开始时间不能为空", value = 0) + @ApiModelProperty(value = "活动开始时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + @Min(message = "活动结束时间不能为空", value = 0) + @ApiModelProperty(value = "活动结束时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityEditDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityEditDTO.java new file mode 100644 index 00000000..ab43651e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityEditDTO.java @@ -0,0 +1,51 @@ +package cn.lili.modules.promotion.entity.dto; + + +import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.Date; + +/** + * 砍价活动通用类 + * + * @author qiuqiu + * @date 2020/8/21 + **/ +@Data +public class KanJiaActivityEditDTO implements Serializable { + + + private static final long serialVersionUID = -1378599087650538592L; + @NotEmpty(message = "活动名称不能为空") + @ApiModelProperty(value = "活动名称", required = true) + private String promotionName; + + @ApiModelProperty(value = "每人最低砍价金额", required = true) + @NotEmpty(message = "每人最低砍价金额不能为空") + private Double lowestPrice; + + @ApiModelProperty(value = "每人最高砍价金额", required = true) + @NotEmpty(message = "每人最高砍价金额不能为空") + private Double highestPrice; + + @Min(message = "活动开始时间不能为空", value = 0) + @ApiModelProperty(value = "活动开始时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + @Min(message = "活动结束时间不能为空", value = 0) + @ApiModelProperty(value = "活动结束时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + @ApiModelProperty(value = "砍价活动商品列表") + IPage promotionGoodsList; + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java new file mode 100644 index 00000000..246da5b6 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java @@ -0,0 +1,60 @@ +package cn.lili.modules.promotion.entity.dto; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.Date; + +/** + * 砍价活动商品 + * + * @author qiuqiu + * @date 2020/8/21 + **/ +@Data +public class KanJiaActivityGoodsDTO implements Serializable { + + + private static final long serialVersionUID = 1969340823809319805L; + + @ApiModelProperty(value = "结算价格") + @NotEmpty(message = "结算价格不能为空") + private Double settlementPrice; + + @ApiModelProperty(value = "最低购买金额") + @NotEmpty(message = "最低购买金额不能为空") + private Double purchasePrice; + + @ApiModelProperty(value = "货品id") + @NotEmpty(message = "货品id不能为空") + private String skuId; + + @ApiModelProperty(value = "活动库存") + @NotEmpty(message = "活动库存不能为空") + private Integer stock; + + @ApiModelProperty(value = "每人最低砍价金额") + @NotEmpty(message = "每人最低砍价金额不能为空") + private Double lowestPrice; + + @NotEmpty(message = "每人最高砍价金额不能为空") + @ApiModelProperty(value = "每人最高砍价金额") + private Double highestPrice; + + @Min(message = "活动开始时间不能为空", value = 0) + @ApiModelProperty(value = "活动开始时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + @Min(message = "活动结束时间不能为空", value = 0) + @ApiModelProperty(value = "活动结束时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + +} 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 e7e2a883..b2ce2dd0 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 @@ -16,13 +16,14 @@ public enum PromotionTypeEnum { COUPON("优惠券"), FULL_DISCOUNT("满减"), POINTS_GOODS("积分商品"), + KAN_JIA("砍价"), COUPON_ACTIVITY("优惠券活动") ; /** * 拼团秒杀拥有独立库存,如果其他促销也有独立库存涉及库存扣减的,请添加在下方 */ - static PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL}; + static PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL, KAN_JIA}; private final String description; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java new file mode 100644 index 00000000..e22abe1a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java @@ -0,0 +1,61 @@ +package cn.lili.modules.promotion.entity.vos; + + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.modules.promotion.entity.enums.*; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 砍价活动商品查询通用类 + * + * @author qiuqiu + * @date 2020/8/21 + **/ +@Data +public class KanJiaActivityGoodsParams implements Serializable { + + private static final long serialVersionUID = 1344104067705714289L; + + @ApiModelProperty(value = "活动名称") + private String goodsName; + + + @ApiModelProperty(value = "活动开始时间", required = true) + private Long startTime; + + @ApiModelProperty(value = "活动结束时间", required = true) + private Long endTime; + + /** + * @see PromotionStatusEnum + */ + @ApiModelProperty(value = "活动状态") + private String promotionStatus; + + public QueryWrapper wrapper() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + if (CharSequenceUtil.isNotEmpty(goodsName)) { + queryWrapper.like("goods_name", goodsName); + } + if (promotionStatus != null) { + queryWrapper.eq("promotion_status", promotionStatus); + } + if (startTime != null) { + queryWrapper.ge("start_time", new Date(startTime)); + } + if (endTime != null) { + queryWrapper.le("end_time", new Date(endTime)); + } + queryWrapper.eq("delete_flag", false); + return queryWrapper; + } + + + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java new file mode 100644 index 00000000..d856c2d1 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java @@ -0,0 +1,15 @@ +package cn.lili.modules.promotion.mapper; + +import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * + * 砍价活动商品数据处理层 + * + * @author qiuqiu + * @date 2021/7/1 + */ +public interface KanJiaActivityGoodsMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java b/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java new file mode 100644 index 00000000..431fd2fd --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java @@ -0,0 +1,41 @@ +package cn.lili.modules.promotion.service; + + +import cn.lili.common.vo.PageVO; +import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsDTO; +import cn.lili.modules.promotion.entity.vos.KanJiaActivityGoodsParams; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + + +/** + * 砍价业务层 + * + * @author qiuqiu + * @date 2021/7/1 9:45 上午 + */ +public interface KanJiaActivityGoodsService extends IService { + + + /** + * 添加砍价活动商品 + * + * @param kanJiaActivityGoodsDTOS 砍价商品 + * @return 是否添加成功 + */ + boolean add(List kanJiaActivityGoodsDTOS); + + /** + * 查询砍价活动商品分页信息 + * + * @param kanJiaActivityGoodsParams 砍价活动商品 + * @param pageVO 分页信息 + * @return 砍价商品 + */ + IPage getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO); + + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java new file mode 100644 index 00000000..c731264c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java @@ -0,0 +1,146 @@ +package cn.lili.modules.promotion.serviceimpl; + + +import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; +import cn.lili.common.trigger.enums.DelayTypeEnums; +import cn.lili.common.trigger.interfaces.TimeTrigger; +import cn.lili.common.trigger.message.PromotionMessage; +import cn.lili.common.trigger.model.TimeExecuteConstant; +import cn.lili.common.trigger.model.TimeTriggerMsg; +import cn.lili.common.trigger.util.DelayQueueTools; +import cn.lili.common.utils.PageUtil; +import cn.lili.common.vo.PageVO; +import cn.lili.config.rocketmq.RocketmqCustomProperties; +import cn.lili.modules.goods.entity.dos.GoodsSku; +import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; +import cn.lili.modules.goods.service.GoodsSkuService; +import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsDTO; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; +import cn.lili.modules.promotion.entity.vos.KanJiaActivityGoodsParams; +import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; +import cn.lili.modules.promotion.mapper.KanJiaActivityGoodsMapper; +import cn.lili.modules.promotion.service.KanJiaActivityGoodsService; +import cn.lili.modules.promotion.tools.PromotionTools; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * 砍价业务层实现 + * + * @author qiuqiu + * @date 2021/7/1 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class KanJiaActivityGoodsServiceImpl extends ServiceImpl implements KanJiaActivityGoodsService { + + //规格商品 + @Autowired + private GoodsSkuService goodsSkuService; + + //Rocketmq + @Autowired + private RocketmqCustomProperties rocketmqCustomProperties; + + //延时任务 + @Autowired + private TimeTrigger timeTrigger; + + + @Override + public boolean add(List kanJiaActivityGoodsDTOS) { + List kanJiaActivityGoodsList = new ArrayList<>(); + for (KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO : kanJiaActivityGoodsDTOS) { + //根据skuId查询商品信息 + GoodsSku goodsSku = this.checkSkuExist(kanJiaActivityGoodsDTO.getSkuId()); + //校验商品是否存在 + if (goodsSku == null) { + throw new ServiceException(ResultCode.PROMOTION_GOODS_NOT_EXIT); + } + //校验商品状态 + if (goodsSku.getMarketEnable().equals(GoodsStatusEnum.DOWN.name())) { + throw new ServiceException(ResultCode.GOODS_NOT_EXIST); + } + //校验活动库存是否超出此sku的库存 + if (goodsSku.getQuantity() < kanJiaActivityGoodsDTO.getStock()) { + throw new ServiceException(ResultCode.POINT_GOODS_ACTIVE_STOCK_ERROR); + } + //校验最低购买金额不能高于商品金额 + if (goodsSku.getPrice() < kanJiaActivityGoodsDTO.getPurchasePrice()) { + throw new ServiceException(ResultCode.KANJIIA_GOODS_ACTIVE_PRICE_ERROR); + } + //检测同一时间段是否存在相同的商品 + PromotionTools.checkPromotionTime(kanJiaActivityGoodsDTO.getStartTime().getTime(), kanJiaActivityGoodsDTO.getEndTime().getTime()); + //赋值保存 + KanJiaActivityGoods kanJiaActivityGoods = new KanJiaActivityGoods(); + kanJiaActivityGoods.setSkuId(kanJiaActivityGoodsDTO.getSkuId()); + kanJiaActivityGoods.setThumbnail(goodsSku.getThumbnail()); + kanJiaActivityGoods.setPurchasePrice(kanJiaActivityGoodsDTO.getPurchasePrice()); + kanJiaActivityGoods.setSettlementPrice(kanJiaActivityGoodsDTO.getSettlementPrice()); + kanJiaActivityGoods.setGoodsName(goodsSku.getGoodsName()); + kanJiaActivityGoods.setStock(kanJiaActivityGoodsDTO.getStock()); + kanJiaActivityGoods.setHighestPrice(kanJiaActivityGoodsDTO.getHighestPrice()); + kanJiaActivityGoods.setLowestPrice(kanJiaActivityGoodsDTO.getLowestPrice()); + kanJiaActivityGoodsList.add(kanJiaActivityGoods); + } + Boolean result = this.saveBatch(kanJiaActivityGoodsList); + if (result) { + //发送砍价延迟任务消息 + for (KanJiaActivityGoods kanJiaActivityGoods : kanJiaActivityGoodsList) { + this.addKanJiaGoodsPromotionTask(kanJiaActivityGoods); + } + } + return result; + } + + + /** + * 添加砍价商品mq任务 + * + * @param kanJiaActivityGoods 砍价商品信息 + */ + private void addKanJiaGoodsPromotionTask(KanJiaActivityGoods kanJiaActivityGoods) { + PromotionMessage promotionMessage = new PromotionMessage(kanJiaActivityGoods.getId(), PromotionTypeEnum.KAN_JIA.name(), + PromotionStatusEnum.START.name(), + kanJiaActivityGoods.getStartTime(), kanJiaActivityGoods.getEndTime()); + TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, + promotionMessage.getStartTime().getTime(), + promotionMessage, + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + rocketmqCustomProperties.getPromotionTopic()); + //发送促销活动开始的延时任务 + this.timeTrigger.addDelay(timeTriggerMsg); + } + + @Override + public IPage getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO) { + QueryWrapper queryWrapper = kanJiaActivityGoodsParams.wrapper(); + return page(PageUtil.initPage(pageVO), queryWrapper); + } + + + /** + * 检查商品Sku是否存 + * + * @param skuId skuId + * @return 商品sku + */ + private GoodsSku checkSkuExist(String skuId) { + GoodsSku goodsSku = this.goodsSkuService.getGoodsSkuByIdFromCache(skuId); + if (goodsSku == null) { + log.error("商品ID为" + skuId + "的商品不存在!"); + throw new ServiceException(); + } + return goodsSku; + } +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java index 1a3aeedb..3f0e520e 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java @@ -71,6 +71,8 @@ public class PromotionServiceImpl implements PromotionService { //Mongo @Autowired private MongoTemplate mongoTemplate; + @Autowired + private KanJiaActivityGoodsService kanJiaActivityGoodsService; @Override @@ -100,6 +102,10 @@ public class PromotionServiceImpl implements PromotionService { case POINTS_GOODS: result = this.updatePointsGoods(promotionMessage, esPromotionKey, promotionTypeEnum); break; + //砍价商品商品 + case KAN_JIA: + result = this.updateKanJiaGoods(promotionMessage, promotionTypeEnum); + break; //优惠券活动 case COUPON_ACTIVITY: result = this.updateCouponActivity(promotionMessage, promotionTypeEnum); @@ -234,8 +240,9 @@ public class PromotionServiceImpl implements PromotionService { /** * 修改满额活动状态 - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ @@ -271,8 +278,9 @@ public class PromotionServiceImpl implements PromotionService { /** * 修改优惠券状态 - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ @@ -288,7 +296,7 @@ public class PromotionServiceImpl implements PromotionService { couponVO.setPromotionStatus(promotionMessage.getPromotionStatus()); result = this.couponService.update(promotionMessage.updateWrapper()); //优惠券活动结束,会员已领取未使用的优惠券状态修改为:已过期 - if(couponVO.getPromotionStatus().equals(PromotionStatusEnum.END)){ + if (couponVO.getPromotionStatus().equals(PromotionStatusEnum.END)) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() .eq(MemberCoupon::getCouponId, couponVO.getId()) .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) @@ -312,12 +320,13 @@ public class PromotionServiceImpl implements PromotionService { /** * 修改拼团状态 - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ - private boolean updatePintuan(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + private boolean updatePintuan(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { boolean result; PintuanVO pintuanVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PintuanVO.class); if (pintuanVO == null) { @@ -343,12 +352,13 @@ public class PromotionServiceImpl implements PromotionService { /** * 修改秒杀状态 - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ - private boolean updateSeckill(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + private boolean updateSeckill(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { boolean result; SeckillVO seckill = this.mongoTemplate.findById(promotionMessage.getPromotionId(), SeckillVO.class); if (seckill == null) { @@ -391,12 +401,13 @@ public class PromotionServiceImpl implements PromotionService { /** * 修改积分商品状态 - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ - private boolean updatePointsGoods(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + private boolean updatePointsGoods(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { boolean result; PointsGoodsVO pointsGoodsVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PointsGoodsVO.class); if (pointsGoodsVO == null) { @@ -412,29 +423,49 @@ public class PromotionServiceImpl implements PromotionService { } /** - * 修改优惠券活动状态 - * @param promotionMessage 信息队列传输促销信息实体 + * 修改砍价商品状态 + * + * @param promotionMessage 信息队列传输促销信息实体 * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ - private boolean updateCouponActivity(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum){ + private boolean updateKanJiaGoods(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { + boolean result; + KanJiaActivityGoods kanJiaActivityGoods = JSONUtil.toBean(JSONUtil.toJsonStr(promotionMessage), KanJiaActivityGoods.class); + if (kanJiaActivityGoods == null) { + this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); + return false; + } + kanJiaActivityGoods.setPromotionStatus(promotionMessage.getPromotionStatus()); + result = this.kanJiaActivityGoodsService.updateById(kanJiaActivityGoods); + return result; + } + + /** + * 修改优惠券活动状态 + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ + private boolean updateCouponActivity(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { //如果是精准发券,进行发送优惠券 - CouponActivity couponActivity=couponActivityService.getById(promotionMessage.getPromotionId()); - if(couponActivity.getCouponActivityType().equals(CouponActivityTypeEnum.SPECIFY.name())){ + CouponActivity couponActivity = couponActivityService.getById(promotionMessage.getPromotionId()); + if (couponActivity.getCouponActivityType().equals(CouponActivityTypeEnum.SPECIFY.name())) { couponActivityService.specify(couponActivity.getId()); } //修改活动状态 return couponActivityService.update(new LambdaUpdateWrapper() - .eq(CouponActivity::getId,promotionMessage.getPromotionId()) - .set(CouponActivity::getPromotionStatus,promotionMessage.getPromotionStatus())); + .eq(CouponActivity::getId, promotionMessage.getPromotionId()) + .set(CouponActivity::getPromotionStatus, promotionMessage.getPromotionStatus())); } /** * 更新促销商品信息 * - * @param promotionId 促销活动ID + * @param promotionId 促销活动ID * @param promotionStatus 活动状态 */ private void updatePromotionGoods(String promotionId, String promotionStatus) { diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java new file mode 100644 index 00000000..2aede187 --- /dev/null +++ b/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java @@ -0,0 +1,48 @@ +package cn.lili.controller.promotion; + +import cn.lili.common.enums.ResultUtil; +import cn.lili.common.vo.PageVO; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsDTO; +import cn.lili.modules.promotion.entity.vos.KanJiaActivityGoodsParams; +import cn.lili.modules.promotion.service.KanJiaActivityGoodsService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +/** + * 管理端,促销接口 + * + * @author qiuqiu + * @date 2021/7/2 + **/ +@RestController +@Api(tags = "管理端,砍价促销接口") +@RequestMapping("/manager/promotion/kan-jia-goods") +public class KanJiaActivityGoodsManagerController { + + @Autowired + private KanJiaActivityGoodsService kanJiaActivityGoodsService; + + @PostMapping + @ApiOperation(value = "添加砍价活动") + public ResultMessage add(@RequestBody List kanJiaActivityGoodsDTOS) { + kanJiaActivityGoodsService.add(kanJiaActivityGoodsDTOS); + return ResultUtil.success(); + } + + + @ApiOperation(value = "获取砍价活动分页") + @GetMapping + public ResultMessage> getKanjiaActivityPage(KanJiaActivityGoodsParams KanJiaActivityParams, PageVO page) { + return ResultUtil.data(kanJiaActivityGoodsService.getForPage(KanJiaActivityParams, page)); + } + + +}