砍价活动第一版本
This commit is contained in:
parent
0e7a4ee06c
commit
7f08124afc
@ -0,0 +1,58 @@
|
||||
package cn.lili.controller.promotion;
|
||||
|
||||
import cn.lili.common.enums.ResultUtil;
|
||||
import cn.lili.common.security.context.UserContext;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityLog;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityQuery;
|
||||
import cn.lili.modules.promotion.service.KanJiaActivityService;
|
||||
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.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 买家端,砍价活动
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2021/7/12
|
||||
**/
|
||||
@RestController
|
||||
@Api(tags = "买家端,砍价活动参与记录接口")
|
||||
@RequestMapping("/buyer/promotion/kanJiaActivity")
|
||||
public class KanJiaActivityBuyerController {
|
||||
|
||||
@Autowired
|
||||
private KanJiaActivityService kanJiaActivityService;
|
||||
|
||||
@GetMapping
|
||||
@ApiOperation(value = "分页获取为参与的砍价活动")
|
||||
public ResultMessage<IPage<KanJiaActivity>> getPointsGoodsPage(KanJiaActivityQuery kanJiaActivityQuery, PageVO page) {
|
||||
// 会员端查询到的肯定是已经开始的活动商品
|
||||
kanJiaActivityQuery.setMemberId(UserContext.getCurrentUser().getId());
|
||||
IPage<KanJiaActivity> kanJiaActivityIPage = kanJiaActivityService.getForPage(kanJiaActivityQuery, page);
|
||||
return ResultUtil.data(kanJiaActivityIPage);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@ApiOperation(value = "发起砍价活动")
|
||||
public ResultMessage<KanJiaActivityLog> launchKanJiaActivity(String skuId) {
|
||||
KanJiaActivityLog kanJiaActivityLog = kanJiaActivityService.add(skuId);
|
||||
return ResultUtil.data(kanJiaActivityLog);
|
||||
}
|
||||
|
||||
@PostMapping("/help")
|
||||
@ApiOperation(value = "帮砍一刀")
|
||||
public ResultMessage<KanJiaActivityLog> helpKanJia(String kanJiaActivityId) {
|
||||
KanJiaActivityLog kanJiaActivityLog = kanJiaActivityService.helpKanJia(kanJiaActivityId);
|
||||
return ResultUtil.data(kanJiaActivityLog);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package cn.lili.controller.promotion;
|
||||
|
||||
import cn.lili.common.enums.ResultUtil;
|
||||
import cn.lili.common.security.context.UserContext;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.common.vo.ResultMessage;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityLog;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityLogQuery;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityQuery;
|
||||
import cn.lili.modules.promotion.service.KanJiaActivityLogService;
|
||||
import cn.lili.modules.promotion.service.KanJiaActivityService;
|
||||
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.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 买家端,砍价活动
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2021/7/12
|
||||
**/
|
||||
@RestController
|
||||
@Api(tags = "买家端,砍价活动帮砍记录接口")
|
||||
@RequestMapping("/buyer/promotion/kanJiaActivityLog")
|
||||
public class KanJiaActivityLogBuyerController {
|
||||
|
||||
@Autowired
|
||||
private KanJiaActivityLogService kanJiaActivityLogService;
|
||||
|
||||
@GetMapping
|
||||
@ApiOperation(value = "分页获取为参与的帮砍记录")
|
||||
public ResultMessage<IPage<KanJiaActivityLog>> getPointsGoodsPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO page) {
|
||||
// 会员端查询到的肯定是已经开始的活动商品
|
||||
kanJiaActivityLogQuery.setMemberId(UserContext.getCurrentUser().getId());
|
||||
IPage<KanJiaActivityLog> kanJiaActivityLogIPage = kanJiaActivityLogService.getForPage(kanJiaActivityLogQuery, page);
|
||||
return ResultUtil.data(kanJiaActivityLogIPage);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
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.dto.KanJiaActivityGoodsDTO;
|
||||
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
||||
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.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 买家端,砍价活动商品
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2021/7/12
|
||||
**/
|
||||
@RestController
|
||||
@Api(tags = "买家端,砍价商品接口")
|
||||
@RequestMapping("/buyer/promotion/kanJiaGoods")
|
||||
public class KanJiaGoodsActivityBuyerController {
|
||||
|
||||
@Autowired
|
||||
private KanJiaActivityGoodsService kanJiaActivityGoodsService;
|
||||
|
||||
@GetMapping
|
||||
@ApiOperation(value = "分页获取砍价商品")
|
||||
public ResultMessage<IPage<KanJiaActivityGoodsDTO>> getPointsGoodsPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO page) {
|
||||
// 会员端查询到的肯定是已经开始的活动商品
|
||||
kanJiaActivityGoodsParams.setPromotionStatus(PromotionStatusEnum.START.name());
|
||||
IPage<KanJiaActivityGoodsDTO> kanJiaActivityGoodsDTOIPage = kanJiaActivityGoodsService.getForPage(kanJiaActivityGoodsParams, page);
|
||||
return ResultUtil.data(kanJiaActivityGoodsDTOIPage);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -327,8 +327,16 @@ public enum ResultCode {
|
||||
/**
|
||||
* 砍价活动
|
||||
*/
|
||||
KANJIIA_GOODS_ACTIVE_STOCK_ERROR(48001, "活动库存数量不能高于商品库存"),
|
||||
KANJIIA_GOODS_ACTIVE_PRICE_ERROR(48001, "活动库存数量不能高于商品库存"),
|
||||
KANJIA_GOODS_ACTIVE_STOCK_ERROR(48001, "活动库存数量不能高于商品库存"),
|
||||
KANJIA_GOODS_ACTIVE_PRICE_ERROR(48002, "最低购买金额不能高于商品金额"),
|
||||
KANJIA_GOODS_ACTIVE_HIGHEST_PRICE_ERROR(48003, "最高砍价金额不能为0且不能超过商品金额"),
|
||||
KANJIA_GOODS_ACTIVE_LOWEST_PRICE_ERROR(48004, "最低砍价金额不能为0且不能超过商品金额"),
|
||||
KANJIA_GOODS_ACTIVE_HIGHEST_LOWEST_PRICE_ERROR(48005, "最低砍价金额不能高于最高砍价金额"),
|
||||
KANJIA_GOODS_ACTIVE_SETTLEMENT_PRICE_ERROR(48006, "结算金额不能高于商品金额"),
|
||||
KANJIA_GOODS_DELETE_ERROR(48007, "删除砍价商品异常"),
|
||||
KANJIA_ACTIVITY_NOT_FOUND_ERROR(48008, "砍价记录不存在"),
|
||||
KANJIA_ACTIVITY_LOG_MEMBER_ERROR(48009, "当前会员已经帮砍"),
|
||||
KANJIA_ACTIVITY_MEMBER_ERROR(48010, "当前会员已经发起此砍价商品活动"),
|
||||
/**
|
||||
* 店铺
|
||||
*/
|
||||
|
@ -0,0 +1,53 @@
|
||||
package cn.lili.modules.promotion.entity.dos;
|
||||
|
||||
import cn.lili.base.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Table;
|
||||
|
||||
/**
|
||||
* 砍价活动参与实体类
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2020-7-1 10:44 上午
|
||||
*/
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name = "li_kanjia_activity")
|
||||
@TableName("li_kanjia_activity")
|
||||
@ApiModel(value = "砍价活动参与对象")
|
||||
public class KanJiaActivity extends BaseEntity {
|
||||
|
||||
|
||||
private static final long serialVersionUID = -1583030890805926292L;
|
||||
|
||||
@ApiModelProperty(value = "砍价商品id")
|
||||
private String kanJiaActivityGoodsId;
|
||||
|
||||
@ApiModelProperty(value = "参与砍价活动会员id")
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty(value = "参与砍价活动会员名称")
|
||||
private String memberName;
|
||||
|
||||
@ApiModelProperty(value = "剩余购买金额")
|
||||
private Double surplusPrice;
|
||||
|
||||
@ApiModelProperty(value = "砍价商品skuId")
|
||||
private String skuId;
|
||||
|
||||
@ApiModelProperty(value = "货品名称")
|
||||
private String goodsName;
|
||||
|
||||
@ApiModelProperty(value = "缩略图")
|
||||
private String thumbnail;
|
||||
|
||||
@ApiModelProperty(value = "我的砍价状态")
|
||||
private String status;
|
||||
|
||||
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
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;
|
||||
@ -12,6 +11,7 @@ import lombok.Data;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Table;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Date;
|
||||
|
||||
@ -25,18 +25,21 @@ import java.util.Date;
|
||||
@Entity
|
||||
@Table(name = "li_kanjia_activity_goods")
|
||||
@TableName("li_kanjia_activity_goods")
|
||||
@ApiModel(value = "砍价活动对象")
|
||||
@ApiModel(value = "砍价活动商品对象")
|
||||
public class KanJiaActivityGoods extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 6694714877345423488L;
|
||||
|
||||
@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 = "货品名称")
|
||||
@ -46,12 +49,15 @@ public class KanJiaActivityGoods extends BaseEntity {
|
||||
private String thumbnail;
|
||||
|
||||
@ApiModelProperty(value = "活动库存")
|
||||
@NotEmpty(message = "活动库存不能为空")
|
||||
private Integer stock;
|
||||
|
||||
@ApiModelProperty(value = "每人最低砍价金额")
|
||||
@NotEmpty(message = "每人最低砍价金额不能为空")
|
||||
private Double lowestPrice;
|
||||
|
||||
@ApiModelProperty(value = "每人最高砍价金额")
|
||||
@NotEmpty(message = "每人最高砍价金额不能为空")
|
||||
private Double highestPrice;
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,53 @@
|
||||
package cn.lili.modules.promotion.entity.dos;
|
||||
|
||||
import cn.lili.base.BaseEntity;
|
||||
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.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 砍价活动商品实体类
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2020-7-1 10:44 上午
|
||||
*/
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name = "li_kanjia_activity_log")
|
||||
@TableName("li_kanjia_activity_log")
|
||||
@ApiModel(value = "砍价活动日志对象")
|
||||
public class KanJiaActivityLog extends BaseEntity {
|
||||
|
||||
|
||||
private static final long serialVersionUID = 3977352717995562783L;
|
||||
|
||||
@ApiModelProperty(value = "砍价活动参与记录id")
|
||||
private String kanJiaActivityId;
|
||||
|
||||
@ApiModelProperty(value = "砍价会员id")
|
||||
private String kanJiaMemberId;
|
||||
|
||||
@ApiModelProperty(value = "砍价会员名称")
|
||||
private String kanJiaMemberName;
|
||||
|
||||
@ApiModelProperty(value = "砍价会员头像")
|
||||
private String kanJiaMemberFace;
|
||||
|
||||
@ApiModelProperty(value = "砍价金额")
|
||||
private Double kanJiaPrice;
|
||||
|
||||
@ApiModelProperty(value = "剩余购买金额")
|
||||
private Double surplusPrice;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package cn.lili.modules.promotion.entity.dto;
|
||||
|
||||
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityLog;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 砍价活动参与实体类
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2020-7-1 10:44 上午
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "砍价活动参与记录对象")
|
||||
public class KanJiaActivityDTO extends KanJiaActivityLog {
|
||||
|
||||
@ApiModelProperty(value = "砍价金额")
|
||||
private String kanJiaActivityGoodsId;
|
||||
|
||||
}
|
@ -1,60 +1,26 @@
|
||||
package cn.lili.modules.promotion.entity.dto;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods;
|
||||
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;
|
||||
|
||||
/**
|
||||
* 砍价活动商品
|
||||
* 砍价活动商品DTO
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2020/8/21
|
||||
**/
|
||||
@Data
|
||||
public class KanJiaActivityGoodsDTO implements Serializable {
|
||||
public class KanJiaActivityGoodsDTO extends KanJiaActivityGoods 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;
|
||||
@ApiModelProperty(value = "商品规格详细信息")
|
||||
private GoodsSku goodsSku;
|
||||
|
||||
}
|
||||
|
@ -1,39 +1,26 @@
|
||||
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;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 砍价活动通用类
|
||||
* 砍价活动商品操作DTO
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2020/8/21
|
||||
**/
|
||||
@Data
|
||||
public class KanJiaActivityEditDTO implements Serializable {
|
||||
public class KanJiaActivityGoodsOperationDTO 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)
|
||||
@ -46,6 +33,6 @@ public class KanJiaActivityEditDTO implements Serializable {
|
||||
private Date endTime;
|
||||
|
||||
@ApiModelProperty(value = "砍价活动商品列表")
|
||||
IPage<KanJiaActivityGoods> promotionGoodsList;
|
||||
List<KanJiaActivityGoodsDTO> promotionGoodsList;
|
||||
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package cn.lili.modules.promotion.entity.dto;
|
||||
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 砍价活动参与实体类
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2020-7-1 10:44 上午
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "砍价活动参与记录查询对象")
|
||||
public class KanJiaActivityLogQuery {
|
||||
|
||||
|
||||
private static final long serialVersionUID = -1583030890805926292L;
|
||||
|
||||
@ApiModelProperty(value = "砍价发起活动id")
|
||||
private String kanJiaActivityId;
|
||||
|
||||
@ApiModelProperty(value = "会员id", hidden = true)
|
||||
private String memberId;
|
||||
|
||||
public <T> QueryWrapper<T> wrapper() {
|
||||
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
||||
|
||||
if (CharSequenceUtil.isNotEmpty(kanJiaActivityId)) {
|
||||
queryWrapper.like("kan_jia_activity_id", kanJiaActivityId);
|
||||
}
|
||||
if (memberId != null) {
|
||||
queryWrapper.eq("kan_jia_member_id", memberId);
|
||||
}
|
||||
queryWrapper.eq("delete_flag", false);
|
||||
queryWrapper.orderByDesc("create_time");
|
||||
return queryWrapper;
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package cn.lili.modules.promotion.entity.dto;
|
||||
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
/**
|
||||
* 砍价活动参与实体类
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2020-7-1 10:44 上午
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "砍价活动参与记录查询对象")
|
||||
public class KanJiaActivityQuery {
|
||||
|
||||
|
||||
private static final long serialVersionUID = -1583030890805926292L;
|
||||
|
||||
@ApiModelProperty(value = "货品名称")
|
||||
private String goodsName;
|
||||
|
||||
@ApiModelProperty(value = "会员id", hidden = true)
|
||||
private String memberId;
|
||||
|
||||
public <T> QueryWrapper<T> wrapper() {
|
||||
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
||||
|
||||
if (CharSequenceUtil.isNotEmpty(goodsName)) {
|
||||
queryWrapper.like("goods_name", goodsName);
|
||||
}
|
||||
if (memberId != null) {
|
||||
queryWrapper.eq("member_id", memberId);
|
||||
}
|
||||
queryWrapper.eq("delete_flag", false);
|
||||
queryWrapper.orderByDesc("create_time");
|
||||
return queryWrapper;
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package cn.lili.modules.promotion.entity.enums;
|
||||
|
||||
/**
|
||||
* 砍价活动状态状态枚举
|
||||
*
|
||||
* @author Chopper
|
||||
* @date 2020-03-19 3:53 下午
|
||||
*/
|
||||
public enum KanJiaStatusEnum {
|
||||
|
||||
START("开始"), FAIL("失败"), SUCCESS("成功");
|
||||
|
||||
private final String description;
|
||||
|
||||
KanJiaStatusEnum(String str) {
|
||||
this.description = str;
|
||||
}
|
||||
|
||||
public String description() {
|
||||
return description;
|
||||
}
|
||||
}
|
@ -1,6 +1,14 @@
|
||||
package cn.lili.modules.promotion.entity.vos;
|
||||
|
||||
|
||||
import org.springframework.data.domain.Sort;
|
||||
|
||||
import org.springframework.data.domain.Sort.Direction;
|
||||
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import cn.lili.modules.promotion.entity.enums.*;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
@ -9,6 +17,7 @@ import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* 砍价活动商品查询通用类
|
||||
@ -21,16 +30,18 @@ public class KanJiaActivityGoodsParams implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1344104067705714289L;
|
||||
|
||||
@ApiModelProperty(value = "活动名称")
|
||||
@ApiModelProperty(value = "活动商品")
|
||||
private String goodsName;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "活动开始时间", required = true)
|
||||
private Long startTime;
|
||||
|
||||
@ApiModelProperty(value = "活动结束时间", required = true)
|
||||
private Long endTime;
|
||||
|
||||
@ApiModelProperty(value = "skuId")
|
||||
private String skuId;
|
||||
|
||||
/**
|
||||
* @see PromotionStatusEnum
|
||||
*/
|
||||
@ -57,5 +68,31 @@ public class KanJiaActivityGoodsParams implements Serializable {
|
||||
}
|
||||
|
||||
|
||||
public Query mongoQuery() {
|
||||
Query query = new Query();
|
||||
if (CharSequenceUtil.isNotEmpty(goodsName)) {
|
||||
Pattern pattern = Pattern.compile("^.*" + goodsName + ".*$", Pattern.CASE_INSENSITIVE);
|
||||
query.addCriteria(Criteria.where("goodsSku.goodsName").regex(pattern));
|
||||
}
|
||||
if (CharSequenceUtil.isNotEmpty(promotionStatus)) {
|
||||
query.addCriteria(Criteria.where("promotionStatus").is(promotionStatus));
|
||||
}
|
||||
|
||||
if (CharSequenceUtil.isNotEmpty(skuId)) {
|
||||
query.addCriteria(Criteria.where("skuId").is(skuId));
|
||||
}
|
||||
if (startTime != null && endTime != null) {
|
||||
Criteria fromTime = Criteria.where("startTime").gte(new Date(startTime));
|
||||
Criteria toTime = Criteria.where("endTime").lte(new Date(endTime));
|
||||
query.addCriteria(fromTime);
|
||||
query.addCriteria(toTime);
|
||||
}
|
||||
query.addCriteria(Criteria.where("deleteFlag").is(false));
|
||||
Sort.Order order = new Sort.Order(Sort.Direction.DESC, "createTime");
|
||||
query.with(Sort.by(order));
|
||||
|
||||
return query;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,24 @@
|
||||
package cn.lili.modules.promotion.entity.vos;
|
||||
|
||||
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 砍价商品视图对象
|
||||
*
|
||||
* @author paulG
|
||||
* @date 2021/1/13
|
||||
**/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class KanJiaGoodsVO extends KanJiaActivityGoods {
|
||||
|
||||
private static final long serialVersionUID = -5163709626742905057L;
|
||||
|
||||
@ApiModelProperty(value = "商品规格详细信息")
|
||||
private GoodsSku goodsSku;
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package cn.lili.modules.promotion.mapper;
|
||||
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityLog;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
*
|
||||
* 砍价活动日志数据处理层
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2021/7/1
|
||||
*/
|
||||
public interface KanJiaActivityLogMapper extends BaseMapper<KanJiaActivityLog> {
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package cn.lili.modules.promotion.mapper;
|
||||
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivity;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
*
|
||||
* 砍价活动参与记录 数据处理层
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2021/7/1
|
||||
*/
|
||||
public interface KanJiaActivityMapper extends BaseMapper<KanJiaActivity> {
|
||||
|
||||
}
|
@ -2,8 +2,10 @@ package cn.lili.modules.promotion.service;
|
||||
|
||||
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsDTO;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsOperationDTO;
|
||||
import cn.lili.modules.promotion.entity.vos.KanJiaActivityGoodsParams;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
@ -26,7 +28,7 @@ public interface KanJiaActivityGoodsService extends IService<KanJiaActivityGoods
|
||||
* @param kanJiaActivityGoodsDTOS 砍价商品
|
||||
* @return 是否添加成功
|
||||
*/
|
||||
boolean add(List<KanJiaActivityGoodsDTO> kanJiaActivityGoodsDTOS);
|
||||
boolean add(KanJiaActivityGoodsOperationDTO kanJiaActivityGoodsDTOS);
|
||||
|
||||
/**
|
||||
* 查询砍价活动商品分页信息
|
||||
@ -35,7 +37,38 @@ public interface KanJiaActivityGoodsService extends IService<KanJiaActivityGoods
|
||||
* @param pageVO 分页信息
|
||||
* @return 砍价商品
|
||||
*/
|
||||
IPage<KanJiaActivityGoods> getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO);
|
||||
IPage<KanJiaActivityGoodsDTO> getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO);
|
||||
|
||||
/**
|
||||
* 查询砍价活动商品
|
||||
*
|
||||
* @param goodsId 砍价活动商品id
|
||||
* @return 砍价活动商品信息
|
||||
*/
|
||||
KanJiaActivityGoodsDTO getKanJiaGoodsDetail(String goodsId);
|
||||
|
||||
/**
|
||||
* 修改看见商品信息
|
||||
*
|
||||
* @param kanJiaActivityGoodsDTO 砍价商品信息
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
boolean updateKanJiaActivityGoods(KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO);
|
||||
|
||||
/**
|
||||
* 删除砍价商品
|
||||
*
|
||||
* @param ids 砍价商品ids
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
boolean deleteKanJiaGoods(List<String> ids);
|
||||
|
||||
/**
|
||||
* 根据skuID查询当前进行的砍价商品信息
|
||||
*
|
||||
* @param skuId 商品skuId
|
||||
* @return
|
||||
*/
|
||||
KanJiaActivityGoodsDTO getKanJiaGoodsBySku(String skuId);
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package cn.lili.modules.promotion.service;
|
||||
|
||||
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityLog;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityDTO;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityLogQuery;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
|
||||
/**
|
||||
* 砍价活动日志业务层
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2021/7/1 9:45 上午
|
||||
*/
|
||||
public interface KanJiaActivityLogService extends IService<KanJiaActivityLog> {
|
||||
|
||||
/**
|
||||
* 根据砍价参与记录id查询砍价记录
|
||||
*
|
||||
* @param kanJiaActivityLogQuery 砍价活动帮砍信息
|
||||
* @param pageVO 分页信息
|
||||
* @return 砍价日志
|
||||
*/
|
||||
IPage<KanJiaActivityLog> getForPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO pageVO);
|
||||
|
||||
/**
|
||||
* 砍一刀
|
||||
*
|
||||
* @param kanJiaActivityDTO 砍价记录
|
||||
* @return
|
||||
*/
|
||||
KanJiaActivityLog addKanJiaActivityLog(KanJiaActivityDTO kanJiaActivityDTO);
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package cn.lili.modules.promotion.service;
|
||||
|
||||
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityLog;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsDTO;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityQuery;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
|
||||
/**
|
||||
* 砍价活动参与记录业务层
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2021/7/1 9:45 上午
|
||||
*/
|
||||
public interface KanJiaActivityService extends IService<KanJiaActivity> {
|
||||
|
||||
/**
|
||||
* 发起人发起砍价活动
|
||||
*
|
||||
* @param skuId 商品skuId
|
||||
* @return
|
||||
*/
|
||||
KanJiaActivityLog add(String skuId);
|
||||
|
||||
/**
|
||||
* 帮砍
|
||||
*
|
||||
* @param kanJiaActivityId 活动id
|
||||
* @return 砍价详细
|
||||
*/
|
||||
KanJiaActivityLog helpKanJia(String kanJiaActivityId);
|
||||
|
||||
/**
|
||||
* 根据条件查询我参与的砍价活动
|
||||
*
|
||||
* @param kanJiaActivityQuery 砍价活动查询条件
|
||||
* @param page 分页对象
|
||||
* @return 我参与的砍价活动信息
|
||||
*/
|
||||
IPage<KanJiaActivity> getForPage(KanJiaActivityQuery kanJiaActivityQuery, PageVO page);
|
||||
|
||||
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package cn.lili.modules.promotion.serviceimpl;
|
||||
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.lili.common.enums.ResultCode;
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.common.trigger.enums.DelayTypeEnums;
|
||||
@ -9,7 +10,7 @@ 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.utils.DateUtil;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.config.rocketmq.RocketmqCustomProperties;
|
||||
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
||||
@ -17,17 +18,21 @@ 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.dto.KanJiaActivityGoodsOperationDTO;
|
||||
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.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -56,48 +61,40 @@ public class KanJiaActivityGoodsServiceImpl extends ServiceImpl<KanJiaActivityGo
|
||||
@Autowired
|
||||
private TimeTrigger timeTrigger;
|
||||
|
||||
//Mongo
|
||||
@Autowired
|
||||
private MongoTemplate mongoTemplate;
|
||||
|
||||
|
||||
@Override
|
||||
public boolean add(List<KanJiaActivityGoodsDTO> kanJiaActivityGoodsDTOS) {
|
||||
public boolean add(KanJiaActivityGoodsOperationDTO kanJiaActivityGoodsOperationDTO) {
|
||||
List<KanJiaActivityGoods> kanJiaActivityGoodsList = new ArrayList<>();
|
||||
for (KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO : kanJiaActivityGoodsDTOS) {
|
||||
for (KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO : kanJiaActivityGoodsOperationDTO.getPromotionGoodsList()) {
|
||||
//根据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);
|
||||
}
|
||||
//参数检测
|
||||
this.checkParam(kanJiaActivityGoodsDTO, goodsSku);
|
||||
//检测同一时间段是否存在相同的商品
|
||||
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);
|
||||
PromotionTools.checkPromotionTime(kanJiaActivityGoodsOperationDTO.getStartTime().getTime(), kanJiaActivityGoodsOperationDTO.getEndTime().getTime());
|
||||
kanJiaActivityGoodsDTO.setStartTime(kanJiaActivityGoodsOperationDTO.getStartTime());
|
||||
kanJiaActivityGoodsDTO.setEndTime(kanJiaActivityGoodsOperationDTO.getEndTime());
|
||||
//检测同一时间段不能允许添加相同的商品
|
||||
if (this.checkSkuDuplicate(goodsSku.getId(), kanJiaActivityGoodsDTO) != null) {
|
||||
throw new ServiceException("商品id为" + goodsSku.getId() + "的商品已参加砍价商品活动!");
|
||||
}
|
||||
kanJiaActivityGoodsDTO.setGoodsSku(goodsSku);
|
||||
kanJiaActivityGoodsDTO.setSkuId(kanJiaActivityGoodsDTO.getSkuId());
|
||||
kanJiaActivityGoodsDTO.setThumbnail(goodsSku.getThumbnail());
|
||||
kanJiaActivityGoodsDTO.setGoodsName(goodsSku.getGoodsName());
|
||||
kanJiaActivityGoodsDTO.setPromotionStatus(PromotionStatusEnum.NEW.name());
|
||||
kanJiaActivityGoodsList.add(kanJiaActivityGoodsDTO);
|
||||
}
|
||||
Boolean result = this.saveBatch(kanJiaActivityGoodsList);
|
||||
if (result) {
|
||||
//发送砍价延迟任务消息
|
||||
for (KanJiaActivityGoods kanJiaActivityGoods : kanJiaActivityGoodsList) {
|
||||
this.addKanJiaGoodsPromotionTask(kanJiaActivityGoods);
|
||||
for (KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO : kanJiaActivityGoodsOperationDTO.getPromotionGoodsList()) {
|
||||
this.mongoTemplate.save(kanJiaActivityGoodsDTO);
|
||||
this.addKanJiaGoodsPromotionTask(kanJiaActivityGoodsDTO);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
@ -109,7 +106,7 @@ public class KanJiaActivityGoodsServiceImpl extends ServiceImpl<KanJiaActivityGo
|
||||
*
|
||||
* @param kanJiaActivityGoods 砍价商品信息
|
||||
*/
|
||||
private void addKanJiaGoodsPromotionTask(KanJiaActivityGoods kanJiaActivityGoods) {
|
||||
private void addKanJiaGoodsPromotionTask(KanJiaActivityGoodsDTO kanJiaActivityGoods) {
|
||||
PromotionMessage promotionMessage = new PromotionMessage(kanJiaActivityGoods.getId(), PromotionTypeEnum.KAN_JIA.name(),
|
||||
PromotionStatusEnum.START.name(),
|
||||
kanJiaActivityGoods.getStartTime(), kanJiaActivityGoods.getEndTime());
|
||||
@ -123,9 +120,19 @@ public class KanJiaActivityGoodsServiceImpl extends ServiceImpl<KanJiaActivityGo
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<KanJiaActivityGoods> getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO) {
|
||||
QueryWrapper<KanJiaActivityGoods> queryWrapper = kanJiaActivityGoodsParams.wrapper();
|
||||
return page(PageUtil.initPage(pageVO), queryWrapper);
|
||||
public IPage<KanJiaActivityGoodsDTO> getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO) {
|
||||
IPage<KanJiaActivityGoodsDTO> kanJiaActivityGoodsDTOIPage = new Page<>();
|
||||
Query query = kanJiaActivityGoodsParams.mongoQuery();
|
||||
if (pageVO != null) {
|
||||
PromotionTools.mongoQueryPageParam(query, pageVO);
|
||||
kanJiaActivityGoodsDTOIPage.setSize(pageVO.getPageSize());
|
||||
kanJiaActivityGoodsDTOIPage.setCurrent(pageVO.getPageNumber());
|
||||
}
|
||||
List<KanJiaActivityGoodsDTO> kanJiaActivityGoodsDTOS = this.mongoTemplate.find(query, KanJiaActivityGoodsDTO.class);
|
||||
kanJiaActivityGoodsDTOIPage.setRecords(kanJiaActivityGoodsDTOS);
|
||||
kanJiaActivityGoodsDTOIPage.setTotal(this.mongoTemplate.count(kanJiaActivityGoodsParams.mongoQuery(), KanJiaActivityGoodsDTO.class));
|
||||
return kanJiaActivityGoodsDTOIPage;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -143,4 +150,157 @@ public class KanJiaActivityGoodsServiceImpl extends ServiceImpl<KanJiaActivityGo
|
||||
}
|
||||
return goodsSku;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查参与砍价商品参数
|
||||
*
|
||||
* @param kanJiaActivityGoodsDTO 砍价商品信息
|
||||
* @param goodsSku 商品sku信息
|
||||
*/
|
||||
private void checkParam(KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO, GoodsSku goodsSku) {
|
||||
//校验商品是否存在
|
||||
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.KANJIA_GOODS_ACTIVE_PRICE_ERROR);
|
||||
}
|
||||
//校验结算价格不能超过商品金额
|
||||
if (goodsSku.getPrice() < kanJiaActivityGoodsDTO.getSettlementPrice()) {
|
||||
throw new ServiceException(ResultCode.KANJIA_GOODS_ACTIVE_SETTLEMENT_PRICE_ERROR);
|
||||
}
|
||||
//校验最高砍价金额
|
||||
if (kanJiaActivityGoodsDTO.getHighestPrice() > goodsSku.getPrice() || kanJiaActivityGoodsDTO.getHighestPrice() <= 0) {
|
||||
throw new ServiceException(ResultCode.KANJIA_GOODS_ACTIVE_HIGHEST_PRICE_ERROR);
|
||||
}
|
||||
//校验最低砍价金额
|
||||
if (kanJiaActivityGoodsDTO.getLowestPrice() > goodsSku.getPrice() || kanJiaActivityGoodsDTO.getLowestPrice() <= 0) {
|
||||
throw new ServiceException(ResultCode.KANJIA_GOODS_ACTIVE_LOWEST_PRICE_ERROR);
|
||||
}
|
||||
//校验最低砍价金额不能高与最低砍价金额
|
||||
if (kanJiaActivityGoodsDTO.getLowestPrice() > kanJiaActivityGoodsDTO.getHighestPrice()) {
|
||||
throw new ServiceException(ResultCode.KANJIA_GOODS_ACTIVE_LOWEST_PRICE_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查砍价商品是否重复存在
|
||||
*
|
||||
* @param skuId 商品SkuId
|
||||
* @param kanJiaActivityGoodsDTO 砍价商品
|
||||
* @return 积分商品信息
|
||||
*/
|
||||
private KanJiaActivityGoods checkSkuDuplicate(String skuId, KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO) {
|
||||
LambdaQueryWrapper<KanJiaActivityGoods> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(KanJiaActivityGoods::getSkuId, skuId);
|
||||
if (kanJiaActivityGoodsDTO != null && StrUtil.isNotEmpty(kanJiaActivityGoodsDTO.getId())) {
|
||||
queryWrapper.ne(KanJiaActivityGoods::getId, kanJiaActivityGoodsDTO.getId());
|
||||
}
|
||||
queryWrapper.ne(KanJiaActivityGoods::getPromotionStatus, PromotionStatusEnum.END.name());
|
||||
|
||||
queryWrapper.ge(KanJiaActivityGoods::getStartTime, kanJiaActivityGoodsDTO.getStartTime());
|
||||
|
||||
queryWrapper.le(KanJiaActivityGoods::getEndTime, kanJiaActivityGoodsDTO.getEndTime());
|
||||
|
||||
return this.getOne(queryWrapper);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public KanJiaActivityGoodsDTO getKanJiaGoodsDetail(String goodsId) {
|
||||
KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.mongoTemplate.findById(goodsId, KanJiaActivityGoodsDTO.class);
|
||||
if (kanJiaActivityGoodsDTO == null) {
|
||||
log.error("id为" + goodsId + "的砍价商品不存在!");
|
||||
throw new ServiceException();
|
||||
}
|
||||
return kanJiaActivityGoodsDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateKanJiaActivityGoods(KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO) {
|
||||
//校验砍价商品是否存在
|
||||
KanJiaActivityGoodsDTO dbKanJiaActivityGoods = this.getKanJiaGoodsDetail(kanJiaActivityGoodsDTO.getId());
|
||||
//校验当前活动是否已经开始,只有新建的未开始的活动可以编辑
|
||||
if (!dbKanJiaActivityGoods.getPromotionStatus().equals(PromotionStatusEnum.NEW.name())) {
|
||||
throw new ServiceException(ResultCode.PROMOTION_UPDATE_ERROR);
|
||||
}
|
||||
//获取当前sku信息
|
||||
GoodsSku goodsSku = this.checkSkuExist(kanJiaActivityGoodsDTO.getSkuId());
|
||||
//校验商品状态
|
||||
if (goodsSku.getMarketEnable().equals(GoodsStatusEnum.DOWN.name())) {
|
||||
throw new ServiceException(ResultCode.GOODS_NOT_EXIST);
|
||||
}
|
||||
//常规校验砍价商品参数
|
||||
this.checkParam(kanJiaActivityGoodsDTO, goodsSku);
|
||||
//检测开始结束时间是否正确
|
||||
PromotionTools.checkPromotionTime(kanJiaActivityGoodsDTO.getStartTime().getTime(), kanJiaActivityGoodsDTO.getEndTime().getTime());
|
||||
//检测同一时间段不能允许添加相同的商品
|
||||
if (this.checkSkuDuplicate(goodsSku.getId(), kanJiaActivityGoodsDTO) != null) {
|
||||
throw new ServiceException("商品id为" + goodsSku.getId() + "的商品已参加砍价商品活动!");
|
||||
}
|
||||
//修改数据库
|
||||
boolean result = this.updateById(kanJiaActivityGoodsDTO);
|
||||
//如果校验成功则发送修改延迟任务消息
|
||||
if (result) {
|
||||
this.mongoTemplate.save(kanJiaActivityGoodsDTO);
|
||||
if (dbKanJiaActivityGoods.getStartTime().getTime() != kanJiaActivityGoodsDTO.getStartTime().getTime()) {
|
||||
PromotionMessage promotionMessage = new PromotionMessage(kanJiaActivityGoodsDTO.getId(), PromotionTypeEnum.KAN_JIA.name(), PromotionStatusEnum.START.name(), kanJiaActivityGoodsDTO.getStartTime(), kanJiaActivityGoodsDTO.getEndTime());
|
||||
//更新延时任务
|
||||
this.timeTrigger.edit(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||
promotionMessage,
|
||||
kanJiaActivityGoodsDTO.getStartTime().getTime(),
|
||||
kanJiaActivityGoodsDTO.getStartTime().getTime(),
|
||||
DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())),
|
||||
DateUtil.getDelayTime(kanJiaActivityGoodsDTO.getStartTime().getTime()),
|
||||
rocketmqCustomProperties.getPromotionTopic());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteKanJiaGoods(List<String> ids) {
|
||||
List<String> skuIds = new ArrayList<>();
|
||||
for (String id : ids) {
|
||||
KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.getKanJiaGoodsDetail(id);
|
||||
this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR,
|
||||
kanJiaActivityGoodsDTO.getStartTime().getTime(),
|
||||
DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.KAN_JIA.name() + kanJiaActivityGoodsDTO.getId())),
|
||||
rocketmqCustomProperties.getPromotionTopic());
|
||||
skuIds.add(kanJiaActivityGoodsDTO.getSkuId());
|
||||
}
|
||||
boolean result = this.removeByIds(ids);
|
||||
if (result) {
|
||||
Query query = new Query();
|
||||
query.addCriteria(new Criteria("id").in(ids));
|
||||
this.mongoTemplate.remove(query, KanJiaActivityGoodsDTO.class);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public KanJiaActivityGoodsDTO getKanJiaGoodsBySku(String skuId) {
|
||||
//构建查询条件
|
||||
KanJiaActivityGoodsParams kanJiaActivityGoodsParams = new KanJiaActivityGoodsParams();
|
||||
kanJiaActivityGoodsParams.setSkuId(skuId);
|
||||
kanJiaActivityGoodsParams.setPromotionStatus(PromotionStatusEnum.START.name());
|
||||
//查询相关数据
|
||||
Query query = kanJiaActivityGoodsParams.mongoQuery();
|
||||
List<KanJiaActivityGoodsDTO> kanJiaActivityGoodsDTOS = this.mongoTemplate.find(query, KanJiaActivityGoodsDTO.class);
|
||||
// 为了担心会查到多条数据 所以查询集合 正常情况下只会查询到一条
|
||||
if (kanJiaActivityGoodsDTOS.size() > 0) {
|
||||
return kanJiaActivityGoodsDTOS.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
package cn.lili.modules.promotion.serviceimpl;
|
||||
|
||||
|
||||
import cn.lili.common.enums.ResultCode;
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.common.security.context.UserContext;
|
||||
import cn.lili.common.utils.BeanUtil;
|
||||
import cn.lili.common.utils.PageUtil;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityLog;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityDTO;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityLogQuery;
|
||||
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
||||
import cn.lili.modules.promotion.mapper.KanJiaActivityLogMapper;
|
||||
import cn.lili.modules.promotion.service.KanJiaActivityGoodsService;
|
||||
import cn.lili.modules.promotion.service.KanJiaActivityLogService;
|
||||
import cn.lili.modules.promotion.service.KanJiaActivityService;
|
||||
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;
|
||||
|
||||
|
||||
/**
|
||||
* 砍价活动日志业务层实现
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2021/7/1
|
||||
*/
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public class KanJiaActivityLogServiceImpl extends ServiceImpl<KanJiaActivityLogMapper, KanJiaActivityLog> implements KanJiaActivityLogService {
|
||||
|
||||
@Autowired
|
||||
private KanJiaActivityGoodsService kanJiaActivityGoodsService;
|
||||
|
||||
@Autowired
|
||||
private KanJiaActivityService kanJiaActivityService;
|
||||
|
||||
@Override
|
||||
public IPage<KanJiaActivityLog> getForPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO pageVO) {
|
||||
QueryWrapper<KanJiaActivityLog> queryWrapper = kanJiaActivityLogQuery.wrapper();
|
||||
return this.page(PageUtil.initPage(pageVO), queryWrapper);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public KanJiaActivityLog addKanJiaActivityLog(KanJiaActivityDTO kanJiaActivityDTO) {
|
||||
//校验当前会员是否已经参与过此次砍价
|
||||
QueryWrapper<KanJiaActivityLog> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq(kanJiaActivityDTO.getKanJiaMemberId() != null, "kan_jia_member_id", kanJiaActivityDTO.getKanJiaMemberId());
|
||||
queryWrapper.eq(kanJiaActivityDTO.getKanJiaActivityId() != null, "kan_jia_activity_id", kanJiaActivityDTO.getKanJiaActivityId());
|
||||
Integer count = this.baseMapper.selectCount(queryWrapper);
|
||||
if (count > 0) {
|
||||
throw new ServiceException(ResultCode.KANJIA_ACTIVITY_LOG_MEMBER_ERROR);
|
||||
}
|
||||
//校验当前砍价商品是否有效
|
||||
KanJiaActivityGoods kanJiaActivityGoods = kanJiaActivityGoodsService.getById(kanJiaActivityDTO.getKanJiaActivityGoodsId());
|
||||
//如果当前活动不为空且还在活动时间内 才可以参与砍价活动
|
||||
if (kanJiaActivityGoods != null && kanJiaActivityGoods.getPromotionStatus().equals(PromotionStatusEnum.START.name())) {
|
||||
//获取砍价参与者记录
|
||||
KanJiaActivity kanJiaActivity = kanJiaActivityService.getById(kanJiaActivityDTO.getKanJiaActivityId());
|
||||
if (kanJiaActivity != null) {
|
||||
KanJiaActivityLog kanJiaActivityLog = new KanJiaActivityLog();
|
||||
kanJiaActivityLog.setKanJiaActivityId(kanJiaActivity.getId());
|
||||
BeanUtil.copyProperties(kanJiaActivityDTO, kanJiaActivityLog);
|
||||
boolean result = this.save(kanJiaActivityLog);
|
||||
if (result) {
|
||||
return kanJiaActivityLog;
|
||||
}
|
||||
}
|
||||
throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR);
|
||||
}
|
||||
throw new ServiceException(ResultCode.PROMOTION_STATUS_END);
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,184 @@
|
||||
package cn.lili.modules.promotion.serviceimpl;
|
||||
|
||||
|
||||
import cn.lili.common.enums.ResultCode;
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.common.security.context.UserContext;
|
||||
import cn.lili.common.utils.CurrencyUtil;
|
||||
import cn.lili.common.utils.PageUtil;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.modules.goods.entity.dos.GoodsSku;
|
||||
import cn.lili.modules.goods.service.GoodsSkuService;
|
||||
import cn.lili.modules.member.entity.dos.Member;
|
||||
import cn.lili.modules.member.service.MemberService;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivity;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods;
|
||||
import cn.lili.modules.promotion.entity.dos.KanJiaActivityLog;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityDTO;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityQuery;
|
||||
import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum;
|
||||
import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum;
|
||||
import cn.lili.modules.promotion.mapper.KanJiaActivityMapper;
|
||||
import cn.lili.modules.promotion.service.KanJiaActivityGoodsService;
|
||||
import cn.lili.modules.promotion.service.KanJiaActivityLogService;
|
||||
import cn.lili.modules.promotion.service.KanJiaActivityService;
|
||||
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;
|
||||
|
||||
|
||||
/**
|
||||
* 砍价活动参与记录业务层实现
|
||||
*
|
||||
* @author qiuqiu
|
||||
* @date 2021/7/1
|
||||
*/
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public class KanJiaActivityServiceImpl extends ServiceImpl<KanJiaActivityMapper, KanJiaActivity> implements KanJiaActivityService {
|
||||
|
||||
|
||||
@Autowired
|
||||
private KanJiaActivityGoodsService kanJiaActivityGoodsService;
|
||||
|
||||
@Autowired
|
||||
private KanJiaActivityLogService kanJiaActivityLogService;
|
||||
|
||||
|
||||
@Autowired
|
||||
private MemberService memberService;
|
||||
|
||||
//规格商品
|
||||
@Autowired
|
||||
private GoodsSkuService goodsSkuService;
|
||||
|
||||
@Override
|
||||
public KanJiaActivityLog add(String skuId) {
|
||||
//根据skuId查询当前sku是否参与活动并且是在活动进行中
|
||||
KanJiaActivityGoods kanJiaActivityGoods = kanJiaActivityGoodsService.getKanJiaGoodsBySku(skuId);
|
||||
//只有砍价商品存在且已经开始的活动才可以发起砍价
|
||||
if (kanJiaActivityGoods != null && kanJiaActivityGoods.getPromotionStatus().equals(PromotionStatusEnum.START.name())) {
|
||||
//获取会员信息
|
||||
Member member = memberService.getById(UserContext.getCurrentUser().getId());
|
||||
//校验此活动是否已经发起过
|
||||
QueryWrapper<KanJiaActivity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("kan_jia_activity_goods_id", kanJiaActivityGoods.getId());
|
||||
queryWrapper.eq("member_id", member.getId());
|
||||
if (this.count(queryWrapper) > 0) {
|
||||
throw new ServiceException(ResultCode.KANJIA_ACTIVITY_MEMBER_ERROR);
|
||||
}
|
||||
KanJiaActivity kanJiaActivity = new KanJiaActivity();
|
||||
//获取商品信息
|
||||
GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(skuId);
|
||||
if (goodsSku != null && member != null) {
|
||||
kanJiaActivity.setSkuId(skuId);
|
||||
kanJiaActivity.setGoodsName(goodsSku.getGoodsName());
|
||||
kanJiaActivity.setKanJiaActivityGoodsId(kanJiaActivityGoods.getId());
|
||||
kanJiaActivity.setThumbnail(goodsSku.getThumbnail());
|
||||
kanJiaActivity.setMemberId(UserContext.getCurrentUser().getId());
|
||||
kanJiaActivity.setMemberName(member.getUsername());
|
||||
kanJiaActivity.setStatus(KanJiaStatusEnum.START.name());
|
||||
//剩余砍价金额 开始 是商品金额-最低购买金额
|
||||
Double surplusPrice = CurrencyUtil.sub(goodsSku.getPrice(), kanJiaActivityGoods.getPurchasePrice());
|
||||
//获取砍价金额,因为自己要给自己砍一刀 所以需要在可砍金额范围内 砍一刀
|
||||
Double price = this.getKanJiaPrice(kanJiaActivityGoods, surplusPrice);
|
||||
//剩余可砍金额就是 砍一刀后的金额
|
||||
kanJiaActivity.setSurplusPrice(CurrencyUtil.sub(surplusPrice, price));
|
||||
//保存我的砍价活动
|
||||
boolean result = this.save(kanJiaActivity);
|
||||
//因为发起砍价就是自己给自己砍一刀,所以要添加砍价记录信息
|
||||
if (result) {
|
||||
KanJiaActivityDTO kanJiaActivityDTO = new KanJiaActivityDTO();
|
||||
kanJiaActivityDTO.setKanJiaActivityGoodsId(kanJiaActivityGoods.getId());
|
||||
kanJiaActivityDTO.setKanJiaActivityId(kanJiaActivity.getId());
|
||||
kanJiaActivityDTO.setKanJiaPrice(price);
|
||||
kanJiaActivityDTO.setSurplusPrice(kanJiaActivity.getSurplusPrice());
|
||||
kanJiaActivityDTO.setKanJiaMemberId(kanJiaActivity.getMemberId());
|
||||
kanJiaActivityDTO.setKanJiaMemberName(kanJiaActivity.getMemberName());
|
||||
kanJiaActivityDTO.setKanJiaMemberFace(member.getFace());
|
||||
return kanJiaActivityLogService.addKanJiaActivityLog(kanJiaActivityDTO);
|
||||
}
|
||||
|
||||
}
|
||||
throw new ServiceException(ResultCode.GOODS_NOT_EXIST);
|
||||
}
|
||||
throw new ServiceException(ResultCode.PROMOTION_STATUS_END);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public KanJiaActivityLog helpKanJia(String kanJiaActivityId) {
|
||||
//获取会员信息
|
||||
Member member = memberService.getById(UserContext.getCurrentUser().getId());
|
||||
//根据砍价发起活动id查询砍价活动信息
|
||||
KanJiaActivity kanJiaActivity = this.getById(kanJiaActivityId);
|
||||
if (kanJiaActivity != null && kanJiaActivity.getStatus().equals(PromotionStatusEnum.START.name())) {
|
||||
if (member == null) {
|
||||
throw new ServiceException(ResultCode.USER_NOT_EXIST);
|
||||
}
|
||||
//根据skuId查询当前sku是否参与活动并且是在活动进行中
|
||||
KanJiaActivityGoods kanJiaActivityGoods = kanJiaActivityGoodsService.getById(kanJiaActivity.getKanJiaActivityGoodsId());
|
||||
if (kanJiaActivityGoods == null) {
|
||||
throw new ServiceException(ResultCode.PROMOTION_STATUS_END);
|
||||
}
|
||||
KanJiaActivityDTO kanJiaActivityDTO = new KanJiaActivityDTO();
|
||||
kanJiaActivityDTO.setKanJiaActivityGoodsId(kanJiaActivity.getKanJiaActivityGoodsId());
|
||||
kanJiaActivityDTO.setKanJiaActivityId(kanJiaActivityId);
|
||||
//获取砍价金额
|
||||
Double price = this.getKanJiaPrice(kanJiaActivityGoods, kanJiaActivity.getSurplusPrice());
|
||||
kanJiaActivityDTO.setKanJiaPrice(price);
|
||||
//获取可砍金额
|
||||
kanJiaActivityDTO.setSurplusPrice(CurrencyUtil.sub(kanJiaActivity.getSurplusPrice(), price));
|
||||
//如果可砍金额为0的话说明活动成功了
|
||||
if (Double.doubleToLongBits(kanJiaActivityDTO.getSurplusPrice()) == Double.doubleToLongBits(0D)) {
|
||||
kanJiaActivity.setStatus(KanJiaStatusEnum.SUCCESS.name());
|
||||
this.updateById(kanJiaActivity);
|
||||
}
|
||||
kanJiaActivityDTO.setKanJiaMemberId(member.getId());
|
||||
kanJiaActivityDTO.setKanJiaMemberName(member.getUsername());
|
||||
kanJiaActivityDTO.setKanJiaMemberFace(member.getFace());
|
||||
return kanJiaActivityLogService.addKanJiaActivityLog(kanJiaActivityDTO);
|
||||
}
|
||||
throw new ServiceException(ResultCode.PROMOTION_STATUS_END);
|
||||
}
|
||||
|
||||
/**
|
||||
* 随机获取砍一刀价格
|
||||
*
|
||||
* @param kanJiaActivityGoods 砍价商品信息
|
||||
* @param surplusPrice 剩余可砍金额
|
||||
* @return
|
||||
*/
|
||||
private Double getKanJiaPrice(KanJiaActivityGoods kanJiaActivityGoods, Double surplusPrice) {
|
||||
double result = kanJiaActivityGoods.getHighestPrice() - kanJiaActivityGoods.getLowestPrice();
|
||||
double num = (Math.random() * result);
|
||||
//如果剩余金额小于最低可砍价金额则直接返回最小金额 砍价成功
|
||||
if (kanJiaActivityGoods.getLowestPrice() > surplusPrice) {
|
||||
return surplusPrice;
|
||||
}
|
||||
Double price = 0D;
|
||||
while (true) {
|
||||
price = CurrencyUtil.round(num + kanJiaActivityGoods.getLowestPrice(), 2);
|
||||
//从最大金额和最小金额之间获取随机砍价金额
|
||||
if (price < surplusPrice) {
|
||||
break;
|
||||
} else {
|
||||
price = surplusPrice;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return price;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public IPage<KanJiaActivity> getForPage(KanJiaActivityQuery kanJiaActivityQuery, PageVO page) {
|
||||
QueryWrapper<KanJiaActivity> queryWrapper = kanJiaActivityQuery.wrapper();
|
||||
return this.page(PageUtil.initPage(page), queryWrapper);
|
||||
}
|
||||
|
||||
}
|
@ -9,6 +9,7 @@ import cn.lili.common.trigger.message.PromotionMessage;
|
||||
import cn.lili.common.exception.ServiceException;
|
||||
import cn.lili.modules.order.cart.entity.vo.FullDiscountVO;
|
||||
import cn.lili.modules.promotion.entity.dos.*;
|
||||
import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsDTO;
|
||||
import cn.lili.modules.promotion.entity.enums.*;
|
||||
import cn.lili.modules.promotion.entity.vos.*;
|
||||
import cn.lili.modules.promotion.service.*;
|
||||
@ -370,7 +371,7 @@ public class PromotionServiceImpl implements PromotionService {
|
||||
result = this.seckillService.update(promotionMessage.updateWrapper());
|
||||
|
||||
//判断参与活动的商品是否为空,如果为空则返回
|
||||
if(seckill.getSeckillApplyList()==null){
|
||||
if (seckill.getSeckillApplyList() == null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -438,14 +439,16 @@ public class PromotionServiceImpl implements PromotionService {
|
||||
* @return 修改结果
|
||||
*/
|
||||
private boolean updateKanJiaGoods(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) {
|
||||
boolean result;
|
||||
KanJiaActivityGoods kanJiaActivityGoods = JSONUtil.toBean(JSONUtil.toJsonStr(promotionMessage), KanJiaActivityGoods.class);
|
||||
if (kanJiaActivityGoods == null) {
|
||||
KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), KanJiaActivityGoodsDTO.class);
|
||||
if (kanJiaActivityGoodsDTO == null) {
|
||||
this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus());
|
||||
return false;
|
||||
}
|
||||
kanJiaActivityGoods.setPromotionStatus(promotionMessage.getPromotionStatus());
|
||||
result = this.kanJiaActivityGoodsService.updateById(kanJiaActivityGoods);
|
||||
kanJiaActivityGoodsDTO.setPromotionStatus(promotionMessage.getPromotionStatus());
|
||||
boolean result = this.kanJiaActivityGoodsService.updateById(kanJiaActivityGoodsDTO);
|
||||
if (result) {
|
||||
this.mongoTemplate.save(kanJiaActivityGoodsDTO);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,13 @@
|
||||
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.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.dto.KanJiaActivityGoodsOperationDTO;
|
||||
import cn.lili.modules.promotion.entity.vos.KanJiaActivityGoodsParams;
|
||||
import cn.lili.modules.promotion.service.KanJiaActivityGoodsService;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@ -13,7 +16,7 @@ import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
|
||||
/**
|
||||
@ -32,17 +35,43 @@ public class KanJiaActivityGoodsManagerController {
|
||||
|
||||
@PostMapping
|
||||
@ApiOperation(value = "添加砍价活动")
|
||||
public ResultMessage<Object> add(@RequestBody List<KanJiaActivityGoodsDTO> kanJiaActivityGoodsDTOS) {
|
||||
kanJiaActivityGoodsService.add(kanJiaActivityGoodsDTOS);
|
||||
public ResultMessage<Object> add(@RequestBody KanJiaActivityGoodsOperationDTO kanJiaActivityGoodsOperationDTO) {
|
||||
kanJiaActivityGoodsService.add(kanJiaActivityGoodsOperationDTO);
|
||||
return ResultUtil.success();
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation(value = "获取砍价活动分页")
|
||||
@GetMapping
|
||||
public ResultMessage<IPage<KanJiaActivityGoods>> getKanjiaActivityPage(KanJiaActivityGoodsParams KanJiaActivityParams, PageVO page) {
|
||||
public ResultMessage<IPage<KanJiaActivityGoodsDTO>> getKanJiaActivityPage(KanJiaActivityGoodsParams KanJiaActivityParams, PageVO page) {
|
||||
return ResultUtil.data(kanJiaActivityGoodsService.getForPage(KanJiaActivityParams, page));
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/{id}")
|
||||
@ApiOperation(value = "获取积分商品详情")
|
||||
public ResultMessage<Object> getPointsGoodsDetail(@PathVariable("id") String goodsId) {
|
||||
KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO = kanJiaActivityGoodsService.getKanJiaGoodsDetail(goodsId);
|
||||
return ResultUtil.data(kanJiaActivityGoodsDTO);
|
||||
}
|
||||
|
||||
|
||||
@PutMapping
|
||||
@ApiOperation(value = "修改砍价商品")
|
||||
public ResultMessage<Object> updatePointsGoods(@RequestBody KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO) {
|
||||
kanJiaActivityGoodsService.updateKanJiaActivityGoods(kanJiaActivityGoodsDTO);
|
||||
return ResultUtil.success();
|
||||
}
|
||||
|
||||
|
||||
@DeleteMapping("/{ids}")
|
||||
@ApiOperation(value = "删除砍价商品")
|
||||
public ResultMessage<Object> delete(@PathVariable String ids) {
|
||||
if (kanJiaActivityGoodsService.deleteKanJiaGoods(Arrays.asList(ids.split(",")))) {
|
||||
return ResultUtil.success();
|
||||
}
|
||||
throw new ServiceException(ResultCode.KANJIA_GOODS_DELETE_ERROR);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user