砍价商品
This commit is contained in:
parent
f9662bd61a
commit
531ca13555
@ -237,6 +237,8 @@ public enum ResultCode {
|
|||||||
PROMOTION_GOODS_ERROR(40006,"请选择要参与活动的商品"),
|
PROMOTION_GOODS_ERROR(40006,"请选择要参与活动的商品"),
|
||||||
PROMOTION_STATUS_END(40007,"当前活动已停止"),
|
PROMOTION_STATUS_END(40007,"当前活动已停止"),
|
||||||
PROMOTION_UPDATE_ERROR(40008,"当前活动已开始/结束,无法编辑!"),
|
PROMOTION_UPDATE_ERROR(40008,"当前活动已开始/结束,无法编辑!"),
|
||||||
|
PROMOTION_ACTIVITY_GOODS_ERROR(40009,"当前活动已经开始无法添加商品"),
|
||||||
|
PROMOTION_ACTIVITY_ERROR(40009,"当前促销活动不存在"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 优惠券
|
* 优惠券
|
||||||
@ -320,7 +322,13 @@ public enum ResultCode {
|
|||||||
* 其他促销
|
* 其他促销
|
||||||
*/
|
*/
|
||||||
MEMBER_SIGN_REPEAT(47001, "请勿重复签到"),
|
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, "活动库存数量不能高于商品库存"),
|
||||||
/**
|
/**
|
||||||
* 店铺
|
* 店铺
|
||||||
*/
|
*/
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -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<KanJiaActivityGoods> promotionGoodsList;
|
||||||
|
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -16,13 +16,14 @@ public enum PromotionTypeEnum {
|
|||||||
COUPON("优惠券"),
|
COUPON("优惠券"),
|
||||||
FULL_DISCOUNT("满减"),
|
FULL_DISCOUNT("满减"),
|
||||||
POINTS_GOODS("积分商品"),
|
POINTS_GOODS("积分商品"),
|
||||||
|
KAN_JIA("砍价"),
|
||||||
COUPON_ACTIVITY("优惠券活动")
|
COUPON_ACTIVITY("优惠券活动")
|
||||||
;
|
;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拼团秒杀拥有独立库存,如果其他促销也有独立库存涉及库存扣减的,请添加在下方
|
* 拼团秒杀拥有独立库存,如果其他促销也有独立库存涉及库存扣减的,请添加在下方
|
||||||
*/
|
*/
|
||||||
static PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL};
|
static PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL, KAN_JIA};
|
||||||
|
|
||||||
private final String description;
|
private final String description;
|
||||||
|
|
||||||
|
@ -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 <T> QueryWrapper<T> wrapper() {
|
||||||
|
QueryWrapper<T> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -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<KanJiaActivityGoods> {
|
||||||
|
|
||||||
|
}
|
@ -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<KanJiaActivityGoods> {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加砍价活动商品
|
||||||
|
*
|
||||||
|
* @param kanJiaActivityGoodsDTOS 砍价商品
|
||||||
|
* @return 是否添加成功
|
||||||
|
*/
|
||||||
|
boolean add(List<KanJiaActivityGoodsDTO> kanJiaActivityGoodsDTOS);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询砍价活动商品分页信息
|
||||||
|
*
|
||||||
|
* @param kanJiaActivityGoodsParams 砍价活动商品
|
||||||
|
* @param pageVO 分页信息
|
||||||
|
* @return 砍价商品
|
||||||
|
*/
|
||||||
|
IPage<KanJiaActivityGoods> getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -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<KanJiaActivityGoodsMapper, KanJiaActivityGoods> implements KanJiaActivityGoodsService {
|
||||||
|
|
||||||
|
//规格商品
|
||||||
|
@Autowired
|
||||||
|
private GoodsSkuService goodsSkuService;
|
||||||
|
|
||||||
|
//Rocketmq
|
||||||
|
@Autowired
|
||||||
|
private RocketmqCustomProperties rocketmqCustomProperties;
|
||||||
|
|
||||||
|
//延时任务
|
||||||
|
@Autowired
|
||||||
|
private TimeTrigger timeTrigger;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean add(List<KanJiaActivityGoodsDTO> kanJiaActivityGoodsDTOS) {
|
||||||
|
List<KanJiaActivityGoods> 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<KanJiaActivityGoods> getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO) {
|
||||||
|
QueryWrapper<KanJiaActivityGoods> 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;
|
||||||
|
}
|
||||||
|
}
|
@ -71,6 +71,8 @@ public class PromotionServiceImpl implements PromotionService {
|
|||||||
//Mongo
|
//Mongo
|
||||||
@Autowired
|
@Autowired
|
||||||
private MongoTemplate mongoTemplate;
|
private MongoTemplate mongoTemplate;
|
||||||
|
@Autowired
|
||||||
|
private KanJiaActivityGoodsService kanJiaActivityGoodsService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -100,6 +102,10 @@ public class PromotionServiceImpl implements PromotionService {
|
|||||||
case POINTS_GOODS:
|
case POINTS_GOODS:
|
||||||
result = this.updatePointsGoods(promotionMessage, esPromotionKey, promotionTypeEnum);
|
result = this.updatePointsGoods(promotionMessage, esPromotionKey, promotionTypeEnum);
|
||||||
break;
|
break;
|
||||||
|
//砍价商品商品
|
||||||
|
case KAN_JIA:
|
||||||
|
result = this.updateKanJiaGoods(promotionMessage, promotionTypeEnum);
|
||||||
|
break;
|
||||||
//优惠券活动
|
//优惠券活动
|
||||||
case COUPON_ACTIVITY:
|
case COUPON_ACTIVITY:
|
||||||
result = this.updateCouponActivity(promotionMessage, promotionTypeEnum);
|
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 促销分类枚举
|
* @param promotionTypeEnum 促销分类枚举
|
||||||
* @return 修改结果
|
* @return 修改结果
|
||||||
*/
|
*/
|
||||||
@ -271,8 +278,9 @@ public class PromotionServiceImpl implements PromotionService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改优惠券状态
|
* 修改优惠券状态
|
||||||
* @param promotionMessage 信息队列传输促销信息实体
|
*
|
||||||
* @param esPromotionKey es Key
|
* @param promotionMessage 信息队列传输促销信息实体
|
||||||
|
* @param esPromotionKey es Key
|
||||||
* @param promotionTypeEnum 促销分类枚举
|
* @param promotionTypeEnum 促销分类枚举
|
||||||
* @return 修改结果
|
* @return 修改结果
|
||||||
*/
|
*/
|
||||||
@ -288,7 +296,7 @@ public class PromotionServiceImpl implements PromotionService {
|
|||||||
couponVO.setPromotionStatus(promotionMessage.getPromotionStatus());
|
couponVO.setPromotionStatus(promotionMessage.getPromotionStatus());
|
||||||
result = this.couponService.update(promotionMessage.updateWrapper());
|
result = this.couponService.update(promotionMessage.updateWrapper());
|
||||||
//优惠券活动结束,会员已领取未使用的优惠券状态修改为:已过期
|
//优惠券活动结束,会员已领取未使用的优惠券状态修改为:已过期
|
||||||
if(couponVO.getPromotionStatus().equals(PromotionStatusEnum.END)){
|
if (couponVO.getPromotionStatus().equals(PromotionStatusEnum.END)) {
|
||||||
LambdaUpdateWrapper<MemberCoupon> updateWrapper = new LambdaUpdateWrapper<MemberCoupon>()
|
LambdaUpdateWrapper<MemberCoupon> updateWrapper = new LambdaUpdateWrapper<MemberCoupon>()
|
||||||
.eq(MemberCoupon::getCouponId, couponVO.getId())
|
.eq(MemberCoupon::getCouponId, couponVO.getId())
|
||||||
.eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name())
|
.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 促销分类枚举
|
* @param promotionTypeEnum 促销分类枚举
|
||||||
* @return 修改结果
|
* @return 修改结果
|
||||||
*/
|
*/
|
||||||
private boolean updatePintuan(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){
|
private boolean updatePintuan(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) {
|
||||||
boolean result;
|
boolean result;
|
||||||
PintuanVO pintuanVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PintuanVO.class);
|
PintuanVO pintuanVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PintuanVO.class);
|
||||||
if (pintuanVO == null) {
|
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 促销分类枚举
|
* @param promotionTypeEnum 促销分类枚举
|
||||||
* @return 修改结果
|
* @return 修改结果
|
||||||
*/
|
*/
|
||||||
private boolean updateSeckill(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){
|
private boolean updateSeckill(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) {
|
||||||
boolean result;
|
boolean result;
|
||||||
SeckillVO seckill = this.mongoTemplate.findById(promotionMessage.getPromotionId(), SeckillVO.class);
|
SeckillVO seckill = this.mongoTemplate.findById(promotionMessage.getPromotionId(), SeckillVO.class);
|
||||||
if (seckill == null) {
|
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 促销分类枚举
|
* @param promotionTypeEnum 促销分类枚举
|
||||||
* @return 修改结果
|
* @return 修改结果
|
||||||
*/
|
*/
|
||||||
private boolean updatePointsGoods(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){
|
private boolean updatePointsGoods(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) {
|
||||||
boolean result;
|
boolean result;
|
||||||
PointsGoodsVO pointsGoodsVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PointsGoodsVO.class);
|
PointsGoodsVO pointsGoodsVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PointsGoodsVO.class);
|
||||||
if (pointsGoodsVO == null) {
|
if (pointsGoodsVO == null) {
|
||||||
@ -412,29 +423,49 @@ public class PromotionServiceImpl implements PromotionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改优惠券活动状态
|
* 修改砍价商品状态
|
||||||
* @param promotionMessage 信息队列传输促销信息实体
|
*
|
||||||
|
* @param promotionMessage 信息队列传输促销信息实体
|
||||||
* @param promotionTypeEnum 促销分类枚举
|
* @param promotionTypeEnum 促销分类枚举
|
||||||
* @return 修改结果
|
* @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());
|
CouponActivity couponActivity = couponActivityService.getById(promotionMessage.getPromotionId());
|
||||||
if(couponActivity.getCouponActivityType().equals(CouponActivityTypeEnum.SPECIFY.name())){
|
if (couponActivity.getCouponActivityType().equals(CouponActivityTypeEnum.SPECIFY.name())) {
|
||||||
couponActivityService.specify(couponActivity.getId());
|
couponActivityService.specify(couponActivity.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
//修改活动状态
|
//修改活动状态
|
||||||
return couponActivityService.update(new LambdaUpdateWrapper<CouponActivity>()
|
return couponActivityService.update(new LambdaUpdateWrapper<CouponActivity>()
|
||||||
.eq(CouponActivity::getId,promotionMessage.getPromotionId())
|
.eq(CouponActivity::getId, promotionMessage.getPromotionId())
|
||||||
.set(CouponActivity::getPromotionStatus,promotionMessage.getPromotionStatus()));
|
.set(CouponActivity::getPromotionStatus, promotionMessage.getPromotionStatus()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新促销商品信息
|
* 更新促销商品信息
|
||||||
*
|
*
|
||||||
* @param promotionId 促销活动ID
|
* @param promotionId 促销活动ID
|
||||||
* @param promotionStatus 活动状态
|
* @param promotionStatus 活动状态
|
||||||
*/
|
*/
|
||||||
private void updatePromotionGoods(String promotionId, String promotionStatus) {
|
private void updatePromotionGoods(String promotionId, String promotionStatus) {
|
||||||
|
@ -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<Object> add(@RequestBody List<KanJiaActivityGoodsDTO> kanJiaActivityGoodsDTOS) {
|
||||||
|
kanJiaActivityGoodsService.add(kanJiaActivityGoodsDTOS);
|
||||||
|
return ResultUtil.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ApiOperation(value = "获取砍价活动分页")
|
||||||
|
@GetMapping
|
||||||
|
public ResultMessage<IPage<KanJiaActivityGoods>> getKanjiaActivityPage(KanJiaActivityGoodsParams KanJiaActivityParams, PageVO page) {
|
||||||
|
return ResultUtil.data(kanJiaActivityGoodsService.getForPage(KanJiaActivityParams, page));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user