From 7f08124afc52504d26ea4c6b330ec7cd503c380e Mon Sep 17 00:00:00 2001 From: pikachu <1321288662@qq.com> Date: Mon, 12 Jul 2021 23:38:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A0=8D=E4=BB=B7=E6=B4=BB=E5=8A=A8=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KanJiaActivityBuyerController.java | 58 +++++ .../KanJiaActivityLogBuyerController.java | 46 ++++ .../KanJiaGoodsActivityBuyerController.java | 42 ++++ .../java/cn/lili/common/enums/ResultCode.java | 12 +- .../promotion/entity/dos/KanJiaActivity.java | 53 ++++ .../entity/dos/KanJiaActivityGoods.java | 10 +- .../entity/dos/KanJiaActivityLog.java | 53 ++++ .../entity/dto/KanJiaActivityDTO.java | 23 ++ .../entity/dto/KanJiaActivityGoodsDTO.java | 46 +--- ...a => KanJiaActivityGoodsOperationDTO.java} | 21 +- .../entity/dto/KanJiaActivityLogQuery.java | 42 ++++ .../entity/dto/KanJiaActivityQuery.java | 44 ++++ .../entity/enums/KanJiaStatusEnum.java | 22 ++ .../entity/vos/KanJiaActivityGoodsParams.java | 41 ++- .../promotion/entity/vos/KanJiaGoodsVO.java | 24 ++ .../mapper/KanJiaActivityLogMapper.java | 15 ++ .../mapper/KanJiaActivityMapper.java | 15 ++ .../service/KanJiaActivityGoodsService.java | 37 ++- .../service/KanJiaActivityLogService.java | 36 +++ .../service/KanJiaActivityService.java | 47 ++++ .../KanJiaActivityGoodsServiceImpl.java | 238 +++++++++++++++--- .../KanJiaActivityLogServiceImpl.java | 81 ++++++ .../KanJiaActivityServiceImpl.java | 184 ++++++++++++++ .../serviceimpl/PromotionServiceImpl.java | 15 +- .../KanJiaActivityGoodsManagerController.java | 39 ++- 25 files changed, 1129 insertions(+), 115 deletions(-) create mode 100644 buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityBuyerController.java create mode 100644 buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityLogBuyerController.java create mode 100644 buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaGoodsActivityBuyerController.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivity.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityLog.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityDTO.java rename framework/src/main/java/cn/lili/modules/promotion/entity/dto/{KanJiaActivityEditDTO.java => KanJiaActivityGoodsOperationDTO.java} (53%) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityLogQuery.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityQuery.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/enums/KanJiaStatusEnum.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaGoodsVO.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityLogMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityLogService.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityService.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityLogServiceImpl.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityServiceImpl.java diff --git a/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityBuyerController.java new file mode 100644 index 00000000..6261090b --- /dev/null +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityBuyerController.java @@ -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> getPointsGoodsPage(KanJiaActivityQuery kanJiaActivityQuery, PageVO page) { + // 会员端查询到的肯定是已经开始的活动商品 + kanJiaActivityQuery.setMemberId(UserContext.getCurrentUser().getId()); + IPage kanJiaActivityIPage = kanJiaActivityService.getForPage(kanJiaActivityQuery, page); + return ResultUtil.data(kanJiaActivityIPage); + } + + @PostMapping + @ApiOperation(value = "发起砍价活动") + public ResultMessage launchKanJiaActivity(String skuId) { + KanJiaActivityLog kanJiaActivityLog = kanJiaActivityService.add(skuId); + return ResultUtil.data(kanJiaActivityLog); + } + + @PostMapping("/help") + @ApiOperation(value = "帮砍一刀") + public ResultMessage helpKanJia(String kanJiaActivityId) { + KanJiaActivityLog kanJiaActivityLog = kanJiaActivityService.helpKanJia(kanJiaActivityId); + return ResultUtil.data(kanJiaActivityLog); + } + + +} diff --git a/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityLogBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityLogBuyerController.java new file mode 100644 index 00000000..9f1f630e --- /dev/null +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityLogBuyerController.java @@ -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> getPointsGoodsPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO page) { + // 会员端查询到的肯定是已经开始的活动商品 + kanJiaActivityLogQuery.setMemberId(UserContext.getCurrentUser().getId()); + IPage kanJiaActivityLogIPage = kanJiaActivityLogService.getForPage(kanJiaActivityLogQuery, page); + return ResultUtil.data(kanJiaActivityLogIPage); + } + + +} diff --git a/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaGoodsActivityBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaGoodsActivityBuyerController.java new file mode 100644 index 00000000..da295062 --- /dev/null +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaGoodsActivityBuyerController.java @@ -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> getPointsGoodsPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO page) { + // 会员端查询到的肯定是已经开始的活动商品 + kanJiaActivityGoodsParams.setPromotionStatus(PromotionStatusEnum.START.name()); + IPage kanJiaActivityGoodsDTOIPage = kanJiaActivityGoodsService.getForPage(kanJiaActivityGoodsParams, page); + return ResultUtil.data(kanJiaActivityGoodsDTOIPage); + } + + +} diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index 3e05417f..0abbff9c 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -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, "当前会员已经发起此砍价商品活动"), /** * 店铺 */ diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivity.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivity.java new file mode 100644 index 00000000..762f0d3f --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivity.java @@ -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; + + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java index 4ec7ce0e..f7275851 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java @@ -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; /** diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityLog.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityLog.java new file mode 100644 index 00000000..f173d230 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityLog.java @@ -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; + + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityDTO.java new file mode 100644 index 00000000..cb1659b4 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityDTO.java @@ -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; + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java index 246da5b6..3518a88b 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java @@ -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; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityEditDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsOperationDTO.java similarity index 53% rename from framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityEditDTO.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsOperationDTO.java index ab43651e..5ad8f6d6 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityEditDTO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsOperationDTO.java @@ -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 promotionGoodsList; + List promotionGoodsList; } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityLogQuery.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityLogQuery.java new file mode 100644 index 00000000..afeede37 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityLogQuery.java @@ -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 QueryWrapper wrapper() { + QueryWrapper 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; + } +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityQuery.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityQuery.java new file mode 100644 index 00000000..4cd55506 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityQuery.java @@ -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 QueryWrapper wrapper() { + QueryWrapper 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; + } +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/KanJiaStatusEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/KanJiaStatusEnum.java new file mode 100644 index 00000000..322d9ad2 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/KanJiaStatusEnum.java @@ -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; + } +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java index e22abe1a..bf61e747 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java @@ -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; + } + } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaGoodsVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaGoodsVO.java new file mode 100644 index 00000000..28381e1b --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaGoodsVO.java @@ -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; + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityLogMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityLogMapper.java new file mode 100644 index 00000000..5a58d6e8 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityLogMapper.java @@ -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 { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityMapper.java new file mode 100644 index 00000000..23bdc3dd --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityMapper.java @@ -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 { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java b/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java index 431fd2fd..d5241213 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java @@ -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 kanJiaActivityGoodsDTOS); + boolean add(KanJiaActivityGoodsOperationDTO kanJiaActivityGoodsDTOS); /** * 查询砍价活动商品分页信息 @@ -35,7 +37,38 @@ public interface KanJiaActivityGoodsService extends IService getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO); + IPage 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 ids); + + /** + * 根据skuID查询当前进行的砍价商品信息 + * + * @param skuId 商品skuId + * @return + */ + KanJiaActivityGoodsDTO getKanJiaGoodsBySku(String skuId); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityLogService.java b/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityLogService.java new file mode 100644 index 00000000..4f4d1497 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityLogService.java @@ -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 { + + /** + * 根据砍价参与记录id查询砍价记录 + * + * @param kanJiaActivityLogQuery 砍价活动帮砍信息 + * @param pageVO 分页信息 + * @return 砍价日志 + */ + IPage getForPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO pageVO); + + /** + * 砍一刀 + * + * @param kanJiaActivityDTO 砍价记录 + * @return + */ + KanJiaActivityLog addKanJiaActivityLog(KanJiaActivityDTO kanJiaActivityDTO); +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityService.java b/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityService.java new file mode 100644 index 00000000..99aafa7a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityService.java @@ -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 { + + /** + * 发起人发起砍价活动 + * + * @param skuId 商品skuId + * @return + */ + KanJiaActivityLog add(String skuId); + + /** + * 帮砍 + * + * @param kanJiaActivityId 活动id + * @return 砍价详细 + */ + KanJiaActivityLog helpKanJia(String kanJiaActivityId); + + /** + * 根据条件查询我参与的砍价活动 + * + * @param kanJiaActivityQuery 砍价活动查询条件 + * @param page 分页对象 + * @return 我参与的砍价活动信息 + */ + IPage getForPage(KanJiaActivityQuery kanJiaActivityQuery, PageVO page); + + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java index c731264c..5ef4a384 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java @@ -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 kanJiaActivityGoodsDTOS) { + public boolean add(KanJiaActivityGoodsOperationDTO kanJiaActivityGoodsOperationDTO) { List 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 getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO) { - QueryWrapper queryWrapper = kanJiaActivityGoodsParams.wrapper(); - return page(PageUtil.initPage(pageVO), queryWrapper); + public IPage getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO) { + IPage kanJiaActivityGoodsDTOIPage = new Page<>(); + Query query = kanJiaActivityGoodsParams.mongoQuery(); + if (pageVO != null) { + PromotionTools.mongoQueryPageParam(query, pageVO); + kanJiaActivityGoodsDTOIPage.setSize(pageVO.getPageSize()); + kanJiaActivityGoodsDTOIPage.setCurrent(pageVO.getPageNumber()); + } + List 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 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 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 ids) { + List 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 kanJiaActivityGoodsDTOS = this.mongoTemplate.find(query, KanJiaActivityGoodsDTO.class); + // 为了担心会查到多条数据 所以查询集合 正常情况下只会查询到一条 + if (kanJiaActivityGoodsDTOS.size() > 0) { + return kanJiaActivityGoodsDTOS.get(0); + } + return null; + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityLogServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityLogServiceImpl.java new file mode 100644 index 00000000..dea84c2a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityLogServiceImpl.java @@ -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 implements KanJiaActivityLogService { + + @Autowired + private KanJiaActivityGoodsService kanJiaActivityGoodsService; + + @Autowired + private KanJiaActivityService kanJiaActivityService; + + @Override + public IPage getForPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO pageVO) { + QueryWrapper queryWrapper = kanJiaActivityLogQuery.wrapper(); + return this.page(PageUtil.initPage(pageVO), queryWrapper); + } + + + @Override + public KanJiaActivityLog addKanJiaActivityLog(KanJiaActivityDTO kanJiaActivityDTO) { + //校验当前会员是否已经参与过此次砍价 + QueryWrapper 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); + + } +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityServiceImpl.java new file mode 100644 index 00000000..e7975a2f --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityServiceImpl.java @@ -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 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 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 getForPage(KanJiaActivityQuery kanJiaActivityQuery, PageVO page) { + QueryWrapper queryWrapper = kanJiaActivityQuery.wrapper(); + return this.page(PageUtil.initPage(page), queryWrapper); + } + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java index 24a23d6a..bee74960 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java @@ -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; } diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java index 2aede187..93970a30 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java @@ -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 add(@RequestBody List kanJiaActivityGoodsDTOS) { - kanJiaActivityGoodsService.add(kanJiaActivityGoodsDTOS); + public ResultMessage add(@RequestBody KanJiaActivityGoodsOperationDTO kanJiaActivityGoodsOperationDTO) { + kanJiaActivityGoodsService.add(kanJiaActivityGoodsOperationDTO); return ResultUtil.success(); } @ApiOperation(value = "获取砍价活动分页") @GetMapping - public ResultMessage> getKanjiaActivityPage(KanJiaActivityGoodsParams KanJiaActivityParams, PageVO page) { + public ResultMessage> getKanJiaActivityPage(KanJiaActivityGoodsParams KanJiaActivityParams, PageVO page) { return ResultUtil.data(kanJiaActivityGoodsService.getForPage(KanJiaActivityParams, page)); } + @GetMapping("/{id}") + @ApiOperation(value = "获取积分商品详情") + public ResultMessage getPointsGoodsDetail(@PathVariable("id") String goodsId) { + KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO = kanJiaActivityGoodsService.getKanJiaGoodsDetail(goodsId); + return ResultUtil.data(kanJiaActivityGoodsDTO); + } + + + @PutMapping + @ApiOperation(value = "修改砍价商品") + public ResultMessage updatePointsGoods(@RequestBody KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO) { + kanJiaActivityGoodsService.updateKanJiaActivityGoods(kanJiaActivityGoodsDTO); + return ResultUtil.success(); + } + + + @DeleteMapping("/{ids}") + @ApiOperation(value = "删除砍价商品") + public ResultMessage delete(@PathVariable String ids) { + if (kanJiaActivityGoodsService.deleteKanJiaGoods(Arrays.asList(ids.split(",")))) { + return ResultUtil.success(); + } + throw new ServiceException(ResultCode.KANJIA_GOODS_DELETE_ERROR); + } + + }