From 531ca13555fb166bb65ad6ed820a581646d9f2f8 Mon Sep 17 00:00:00 2001 From: pikachu <1321288662@qq.com> Date: Tue, 6 Jul 2021 18:35:40 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E7=A0=8D=E4=BB=B7=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lili/common/enums/ResultCode.java | 10 +- .../entity/dos/KanJiaActivityGoods.java | 76 +++++++++ .../entity/dto/KanJiaActivityEditDTO.java | 51 ++++++ .../entity/dto/KanJiaActivityGoodsDTO.java | 60 +++++++ .../entity/enums/PromotionTypeEnum.java | 3 +- .../entity/vos/KanJiaActivityGoodsParams.java | 61 ++++++++ .../mapper/KanJiaActivityGoodsMapper.java | 15 ++ .../service/KanJiaActivityGoodsService.java | 41 +++++ .../KanJiaActivityGoodsServiceImpl.java | 146 ++++++++++++++++++ .../serviceimpl/PromotionServiceImpl.java | 75 ++++++--- .../KanJiaActivityGoodsManagerController.java | 48 ++++++ 11 files changed, 562 insertions(+), 24 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityEditDTO.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java create mode 100644 framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java create mode 100644 manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index bd499283..f1cffc46 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -237,6 +237,8 @@ public enum ResultCode { PROMOTION_GOODS_ERROR(40006,"请选择要参与活动的商品"), PROMOTION_STATUS_END(40007,"当前活动已停止"), PROMOTION_UPDATE_ERROR(40008,"当前活动已开始/结束,无法编辑!"), + PROMOTION_ACTIVITY_GOODS_ERROR(40009,"当前活动已经开始无法添加商品"), + PROMOTION_ACTIVITY_ERROR(40009,"当前促销活动不存在"), /** * 优惠券 @@ -320,7 +322,13 @@ public enum ResultCode { * 其他促销 */ MEMBER_SIGN_REPEAT(47001, "请勿重复签到"), - POINT_GOODS_ACTIVE_STOCK_ERROR(47002, "活动库存数量不能高于商品库存"), + POINT_GOODS_ACTIVE_STOCK_ERROR(47002, "最低金额不能高于商品金额"), + + /** + * 砍价活动 + */ + KANJIIA_GOODS_ACTIVE_STOCK_ERROR(48001, "活动库存数量不能高于商品库存"), + KANJIIA_GOODS_ACTIVE_PRICE_ERROR(48001, "活动库存数量不能高于商品库存"), /** * 店铺 */ diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java new file mode 100644 index 00000000..4ec7ce0e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java @@ -0,0 +1,76 @@ +package cn.lili.modules.promotion.entity.dos; + +import cn.lili.base.BaseEntity; +import cn.lili.modules.promotion.entity.dto.BasePromotion; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * 砍价活动商品实体类 + * + * @author qiuqiu + * @date 2020-7-1 10:44 上午 + */ +@Data +@Entity +@Table(name = "li_kanjia_activity_goods") +@TableName("li_kanjia_activity_goods") +@ApiModel(value = "砍价活动对象") +public class KanJiaActivityGoods extends BaseEntity { + + private static final long serialVersionUID = 6694714877345423488L; + + @ApiModelProperty(value = "结算价格") + private Double settlementPrice; + + @ApiModelProperty(value = "最低购买金额") + private Double purchasePrice; + + @ApiModelProperty(value = "货品id") + private String skuId; + + @ApiModelProperty(value = "货品名称") + private String goodsName; + + @ApiModelProperty(value = "缩略图") + private String thumbnail; + + @ApiModelProperty(value = "活动库存") + private Integer stock; + + @ApiModelProperty(value = "每人最低砍价金额") + private Double lowestPrice; + + @ApiModelProperty(value = "每人最高砍价金额") + private Double highestPrice; + + /** + * @see PromotionStatusEnum + */ + @ApiModelProperty(value = "活动状态") + @NotNull(message = "活动状态不能为空") + private String promotionStatus; + + @Min(message = "活动开始时间不能为空", value = 0) + @ApiModelProperty(value = "活动开始时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + @Min(message = "活动结束时间不能为空", value = 0) + @ApiModelProperty(value = "活动结束时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityEditDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityEditDTO.java new file mode 100644 index 00000000..ab43651e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityEditDTO.java @@ -0,0 +1,51 @@ +package cn.lili.modules.promotion.entity.dto; + + +import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.Date; + +/** + * 砍价活动通用类 + * + * @author qiuqiu + * @date 2020/8/21 + **/ +@Data +public class KanJiaActivityEditDTO implements Serializable { + + + private static final long serialVersionUID = -1378599087650538592L; + @NotEmpty(message = "活动名称不能为空") + @ApiModelProperty(value = "活动名称", required = true) + private String promotionName; + + @ApiModelProperty(value = "每人最低砍价金额", required = true) + @NotEmpty(message = "每人最低砍价金额不能为空") + private Double lowestPrice; + + @ApiModelProperty(value = "每人最高砍价金额", required = true) + @NotEmpty(message = "每人最高砍价金额不能为空") + private Double highestPrice; + + @Min(message = "活动开始时间不能为空", value = 0) + @ApiModelProperty(value = "活动开始时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + @Min(message = "活动结束时间不能为空", value = 0) + @ApiModelProperty(value = "活动结束时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + + @ApiModelProperty(value = "砍价活动商品列表") + IPage promotionGoodsList; + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java new file mode 100644 index 00000000..246da5b6 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java @@ -0,0 +1,60 @@ +package cn.lili.modules.promotion.entity.dto; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.Date; + +/** + * 砍价活动商品 + * + * @author qiuqiu + * @date 2020/8/21 + **/ +@Data +public class KanJiaActivityGoodsDTO implements Serializable { + + + private static final long serialVersionUID = 1969340823809319805L; + + @ApiModelProperty(value = "结算价格") + @NotEmpty(message = "结算价格不能为空") + private Double settlementPrice; + + @ApiModelProperty(value = "最低购买金额") + @NotEmpty(message = "最低购买金额不能为空") + private Double purchasePrice; + + @ApiModelProperty(value = "货品id") + @NotEmpty(message = "货品id不能为空") + private String skuId; + + @ApiModelProperty(value = "活动库存") + @NotEmpty(message = "活动库存不能为空") + private Integer stock; + + @ApiModelProperty(value = "每人最低砍价金额") + @NotEmpty(message = "每人最低砍价金额不能为空") + private Double lowestPrice; + + @NotEmpty(message = "每人最高砍价金额不能为空") + @ApiModelProperty(value = "每人最高砍价金额") + private Double highestPrice; + + @Min(message = "活动开始时间不能为空", value = 0) + @ApiModelProperty(value = "活动开始时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date startTime; + + @Min(message = "活动结束时间不能为空", value = 0) + @ApiModelProperty(value = "活动结束时间", required = true) + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date endTime; + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java index e7e2a883..b2ce2dd0 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java @@ -16,13 +16,14 @@ public enum PromotionTypeEnum { COUPON("优惠券"), FULL_DISCOUNT("满减"), POINTS_GOODS("积分商品"), + KAN_JIA("砍价"), COUPON_ACTIVITY("优惠券活动") ; /** * 拼团秒杀拥有独立库存,如果其他促销也有独立库存涉及库存扣减的,请添加在下方 */ - static PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL}; + static PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL, KAN_JIA}; private final String description; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java new file mode 100644 index 00000000..e22abe1a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java @@ -0,0 +1,61 @@ +package cn.lili.modules.promotion.entity.vos; + + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.modules.promotion.entity.enums.*; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 砍价活动商品查询通用类 + * + * @author qiuqiu + * @date 2020/8/21 + **/ +@Data +public class KanJiaActivityGoodsParams implements Serializable { + + private static final long serialVersionUID = 1344104067705714289L; + + @ApiModelProperty(value = "活动名称") + private String goodsName; + + + @ApiModelProperty(value = "活动开始时间", required = true) + private Long startTime; + + @ApiModelProperty(value = "活动结束时间", required = true) + private Long endTime; + + /** + * @see PromotionStatusEnum + */ + @ApiModelProperty(value = "活动状态") + private String promotionStatus; + + public QueryWrapper wrapper() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + if (CharSequenceUtil.isNotEmpty(goodsName)) { + queryWrapper.like("goods_name", goodsName); + } + if (promotionStatus != null) { + queryWrapper.eq("promotion_status", promotionStatus); + } + if (startTime != null) { + queryWrapper.ge("start_time", new Date(startTime)); + } + if (endTime != null) { + queryWrapper.le("end_time", new Date(endTime)); + } + queryWrapper.eq("delete_flag", false); + return queryWrapper; + } + + + +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java new file mode 100644 index 00000000..d856c2d1 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java @@ -0,0 +1,15 @@ +package cn.lili.modules.promotion.mapper; + +import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * + * 砍价活动商品数据处理层 + * + * @author qiuqiu + * @date 2021/7/1 + */ +public interface KanJiaActivityGoodsMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java b/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java new file mode 100644 index 00000000..431fd2fd --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java @@ -0,0 +1,41 @@ +package cn.lili.modules.promotion.service; + + +import cn.lili.common.vo.PageVO; +import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsDTO; +import cn.lili.modules.promotion.entity.vos.KanJiaActivityGoodsParams; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + + +/** + * 砍价业务层 + * + * @author qiuqiu + * @date 2021/7/1 9:45 上午 + */ +public interface KanJiaActivityGoodsService extends IService { + + + /** + * 添加砍价活动商品 + * + * @param kanJiaActivityGoodsDTOS 砍价商品 + * @return 是否添加成功 + */ + boolean add(List kanJiaActivityGoodsDTOS); + + /** + * 查询砍价活动商品分页信息 + * + * @param kanJiaActivityGoodsParams 砍价活动商品 + * @param pageVO 分页信息 + * @return 砍价商品 + */ + IPage getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO); + + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java new file mode 100644 index 00000000..c731264c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java @@ -0,0 +1,146 @@ +package cn.lili.modules.promotion.serviceimpl; + + +import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; +import cn.lili.common.trigger.enums.DelayTypeEnums; +import cn.lili.common.trigger.interfaces.TimeTrigger; +import cn.lili.common.trigger.message.PromotionMessage; +import cn.lili.common.trigger.model.TimeExecuteConstant; +import cn.lili.common.trigger.model.TimeTriggerMsg; +import cn.lili.common.trigger.util.DelayQueueTools; +import cn.lili.common.utils.PageUtil; +import cn.lili.common.vo.PageVO; +import cn.lili.config.rocketmq.RocketmqCustomProperties; +import cn.lili.modules.goods.entity.dos.GoodsSku; +import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; +import cn.lili.modules.goods.service.GoodsSkuService; +import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsDTO; +import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; +import cn.lili.modules.promotion.entity.vos.KanJiaActivityGoodsParams; +import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; +import cn.lili.modules.promotion.mapper.KanJiaActivityGoodsMapper; +import cn.lili.modules.promotion.service.KanJiaActivityGoodsService; +import cn.lili.modules.promotion.tools.PromotionTools; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * 砍价业务层实现 + * + * @author qiuqiu + * @date 2021/7/1 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class KanJiaActivityGoodsServiceImpl extends ServiceImpl implements KanJiaActivityGoodsService { + + //规格商品 + @Autowired + private GoodsSkuService goodsSkuService; + + //Rocketmq + @Autowired + private RocketmqCustomProperties rocketmqCustomProperties; + + //延时任务 + @Autowired + private TimeTrigger timeTrigger; + + + @Override + public boolean add(List kanJiaActivityGoodsDTOS) { + List kanJiaActivityGoodsList = new ArrayList<>(); + for (KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO : kanJiaActivityGoodsDTOS) { + //根据skuId查询商品信息 + GoodsSku goodsSku = this.checkSkuExist(kanJiaActivityGoodsDTO.getSkuId()); + //校验商品是否存在 + if (goodsSku == null) { + throw new ServiceException(ResultCode.PROMOTION_GOODS_NOT_EXIT); + } + //校验商品状态 + if (goodsSku.getMarketEnable().equals(GoodsStatusEnum.DOWN.name())) { + throw new ServiceException(ResultCode.GOODS_NOT_EXIST); + } + //校验活动库存是否超出此sku的库存 + if (goodsSku.getQuantity() < kanJiaActivityGoodsDTO.getStock()) { + throw new ServiceException(ResultCode.POINT_GOODS_ACTIVE_STOCK_ERROR); + } + //校验最低购买金额不能高于商品金额 + if (goodsSku.getPrice() < kanJiaActivityGoodsDTO.getPurchasePrice()) { + throw new ServiceException(ResultCode.KANJIIA_GOODS_ACTIVE_PRICE_ERROR); + } + //检测同一时间段是否存在相同的商品 + PromotionTools.checkPromotionTime(kanJiaActivityGoodsDTO.getStartTime().getTime(), kanJiaActivityGoodsDTO.getEndTime().getTime()); + //赋值保存 + KanJiaActivityGoods kanJiaActivityGoods = new KanJiaActivityGoods(); + kanJiaActivityGoods.setSkuId(kanJiaActivityGoodsDTO.getSkuId()); + kanJiaActivityGoods.setThumbnail(goodsSku.getThumbnail()); + kanJiaActivityGoods.setPurchasePrice(kanJiaActivityGoodsDTO.getPurchasePrice()); + kanJiaActivityGoods.setSettlementPrice(kanJiaActivityGoodsDTO.getSettlementPrice()); + kanJiaActivityGoods.setGoodsName(goodsSku.getGoodsName()); + kanJiaActivityGoods.setStock(kanJiaActivityGoodsDTO.getStock()); + kanJiaActivityGoods.setHighestPrice(kanJiaActivityGoodsDTO.getHighestPrice()); + kanJiaActivityGoods.setLowestPrice(kanJiaActivityGoodsDTO.getLowestPrice()); + kanJiaActivityGoodsList.add(kanJiaActivityGoods); + } + Boolean result = this.saveBatch(kanJiaActivityGoodsList); + if (result) { + //发送砍价延迟任务消息 + for (KanJiaActivityGoods kanJiaActivityGoods : kanJiaActivityGoodsList) { + this.addKanJiaGoodsPromotionTask(kanJiaActivityGoods); + } + } + return result; + } + + + /** + * 添加砍价商品mq任务 + * + * @param kanJiaActivityGoods 砍价商品信息 + */ + private void addKanJiaGoodsPromotionTask(KanJiaActivityGoods kanJiaActivityGoods) { + PromotionMessage promotionMessage = new PromotionMessage(kanJiaActivityGoods.getId(), PromotionTypeEnum.KAN_JIA.name(), + PromotionStatusEnum.START.name(), + kanJiaActivityGoods.getStartTime(), kanJiaActivityGoods.getEndTime()); + TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, + promotionMessage.getStartTime().getTime(), + promotionMessage, + DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (promotionMessage.getPromotionType() + promotionMessage.getPromotionId())), + rocketmqCustomProperties.getPromotionTopic()); + //发送促销活动开始的延时任务 + this.timeTrigger.addDelay(timeTriggerMsg); + } + + @Override + public IPage getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO) { + QueryWrapper queryWrapper = kanJiaActivityGoodsParams.wrapper(); + return page(PageUtil.initPage(pageVO), queryWrapper); + } + + + /** + * 检查商品Sku是否存 + * + * @param skuId skuId + * @return 商品sku + */ + private GoodsSku checkSkuExist(String skuId) { + GoodsSku goodsSku = this.goodsSkuService.getGoodsSkuByIdFromCache(skuId); + if (goodsSku == null) { + log.error("商品ID为" + skuId + "的商品不存在!"); + throw new ServiceException(); + } + return goodsSku; + } +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java index 1a3aeedb..3f0e520e 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionServiceImpl.java @@ -71,6 +71,8 @@ public class PromotionServiceImpl implements PromotionService { //Mongo @Autowired private MongoTemplate mongoTemplate; + @Autowired + private KanJiaActivityGoodsService kanJiaActivityGoodsService; @Override @@ -100,6 +102,10 @@ public class PromotionServiceImpl implements PromotionService { case POINTS_GOODS: result = this.updatePointsGoods(promotionMessage, esPromotionKey, promotionTypeEnum); break; + //砍价商品商品 + case KAN_JIA: + result = this.updateKanJiaGoods(promotionMessage, promotionTypeEnum); + break; //优惠券活动 case COUPON_ACTIVITY: result = this.updateCouponActivity(promotionMessage, promotionTypeEnum); @@ -234,8 +240,9 @@ public class PromotionServiceImpl implements PromotionService { /** * 修改满额活动状态 - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ @@ -271,8 +278,9 @@ public class PromotionServiceImpl implements PromotionService { /** * 修改优惠券状态 - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ @@ -288,7 +296,7 @@ public class PromotionServiceImpl implements PromotionService { couponVO.setPromotionStatus(promotionMessage.getPromotionStatus()); result = this.couponService.update(promotionMessage.updateWrapper()); //优惠券活动结束,会员已领取未使用的优惠券状态修改为:已过期 - if(couponVO.getPromotionStatus().equals(PromotionStatusEnum.END)){ + if (couponVO.getPromotionStatus().equals(PromotionStatusEnum.END)) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() .eq(MemberCoupon::getCouponId, couponVO.getId()) .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name()) @@ -312,12 +320,13 @@ public class PromotionServiceImpl implements PromotionService { /** * 修改拼团状态 - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ - private boolean updatePintuan(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + private boolean updatePintuan(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { boolean result; PintuanVO pintuanVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PintuanVO.class); if (pintuanVO == null) { @@ -343,12 +352,13 @@ public class PromotionServiceImpl implements PromotionService { /** * 修改秒杀状态 - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ - private boolean updateSeckill(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + private boolean updateSeckill(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { boolean result; SeckillVO seckill = this.mongoTemplate.findById(promotionMessage.getPromotionId(), SeckillVO.class); if (seckill == null) { @@ -391,12 +401,13 @@ public class PromotionServiceImpl implements PromotionService { /** * 修改积分商品状态 - * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param esPromotionKey es Key * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ - private boolean updatePointsGoods(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum){ + private boolean updatePointsGoods(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { boolean result; PointsGoodsVO pointsGoodsVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PointsGoodsVO.class); if (pointsGoodsVO == null) { @@ -412,29 +423,49 @@ public class PromotionServiceImpl implements PromotionService { } /** - * 修改优惠券活动状态 - * @param promotionMessage 信息队列传输促销信息实体 + * 修改砍价商品状态 + * + * @param promotionMessage 信息队列传输促销信息实体 * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ - private boolean updateCouponActivity(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum){ + private boolean updateKanJiaGoods(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { + boolean result; + KanJiaActivityGoods kanJiaActivityGoods = JSONUtil.toBean(JSONUtil.toJsonStr(promotionMessage), KanJiaActivityGoods.class); + if (kanJiaActivityGoods == null) { + this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); + return false; + } + kanJiaActivityGoods.setPromotionStatus(promotionMessage.getPromotionStatus()); + result = this.kanJiaActivityGoodsService.updateById(kanJiaActivityGoods); + return result; + } + + /** + * 修改优惠券活动状态 + * + * @param promotionMessage 信息队列传输促销信息实体 + * @param promotionTypeEnum 促销分类枚举 + * @return 修改结果 + */ + private boolean updateCouponActivity(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { //如果是精准发券,进行发送优惠券 - CouponActivity couponActivity=couponActivityService.getById(promotionMessage.getPromotionId()); - if(couponActivity.getCouponActivityType().equals(CouponActivityTypeEnum.SPECIFY.name())){ + CouponActivity couponActivity = couponActivityService.getById(promotionMessage.getPromotionId()); + if (couponActivity.getCouponActivityType().equals(CouponActivityTypeEnum.SPECIFY.name())) { couponActivityService.specify(couponActivity.getId()); } //修改活动状态 return couponActivityService.update(new LambdaUpdateWrapper() - .eq(CouponActivity::getId,promotionMessage.getPromotionId()) - .set(CouponActivity::getPromotionStatus,promotionMessage.getPromotionStatus())); + .eq(CouponActivity::getId, promotionMessage.getPromotionId()) + .set(CouponActivity::getPromotionStatus, promotionMessage.getPromotionStatus())); } /** * 更新促销商品信息 * - * @param promotionId 促销活动ID + * @param promotionId 促销活动ID * @param promotionStatus 活动状态 */ private void updatePromotionGoods(String promotionId, String promotionStatus) { diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java new file mode 100644 index 00000000..2aede187 --- /dev/null +++ b/manager-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityGoodsManagerController.java @@ -0,0 +1,48 @@ +package cn.lili.controller.promotion; + +import cn.lili.common.enums.ResultUtil; +import cn.lili.common.vo.PageVO; +import cn.lili.common.vo.ResultMessage; +import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsDTO; +import cn.lili.modules.promotion.entity.vos.KanJiaActivityGoodsParams; +import cn.lili.modules.promotion.service.KanJiaActivityGoodsService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +/** + * 管理端,促销接口 + * + * @author qiuqiu + * @date 2021/7/2 + **/ +@RestController +@Api(tags = "管理端,砍价促销接口") +@RequestMapping("/manager/promotion/kan-jia-goods") +public class KanJiaActivityGoodsManagerController { + + @Autowired + private KanJiaActivityGoodsService kanJiaActivityGoodsService; + + @PostMapping + @ApiOperation(value = "添加砍价活动") + public ResultMessage add(@RequestBody List kanJiaActivityGoodsDTOS) { + kanJiaActivityGoodsService.add(kanJiaActivityGoodsDTOS); + return ResultUtil.success(); + } + + + @ApiOperation(value = "获取砍价活动分页") + @GetMapping + public ResultMessage> getKanjiaActivityPage(KanJiaActivityGoodsParams KanJiaActivityParams, PageVO page) { + return ResultUtil.data(kanJiaActivityGoodsService.getForPage(KanJiaActivityParams, page)); + } + + +} 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 02/13] =?UTF-8?q?=E7=A0=8D=E4=BB=B7=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E7=AC=AC=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); + } + + } From 4718ce292def430924aaa90a6316e69fb62fd6ca Mon Sep 17 00:00:00 2001 From: lifenlong Date: Tue, 13 Jul 2021 16:17:53 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=A0=8D=E4=BB=B7?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KanJiaActivityBuyerController.java | 58 --------- .../KanJiaActivityLogBuyerController.java | 46 ------- .../KanJiaGoodsActivityBuyerController.java | 42 ------- .../KanjiaGoodsActivityBuyerController.java | 111 +++++++++++++++++ ...anJiaActivity.java => KanjiaActivity.java} | 4 +- ...ityGoods.java => KanjiaActivityGoods.java} | 2 +- ...ctivityLog.java => KanjiaActivityLog.java} | 18 +-- ...ctivityDTO.java => KanjiaActivityDTO.java} | 6 +- ...dsDTO.java => KanjiaActivityGoodsDTO.java} | 4 +- ...a => KanjiaActivityGoodsOperationDTO.java} | 4 +- ...ityQuery.java => KanjiaActivityQuery.java} | 2 +- .../entity/vos/KanjiaActivityGoodsListVO.java | 30 +++++ ...ms.java => KanjiaActivityGoodsParams.java} | 19 ++- ...oodsVO.java => KanjiaActivityGoodsVO.java} | 13 +- .../vos/KanjiaActivitySearchParams.java | 42 +++++++ .../mapper/KanJiaActivityGoodsMapper.java | 19 ++- .../mapper/KanJiaActivityLogMapper.java | 4 +- .../mapper/KanJiaActivityMapper.java | 4 +- .../service/KanJiaActivityService.java | 47 ------- ...e.java => KanjiaActivityGoodsService.java} | 39 ++++-- ...ice.java => KanjiaActivityLogService.java} | 10 +- .../service/KanjiaActivityService.java | 58 +++++++++ ...va => KanjiaActivityGoodsServiceImpl.java} | 93 +++++++++----- ...java => KanjiaActivityLogServiceImpl.java} | 47 ++++--- ...pl.java => KanjiaActivityServiceImpl.java} | 116 +++++++++--------- .../serviceimpl/PromotionServiceImpl.java | 6 +- .../KanJiaActivityGoodsManagerController.java | 18 +-- 27 files changed, 478 insertions(+), 384 deletions(-) delete mode 100644 buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityBuyerController.java delete mode 100644 buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityLogBuyerController.java delete mode 100644 buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaGoodsActivityBuyerController.java create mode 100644 buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java rename framework/src/main/java/cn/lili/modules/promotion/entity/dos/{KanJiaActivity.java => KanjiaActivity.java} (93%) rename framework/src/main/java/cn/lili/modules/promotion/entity/dos/{KanJiaActivityGoods.java => KanjiaActivityGoods.java} (97%) rename framework/src/main/java/cn/lili/modules/promotion/entity/dos/{KanJiaActivityLog.java => KanjiaActivityLog.java} (65%) rename framework/src/main/java/cn/lili/modules/promotion/entity/dto/{KanJiaActivityDTO.java => KanjiaActivityDTO.java} (68%) rename framework/src/main/java/cn/lili/modules/promotion/entity/dto/{KanJiaActivityGoodsDTO.java => KanjiaActivityGoodsDTO.java} (78%) rename framework/src/main/java/cn/lili/modules/promotion/entity/dto/{KanJiaActivityGoodsOperationDTO.java => KanjiaActivityGoodsOperationDTO.java} (89%) rename framework/src/main/java/cn/lili/modules/promotion/entity/dto/{KanJiaActivityQuery.java => KanjiaActivityQuery.java} (96%) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsListVO.java rename framework/src/main/java/cn/lili/modules/promotion/entity/vos/{KanJiaActivityGoodsParams.java => KanjiaActivityGoodsParams.java} (89%) rename framework/src/main/java/cn/lili/modules/promotion/entity/vos/{KanJiaGoodsVO.java => KanjiaActivityGoodsVO.java} (56%) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivitySearchParams.java delete mode 100644 framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityService.java rename framework/src/main/java/cn/lili/modules/promotion/service/{KanJiaActivityGoodsService.java => KanjiaActivityGoodsService.java} (50%) rename framework/src/main/java/cn/lili/modules/promotion/service/{KanJiaActivityLogService.java => KanjiaActivityLogService.java} (69%) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityService.java rename framework/src/main/java/cn/lili/modules/promotion/serviceimpl/{KanJiaActivityGoodsServiceImpl.java => KanjiaActivityGoodsServiceImpl.java} (77%) rename framework/src/main/java/cn/lili/modules/promotion/serviceimpl/{KanJiaActivityLogServiceImpl.java => KanjiaActivityLogServiceImpl.java} (53%) rename framework/src/main/java/cn/lili/modules/promotion/serviceimpl/{KanJiaActivityServiceImpl.java => KanjiaActivityServiceImpl.java} (58%) 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 deleted file mode 100644 index 6261090b..00000000 --- a/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityBuyerController.java +++ /dev/null @@ -1,58 +0,0 @@ -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 deleted file mode 100644 index 9f1f630e..00000000 --- a/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaActivityLogBuyerController.java +++ /dev/null @@ -1,46 +0,0 @@ -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 deleted file mode 100644 index da295062..00000000 --- a/buyer-api/src/main/java/cn/lili/controller/promotion/KanJiaGoodsActivityBuyerController.java +++ /dev/null @@ -1,42 +0,0 @@ -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/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..7861251b --- /dev/null +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java @@ -0,0 +1,111 @@ +package cn.lili.controller.promotion; + +import cn.hutool.core.util.StrUtil; +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.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsListVO; +import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsParams; +import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsVO; +import cn.lili.modules.promotion.entity.vos.KanjiaActivitySearchParams; +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.metadata.IPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * 买家端,砍价活动商品 + * + * @author qiuqiu + * @date 2021/7/12 + **/ +@RestController +@Api(tags = "买家端,砍价商品接口") +@RequestMapping("/buyer/promotion/kanjiaGoods") +public class KanjiaGoodsActivityBuyerController { + + /** + * 砍价活动商品 + */ + @Autowired + private KanjiaActivityGoodsService kanJiaActivityGoodsService; + /** + * 帮砍记录 + */ + @Autowired + private KanjiaActivityLogService kanJiaActivityLogService; + /** + * 砍价活动 + */ + @Autowired + private KanjiaActivityService kanJiaActivityService; + + @GetMapping + @ApiOperation(value = "分页获取砍价商品") + public ResultMessage> kanJiaActivityGoodsPage(KanjiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO page) { + // 会员端查询到的肯定是已经开始的活动商品 + kanJiaActivityGoodsParams.setPromotionStatus(PromotionStatusEnum.START.name()); + return ResultUtil.data(kanJiaActivityGoodsService.kanJiaGoodsVOPage(kanJiaActivityGoodsParams, page)); + } + + @GetMapping("/{id}") + @ApiOperation(value = "获取砍价活动商品") + @ApiImplicitParam(name = "id", value = "砍价活动商品ID", required = true, paramType = "path") + public ResultMessage getPointsGoodsPage(@PathVariable String id) { + return ResultUtil.data(kanJiaActivityGoodsService.getKanJiaGoodsVO(id)); + } + + @GetMapping("/getKanjiaActivity/logs") + @ApiOperation(value = "分页获取砍价活动-帮砍记录") + public ResultMessage> getPointsGoodsPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO page) { + // 会员端查询到的肯定是已经开始的活动商品 + kanJiaActivityLogQuery.setMemberId(UserContext.getCurrentUser().getId()); + return ResultUtil.data(kanJiaActivityLogService.getForPage(kanJiaActivityLogQuery, page)); + } + + @PostMapping("/getKanjiaActivity") + @ApiOperation(value = "获取砍价活动") + public ResultMessage getKanJiaActivity(KanjiaActivitySearchParams kanJiaActivitySearchParams) { + //如果是非被邀请关系则填写会员ID + if (StrUtil.isEmpty(kanJiaActivitySearchParams.getKanjiaActivityId())) { + kanJiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); + } + return ResultUtil.data(kanJiaActivityService.getKanjiaActivity(kanJiaActivitySearchParams)); + } + + @PostMapping + @ApiImplicitParam(name = "id", value = "砍价活动商品ID", required = true, paramType = "path") + @ApiOperation(value = "发起砍价活动") + public ResultMessage launchKanJiaActivity(String id) { + KanjiaActivityLog kanJiaActivityLog = kanJiaActivityService.add(id); + return ResultUtil.data(kanJiaActivityLog); + } + + @PostMapping("/help") + @ApiOperation(value = "帮砍一刀") + public ResultMessage helpKanJia(String kanJiaActivityId) { + KanjiaActivityLog kanJiaActivityLog = kanJiaActivityService.helpKanJia(kanJiaActivityId); + return ResultUtil.data(kanJiaActivityLog); + } + + @GetMapping("/kanjiaActivity/mine/") + @ApiOperation(value = "分页获取已参与的砍价活动") + public ResultMessage> getPointsGoodsPage(KanjiaActivityQuery kanJiaActivityQuery, PageVO page) { + // 会员端查询到的肯定是已经开始的活动商品 + kanJiaActivityQuery.setMemberId(UserContext.getCurrentUser().getId()); + IPage kanJiaActivityIPage = kanJiaActivityService.getForPage(kanJiaActivityQuery, page); + return ResultUtil.data(kanJiaActivityIPage); + } + +} 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 similarity index 93% rename from framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivity.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanjiaActivity.java index 762f0d3f..e355af54 100644 --- 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 @@ -20,13 +20,13 @@ import javax.persistence.Table; @Table(name = "li_kanjia_activity") @TableName("li_kanjia_activity") @ApiModel(value = "砍价活动参与对象") -public class KanJiaActivity extends BaseEntity { +public class KanjiaActivity extends BaseEntity { private static final long serialVersionUID = -1583030890805926292L; @ApiModelProperty(value = "砍价商品id") - private String kanJiaActivityGoodsId; + private String kanjiaActivityGoodsId; @ApiModelProperty(value = "参与砍价活动会员id") private String memberId; 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 similarity index 97% rename from framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityGoods.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanjiaActivityGoods.java index f7275851..ce8c939b 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 @@ -26,7 +26,7 @@ import java.util.Date; @Table(name = "li_kanjia_activity_goods") @TableName("li_kanjia_activity_goods") @ApiModel(value = "砍价活动商品对象") -public class KanJiaActivityGoods extends BaseEntity { +public class KanjiaActivityGoods extends BaseEntity { private static final long serialVersionUID = 6694714877345423488L; 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 similarity index 65% rename from framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanJiaActivityLog.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/dos/KanjiaActivityLog.java index f173d230..1fca0ad1 100644 --- 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 @@ -1,19 +1,13 @@ 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; /** * 砍价活动商品实体类 @@ -26,25 +20,25 @@ import java.util.Date; @Table(name = "li_kanjia_activity_log") @TableName("li_kanjia_activity_log") @ApiModel(value = "砍价活动日志对象") -public class KanJiaActivityLog extends BaseEntity { +public class KanjiaActivityLog extends BaseEntity { private static final long serialVersionUID = 3977352717995562783L; @ApiModelProperty(value = "砍价活动参与记录id") - private String kanJiaActivityId; + private String kanjiaActivityId; @ApiModelProperty(value = "砍价会员id") - private String kanJiaMemberId; + private String kanjiaMemberId; @ApiModelProperty(value = "砍价会员名称") - private String kanJiaMemberName; + private String kanjiaMemberName; @ApiModelProperty(value = "砍价会员头像") - private String kanJiaMemberFace; + private String kanjiaMemberFace; @ApiModelProperty(value = "砍价金额") - private Double kanJiaPrice; + private Double kanjiaPrice; @ApiModelProperty(value = "剩余购买金额") private Double surplusPrice; 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 similarity index 68% rename from framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityDTO.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityDTO.java index cb1659b4..79ef9ab1 100644 --- 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 @@ -1,7 +1,7 @@ package cn.lili.modules.promotion.entity.dto; -import cn.lili.modules.promotion.entity.dos.KanJiaActivityLog; +import cn.lili.modules.promotion.entity.dos.KanjiaActivityLog; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -15,9 +15,9 @@ import lombok.Data; */ @Data @ApiModel(value = "砍价活动参与记录对象") -public class KanJiaActivityDTO extends KanJiaActivityLog { +public class KanjiaActivityDTO extends KanjiaActivityLog { @ApiModelProperty(value = "砍价金额") - private String kanJiaActivityGoodsId; + 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 similarity index 78% rename from framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsDTO.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityGoodsDTO.java index 3518a88b..87e57d88 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 @@ -2,7 +2,7 @@ package cn.lili.modules.promotion.entity.dto; import cn.lili.modules.goods.entity.dos.GoodsSku; -import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -15,7 +15,7 @@ import java.io.Serializable; * @date 2020/8/21 **/ @Data -public class KanJiaActivityGoodsDTO extends KanJiaActivityGoods implements Serializable { +public class KanjiaActivityGoodsDTO extends KanjiaActivityGoods implements Serializable { private static final long serialVersionUID = 1969340823809319805L; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsOperationDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityGoodsOperationDTO.java similarity index 89% rename from framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsOperationDTO.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityGoodsOperationDTO.java index 5ad8f6d6..cfb987f3 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityGoodsOperationDTO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityGoodsOperationDTO.java @@ -17,7 +17,7 @@ import java.util.List; * @date 2020/8/21 **/ @Data -public class KanJiaActivityGoodsOperationDTO implements Serializable { +public class KanjiaActivityGoodsOperationDTO implements Serializable { private static final long serialVersionUID = -1378599087650538592L; @@ -33,6 +33,6 @@ public class KanJiaActivityGoodsOperationDTO implements Serializable { private Date endTime; @ApiModelProperty(value = "砍价活动商品列表") - List promotionGoodsList; + List promotionGoodsList; } 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 similarity index 96% rename from framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityQuery.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanjiaActivityQuery.java index 4cd55506..332a7d39 100644 --- 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 @@ -17,7 +17,7 @@ import java.util.Date; */ @Data @ApiModel(value = "砍价活动参与记录查询对象") -public class KanJiaActivityQuery { +public class KanjiaActivityQuery { private static final long serialVersionUID = -1583030890805926292L; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsListVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsListVO.java new file mode 100644 index 00000000..29c5ba49 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsListVO.java @@ -0,0 +1,30 @@ +package cn.lili.modules.promotion.entity.vos; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 砍价商品视图对象 + * + * @author paulG + * @date 2021/1/13 + **/ +@Data +public class KanjiaActivityGoodsListVO { + + @ApiModelProperty(value = "货品id") + private String skuId; + + @ApiModelProperty(value = "货品名称") + private String goodsName; + + @ApiModelProperty(value = "缩略图") + private String thumbnail; + + @ApiModelProperty(value = "最低购买金额") + private Double purchasePrice; + + @ApiModelProperty(value = "活动库存") + private Integer stock; + +} 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 similarity index 89% rename from framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaActivityGoodsParams.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsParams.java index bf61e747..f5bab12a 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,19 +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 cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; import java.io.Serializable; import java.util.Date; @@ -26,17 +21,17 @@ import java.util.regex.Pattern; * @date 2020/8/21 **/ @Data -public class KanJiaActivityGoodsParams implements Serializable { +public class KanjiaActivityGoodsParams implements Serializable { private static final long serialVersionUID = 1344104067705714289L; @ApiModelProperty(value = "活动商品") private String goodsName; - @ApiModelProperty(value = "活动开始时间", required = true) + @ApiModelProperty(value = "活动开始时间") private Long startTime; - @ApiModelProperty(value = "活动结束时间", required = true) + @ApiModelProperty(value = "活动结束时间") private Long endTime; @ApiModelProperty(value = "skuId") 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/KanjiaActivityGoodsVO.java similarity index 56% rename from framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaGoodsVO.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsVO.java index 28381e1b..0ca5ba90 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanJiaGoodsVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsVO.java @@ -1,10 +1,8 @@ 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; /** * 砍价商品视图对象 @@ -12,13 +10,16 @@ import lombok.EqualsAndHashCode; * @author paulG * @date 2021/1/13 **/ -@EqualsAndHashCode(callSuper = true) @Data -public class KanJiaGoodsVO extends KanJiaActivityGoods { - - private static final long serialVersionUID = -5163709626742905057L; +public class KanjiaActivityGoodsVO { @ApiModelProperty(value = "商品规格详细信息") private GoodsSku goodsSku; + @ApiModelProperty(value = "最低购买金额") + private Double purchasePrice; + + @ApiModelProperty(value = "活动库存") + private Integer stock; + } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivitySearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivitySearchParams.java new file mode 100644 index 00000000..d60513ee --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivitySearchParams.java @@ -0,0 +1,42 @@ +package cn.lili.modules.promotion.entity.vos; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 砍价活动搜索参数 + * + * @author Bulbasaur + * @date: 2021/7/13 2:41 下午 + */ +@Data +public class KanjiaActivitySearchParams { + + @ApiModelProperty(value = "砍价活动ID") + private String id; + + @ApiModelProperty(value = "砍价商品SkuID") + private String kanjiaActivityGoodsId; + + @ApiModelProperty(value = "会员ID" ,hidden = true) + private String memberId; + + @ApiModelProperty(value = "状态") + private String status; + + @ApiModelProperty(value = "邀请活动ID,有值说明是被邀请人") + private String kanjiaActivityId; + + + public QueryWrapper wrapper() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotEmpty(id), "id", id); + queryWrapper.eq(StrUtil.isNotEmpty(kanjiaActivityId), "id", kanjiaActivityId); + queryWrapper.eq(StrUtil.isNotEmpty(kanjiaActivityGoodsId), "kanJia_activity_goods_id", kanjiaActivityGoodsId); + queryWrapper.eq(StrUtil.isNotEmpty(memberId), "member_id", memberId); + queryWrapper.eq(StrUtil.isNotEmpty(status), "status", status); + return wrapper(); + } +} diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java index d856c2d1..847a4d4c 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java @@ -1,7 +1,13 @@ package cn.lili.modules.promotion.mapper; -import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; +import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; +import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsListVO; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; /** * @@ -10,6 +16,15 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @author qiuqiu * @date 2021/7/1 */ -public interface KanJiaActivityGoodsMapper extends BaseMapper { +public interface KanJiaActivityGoodsMapper extends BaseMapper { + + /** + * 获取砍价商品VO分页 + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 砍价商品VO分页 + */ + @Select("SELECT * FROM li_kanjia_activity_goods ${ew.customSqlSegment}") + IPage kanjiaActivityGoodsVOPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); } \ No newline at end of file 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 index 5a58d6e8..2a297688 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityLogMapper.java +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityLogMapper.java @@ -1,6 +1,6 @@ package cn.lili.modules.promotion.mapper; -import cn.lili.modules.promotion.entity.dos.KanJiaActivityLog; +import cn.lili.modules.promotion.entity.dos.KanjiaActivityLog; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** @@ -10,6 +10,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @author qiuqiu * @date 2021/7/1 */ -public interface KanJiaActivityLogMapper extends BaseMapper { +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 index 23bdc3dd..237aa46a 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityMapper.java +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityMapper.java @@ -1,6 +1,6 @@ package cn.lili.modules.promotion.mapper; -import cn.lili.modules.promotion.entity.dos.KanJiaActivity; +import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** @@ -10,6 +10,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @author qiuqiu * @date 2021/7/1 */ -public interface KanJiaActivityMapper extends BaseMapper { +public interface KanJiaActivityMapper extends BaseMapper { } \ 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 deleted file mode 100644 index 99aafa7a..00000000 --- a/framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityService.java +++ /dev/null @@ -1,47 +0,0 @@ -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/service/KanJiaActivityGoodsService.java b/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityGoodsService.java similarity index 50% rename from framework/src/main/java/cn/lili/modules/promotion/service/KanJiaActivityGoodsService.java rename to framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityGoodsService.java index d5241213..d6f489a4 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,11 +2,12 @@ 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 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.KanjiaActivityGoodsListVO; +import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsParams; +import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -19,7 +20,7 @@ import java.util.List; * @author qiuqiu * @date 2021/7/1 9:45 上午 */ -public interface KanJiaActivityGoodsService extends IService { +public interface KanjiaActivityGoodsService extends IService { /** @@ -28,7 +29,7 @@ public interface KanJiaActivityGoodsService extends IService getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO); + IPage getForPage(KanjiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO); + + /** + * 查询砍价活动商品分页信息 + * + * @param kanJiaActivityGoodsParams 砍价活动商品 + * @param pageVO 分页信息 + * @return 砍价商品 + */ + IPage kanJiaGoodsVOPage(KanjiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO); /** * 查询砍价活动商品 @@ -45,7 +55,14 @@ public interface KanJiaActivityGoodsService extends IService { +public interface KanjiaActivityLogService extends IService { /** * 根据砍价参与记录id查询砍价记录 @@ -24,7 +24,7 @@ public interface KanJiaActivityLogService extends IService { * @param pageVO 分页信息 * @return 砍价日志 */ - IPage getForPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO pageVO); + IPage getForPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO pageVO); /** * 砍一刀 @@ -32,5 +32,5 @@ public interface KanJiaActivityLogService extends IService { * @param kanJiaActivityDTO 砍价记录 * @return */ - KanJiaActivityLog addKanJiaActivityLog(KanJiaActivityDTO kanJiaActivityDTO); + 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..26dd8259 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityService.java @@ -0,0 +1,58 @@ +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.KanjiaActivityQuery; +import cn.lili.modules.promotion.entity.vos.KanjiaActivitySearchParams; +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 kanJiaActivitySearchParams 砍价活动搜索参数 + * @return 砍价活动 + */ + KanjiaActivity getKanjiaActivity(KanjiaActivitySearchParams kanJiaActivitySearchParams); + + /** + * 发起人发起砍价活动 + * + * @param id 活动ID + * @return + */ + KanjiaActivityLog add(String id); + + /** + * 帮砍 + * + * @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 similarity index 77% rename from framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityGoodsServiceImpl.java rename to framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityGoodsServiceImpl.java index 5ef4a384..2b00287d 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 @@ -11,19 +11,22 @@ 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.DateUtil; +import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; import cn.lili.config.rocketmq.RocketmqCustomProperties; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.service.GoodsSkuService; -import cn.lili.modules.promotion.entity.dos.KanJiaActivityGoods; -import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsDTO; -import cn.lili.modules.promotion.entity.dto.KanJiaActivityGoodsOperationDTO; +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.KanjiaActivityGoodsListVO; +import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsParams; +import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsVO; import cn.lili.modules.promotion.mapper.KanJiaActivityGoodsMapper; -import cn.lili.modules.promotion.service.KanJiaActivityGoodsService; +import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; import cn.lili.modules.promotion.tools.PromotionTools; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -47,7 +50,7 @@ import java.util.List; */ @Service @Transactional(rollbackFor = Exception.class) -public class KanJiaActivityGoodsServiceImpl extends ServiceImpl implements KanJiaActivityGoodsService { +public class KanjiaActivityGoodsServiceImpl extends ServiceImpl implements KanjiaActivityGoodsService { //规格商品 @Autowired @@ -67,9 +70,9 @@ public class KanJiaActivityGoodsServiceImpl extends ServiceImpl kanJiaActivityGoodsList = new ArrayList<>(); - for (KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO : kanJiaActivityGoodsOperationDTO.getPromotionGoodsList()) { + public boolean add(KanjiaActivityGoodsOperationDTO kanJiaActivityGoodsOperationDTO) { + List kanjiaActivityGoodsList = new ArrayList<>(); + for (KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO : kanJiaActivityGoodsOperationDTO.getPromotionGoodsList()) { //根据skuId查询商品信息 GoodsSku goodsSku = this.checkSkuExist(kanJiaActivityGoodsDTO.getSkuId()); //参数检测 @@ -87,12 +90,12 @@ public class KanJiaActivityGoodsServiceImpl extends ServiceImpl getForPage(KanJiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO) { - IPage kanJiaActivityGoodsDTOIPage = new Page<>(); + 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); + List kanJiaActivityGoodsDTOS = this.mongoTemplate.find(query, KanjiaActivityGoodsDTO.class); kanJiaActivityGoodsDTOIPage.setRecords(kanJiaActivityGoodsDTOS); - kanJiaActivityGoodsDTOIPage.setTotal(this.mongoTemplate.count(kanJiaActivityGoodsParams.mongoQuery(), KanJiaActivityGoodsDTO.class)); + kanJiaActivityGoodsDTOIPage.setTotal(this.mongoTemplate.count(kanJiaActivityGoodsParams.mongoQuery(), KanjiaActivityGoodsDTO.class)); return kanJiaActivityGoodsDTOIPage; } + @Override + public IPage kanJiaGoodsVOPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO pageVO) { + return this.baseMapper.kanjiaActivityGoodsVOPage(PageUtil.initPage(pageVO),kanjiaActivityGoodsParams.wrapper()); + } + /** * 检查商品Sku是否存 @@ -157,7 +165,7 @@ public class KanJiaActivityGoodsServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(KanJiaActivityGoods::getSkuId, skuId); + 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::getId, kanJiaActivityGoodsDTO.getId()); } - queryWrapper.ne(KanJiaActivityGoods::getPromotionStatus, PromotionStatusEnum.END.name()); + queryWrapper.ne(KanjiaActivityGoods::getPromotionStatus, PromotionStatusEnum.END.name()); - queryWrapper.ge(KanJiaActivityGoods::getStartTime, kanJiaActivityGoodsDTO.getStartTime()); + queryWrapper.ge(KanjiaActivityGoods::getStartTime, kanJiaActivityGoodsDTO.getStartTime()); - queryWrapper.le(KanJiaActivityGoods::getEndTime, kanJiaActivityGoodsDTO.getEndTime()); + queryWrapper.le(KanjiaActivityGoods::getEndTime, kanJiaActivityGoodsDTO.getEndTime()); return this.getOne(queryWrapper); } @Override - public KanJiaActivityGoodsDTO getKanJiaGoodsDetail(String goodsId) { - KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.mongoTemplate.findById(goodsId, KanJiaActivityGoodsDTO.class); + public KanjiaActivityGoodsDTO getKanJiaGoodsDetail(String goodsId) { + KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.mongoTemplate.findById(goodsId, KanjiaActivityGoodsDTO.class); if (kanJiaActivityGoodsDTO == null) { log.error("id为" + goodsId + "的砍价商品不存在!"); throw new ServiceException(); @@ -226,9 +234,26 @@ public class KanJiaActivityGoodsServiceImpl extends ServiceImpl ids) { List skuIds = new ArrayList<>(); for (String id : ids) { - KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.getKanJiaGoodsDetail(id); + KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.getKanJiaGoodsDetail(id); this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, kanJiaActivityGoodsDTO.getStartTime().getTime(), DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.KAN_JIA.name() + kanJiaActivityGoodsDTO.getId())), @@ -282,21 +307,21 @@ public class KanJiaActivityGoodsServiceImpl extends ServiceImpl kanJiaActivityGoodsDTOS = this.mongoTemplate.find(query, KanJiaActivityGoodsDTO.class); + List kanJiaActivityGoodsDTOS = this.mongoTemplate.find(query, KanjiaActivityGoodsDTO.class); // 为了担心会查到多条数据 所以查询集合 正常情况下只会查询到一条 if (kanJiaActivityGoodsDTOS.size() > 0) { return kanJiaActivityGoodsDTOS.get(0); 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 similarity index 53% rename from framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityLogServiceImpl.java rename to framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityLogServiceImpl.java index dea84c2a..dada60d4 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityLogServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityLogServiceImpl.java @@ -3,20 +3,19 @@ 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.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 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; @@ -33,41 +32,41 @@ import org.springframework.transaction.annotation.Transactional; */ @Service @Transactional(rollbackFor = Exception.class) -public class KanJiaActivityLogServiceImpl extends ServiceImpl implements KanJiaActivityLogService { +public class KanjiaActivityLogServiceImpl extends ServiceImpl implements KanjiaActivityLogService { @Autowired - private KanJiaActivityGoodsService kanJiaActivityGoodsService; + private KanjiaActivityGoodsService kanJiaActivityGoodsService; @Autowired - private KanJiaActivityService kanJiaActivityService; + private KanjiaActivityService kanJiaActivityService; @Override - public IPage getForPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO pageVO) { - QueryWrapper queryWrapper = kanJiaActivityLogQuery.wrapper(); + public IPage getForPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO pageVO) { + QueryWrapper queryWrapper = kanJiaActivityLogQuery.wrapper(); return this.page(PageUtil.initPage(pageVO), queryWrapper); } @Override - public KanJiaActivityLog addKanJiaActivityLog(KanJiaActivityDTO kanJiaActivityDTO) { + 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()); + 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()); + KanjiaActivityGoods kanjiaActivityGoods = kanJiaActivityGoodsService.getById(kanjiaActivityDTO.getKanjiaActivityGoodsId()); //如果当前活动不为空且还在活动时间内 才可以参与砍价活动 - if (kanJiaActivityGoods != null && kanJiaActivityGoods.getPromotionStatus().equals(PromotionStatusEnum.START.name())) { + 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); + 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; 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 similarity index 58% rename from framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityServiceImpl.java rename to framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java index e7975a2f..268d4320 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanJiaActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java @@ -11,17 +11,18 @@ 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.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.entity.vos.KanjiaActivitySearchParams; 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 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; @@ -38,45 +39,44 @@ import org.springframework.transaction.annotation.Transactional; */ @Service @Transactional(rollbackFor = Exception.class) -public class KanJiaActivityServiceImpl extends ServiceImpl implements KanJiaActivityService { - +public class KanjiaActivityServiceImpl extends ServiceImpl implements KanjiaActivityService { @Autowired - private KanJiaActivityGoodsService kanJiaActivityGoodsService; - + private KanjiaActivityGoodsService kanjiaActivityGoodsService; @Autowired - private KanJiaActivityLogService kanJiaActivityLogService; - - + private KanjiaActivityLogService kanjiaActivityLogService; @Autowired private MemberService memberService; - - //规格商品 @Autowired private GoodsSkuService goodsSkuService; @Override - public KanJiaActivityLog add(String skuId) { + public KanjiaActivity getKanjiaActivity(KanjiaActivitySearchParams kanJiaActivitySearchParams) { + return this.getOne(kanJiaActivitySearchParams.wrapper()); + } + + @Override + public KanjiaActivityLog add(String id) { //根据skuId查询当前sku是否参与活动并且是在活动进行中 - KanJiaActivityGoods kanJiaActivityGoods = kanJiaActivityGoodsService.getKanJiaGoodsBySku(skuId); + KanjiaActivityGoods kanJiaActivityGoods = kanjiaActivityGoodsService.getById(id); //只有砍价商品存在且已经开始的活动才可以发起砍价 if (kanJiaActivityGoods != null && kanJiaActivityGoods.getPromotionStatus().equals(PromotionStatusEnum.START.name())) { //获取会员信息 Member member = memberService.getById(UserContext.getCurrentUser().getId()); //校验此活动是否已经发起过 - QueryWrapper queryWrapper = new QueryWrapper<>(); + 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(); + KanjiaActivity kanJiaActivity = new KanjiaActivity(); //获取商品信息 - GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(skuId); + GoodsSku goodsSku = goodsSkuService.getGoodsSkuByIdFromCache(kanJiaActivityGoods.getSkuId()); if (goodsSku != null && member != null) { - kanJiaActivity.setSkuId(skuId); + kanJiaActivity.setSkuId(kanJiaActivityGoods.getSkuId()); kanJiaActivity.setGoodsName(goodsSku.getGoodsName()); - kanJiaActivity.setKanJiaActivityGoodsId(kanJiaActivityGoods.getId()); + kanJiaActivity.setKanjiaActivityGoodsId(kanJiaActivityGoods.getId()); kanJiaActivity.setThumbnail(goodsSku.getThumbnail()); kanJiaActivity.setMemberId(UserContext.getCurrentUser().getId()); kanJiaActivity.setMemberName(member.getUsername()); @@ -84,22 +84,22 @@ public class KanJiaActivityServiceImpl extends ServiceImpl surplusPrice) { + if (kanjiaActivityGoods.getLowestPrice() > surplusPrice) { return surplusPrice; } Double price = 0D; while (true) { - price = CurrencyUtil.round(num + kanJiaActivityGoods.getLowestPrice(), 2); + price = CurrencyUtil.round(num + kanjiaActivityGoods.getLowestPrice(), 2); //从最大金额和最小金额之间获取随机砍价金额 if (price < surplusPrice) { break; @@ -176,8 +176,8 @@ public class KanJiaActivityServiceImpl extends ServiceImpl getForPage(KanJiaActivityQuery kanJiaActivityQuery, PageVO page) { - QueryWrapper queryWrapper = kanJiaActivityQuery.wrapper(); + public IPage getForPage(KanjiaActivityQuery kanjiaActivityQuery, PageVO page) { + QueryWrapper queryWrapper = kanjiaActivityQuery.wrapper(); return this.page(PageUtil.initPage(page), queryWrapper); } 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 e193325f..7d452e97 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,7 +9,7 @@ import cn.lili.common.exception.ServiceException; import cn.lili.common.trigger.message.PromotionMessage; 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.dto.KanjiaActivityGoodsDTO; import cn.lili.modules.promotion.entity.enums.*; import cn.lili.modules.promotion.entity.vos.CouponVO; import cn.lili.modules.promotion.entity.vos.PintuanVO; @@ -98,7 +98,7 @@ public class PromotionServiceImpl implements PromotionService { @Autowired private MongoTemplate mongoTemplate; @Autowired - private KanJiaActivityGoodsService kanJiaActivityGoodsService; + private KanjiaActivityGoodsService kanJiaActivityGoodsService; @Override @@ -465,7 +465,7 @@ public class PromotionServiceImpl implements PromotionService { * @return 修改结果 */ private boolean updateKanJiaGoods(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { - KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), KanJiaActivityGoodsDTO.class); + KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), KanjiaActivityGoodsDTO.class); if (kanJiaActivityGoodsDTO == null) { this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); return false; 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 93970a30..78411283 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 @@ -6,10 +6,10 @@ 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.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 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; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -31,11 +31,11 @@ import java.util.Arrays; public class KanJiaActivityGoodsManagerController { @Autowired - private KanJiaActivityGoodsService kanJiaActivityGoodsService; + private KanjiaActivityGoodsService kanJiaActivityGoodsService; @PostMapping @ApiOperation(value = "添加砍价活动") - public ResultMessage add(@RequestBody KanJiaActivityGoodsOperationDTO kanJiaActivityGoodsOperationDTO) { + public ResultMessage add(@RequestBody KanjiaActivityGoodsOperationDTO kanJiaActivityGoodsOperationDTO) { kanJiaActivityGoodsService.add(kanJiaActivityGoodsOperationDTO); return ResultUtil.success(); } @@ -43,7 +43,7 @@ public class KanJiaActivityGoodsManagerController { @ApiOperation(value = "获取砍价活动分页") @GetMapping - public ResultMessage> getKanJiaActivityPage(KanJiaActivityGoodsParams KanJiaActivityParams, PageVO page) { + public ResultMessage> getKanJiaActivityPage(KanjiaActivityGoodsParams KanJiaActivityParams, PageVO page) { return ResultUtil.data(kanJiaActivityGoodsService.getForPage(KanJiaActivityParams, page)); } @@ -51,14 +51,14 @@ public class KanJiaActivityGoodsManagerController { @GetMapping("/{id}") @ApiOperation(value = "获取积分商品详情") public ResultMessage getPointsGoodsDetail(@PathVariable("id") String goodsId) { - KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO = kanJiaActivityGoodsService.getKanJiaGoodsDetail(goodsId); + KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO = kanJiaActivityGoodsService.getKanJiaGoodsDetail(goodsId); return ResultUtil.data(kanJiaActivityGoodsDTO); } @PutMapping @ApiOperation(value = "修改砍价商品") - public ResultMessage updatePointsGoods(@RequestBody KanJiaActivityGoodsDTO kanJiaActivityGoodsDTO) { + public ResultMessage updatePointsGoods(@RequestBody KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO) { kanJiaActivityGoodsService.updateKanJiaActivityGoods(kanJiaActivityGoodsDTO); return ResultUtil.success(); } From 0f8a5aba053eda0866e1c6cd172e6b441027ff03 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Wed, 14 Jul 2021 08:47:13 +0800 Subject: [PATCH 04/13] =?UTF-8?q?1.=E5=AE=8C=E5=96=84=E7=A0=8D=E4=BB=B7?= =?UTF-8?q?=E5=95=86=E5=93=81=E5=8A=A0=E5=85=A5=E8=B4=AD=E7=89=A9=E8=BD=A6?= =?UTF-8?q?=E3=80=82=202.=E5=AE=8C=E5=96=84=E7=A0=8D=E4=BB=B7=E5=B8=AE?= =?UTF-8?q?=E7=A0=8D=203.=E5=AE=8C=E5=96=84=E7=A0=8D=E4=BB=B7=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E8=AE=A1=E7=AE=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lili/common/enums/ResultCode.java | 3 + .../order/cart/entity/enums/CartTypeEnum.java | 6 +- .../cart/render/impl/CheckDataRender.java | 32 +++-- .../cart/render/impl/SkuPromotionRender.java | 2 +- .../order/cart/service/CartServiceImpl.java | 117 ++++++++++++------ .../promotion/entity/dos/KanjiaActivity.java | 4 + .../entity/dto/KanJiaActivityLogQuery.java | 4 +- .../entity/enums/KanJiaStatusEnum.java | 17 ++- .../entity/vos/KanjiaActivityGoodsListVO.java | 4 +- .../vos/KanjiaActivitySearchParams.java | 4 +- .../KanjiaActivityLogServiceImpl.java | 4 +- .../KanjiaActivityServiceImpl.java | 115 +++++++++-------- .../PromotionGoodsServiceImpl.java | 13 +- 13 files changed, 204 insertions(+), 121 deletions(-) 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 e6d82ad5..5ac32ded 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -241,6 +241,7 @@ public enum ResultCode { PROMOTION_UPDATE_ERROR(40008,"当前活动已开始/结束,无法编辑!"), PROMOTION_ACTIVITY_GOODS_ERROR(40009,"当前活动已经开始无法添加商品"), PROMOTION_ACTIVITY_ERROR(40009,"当前促销活动不存在"), + PROMOTION_LOG_EXIST(40010,"活动已参加,已发重复参加"), /** * 优惠券 @@ -339,6 +340,8 @@ public enum ResultCode { KANJIA_ACTIVITY_NOT_FOUND_ERROR(48008, "砍价记录不存在"), KANJIA_ACTIVITY_LOG_MEMBER_ERROR(48009, "当前会员已经帮砍"), KANJIA_ACTIVITY_MEMBER_ERROR(48010, "当前会员已经发起此砍价商品活动"), + KANJIA_ACTIVITY_NOT_PASS_ERROR(48011, "当前砍价未满足条件,不能进行购买"), + KANJIA_NUM_BUY_ERROR(48012, "砍价商品购买数量不正确"), /** * 店铺 */ diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java index bdc11c9d..d1aee55a 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java @@ -27,6 +27,10 @@ public enum CartTypeEnum { /** * 虚拟商品 */ - VIRTUAL; + VIRTUAL, + /** + * 砍价商品 + */ + KANJIA; } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java index 47164879..618737eb 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java @@ -10,6 +10,7 @@ import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.order.cart.entity.dto.TradeDTO; +import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.CartVO; @@ -42,13 +43,15 @@ public class CheckDataRender implements CartRenderStep { @Override public void render(TradeDTO tradeDTO) { - //校验商品有效性 - checkData(tradeDTO); - //店铺分组数据初始化 - groupStore(tradeDTO); //预校验 preCalibration(tradeDTO); + //校验商品有效性 + checkData(tradeDTO); + + //店铺分组数据初始化 + groupStore(tradeDTO); + } /** @@ -125,15 +128,22 @@ public class CheckDataRender implements CartRenderStep { * @param tradeDTO */ private void preCalibration(TradeDTO tradeDTO) { - //拼团判定,不能参与自己创建的拼团 - if (tradeDTO.getParentOrderSn() != null) { - //订单接受 - cn.lili.modules.order.order.entity.dos.Order parentOrder = orderService.getBySn(tradeDTO.getParentOrderSn()); - //参与活动判定 - if (parentOrder.getMemberId().equals(UserContext.getCurrentUser().getId())) { - throw new ServiceException(ResultCode.PINTUAN_JOIN_ERROR); + + //拼团订单预校验 + if(tradeDTO.getCartTypeEnum().equals(CartTypeEnum.PINTUAN)){ + //拼团判定,不能参与自己创建的拼团 + if (tradeDTO.getParentOrderSn() != null) { + //订单接受 + cn.lili.modules.order.order.entity.dos.Order parentOrder = orderService.getBySn(tradeDTO.getParentOrderSn()); + //参与活动判定 + if (parentOrder.getMemberId().equals(UserContext.getCurrentUser().getId())) { + throw new ServiceException(ResultCode.PINTUAN_JOIN_ERROR); + } } + }else if(tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)){ + } + } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java index 45524d73..ab9bc9a0 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java @@ -70,7 +70,7 @@ public class SkuPromotionRender implements CartRenderStep { /** - * 渲染单品优惠 积分/拼团/秒杀 + * 渲染单品优惠 积分/拼团/秒杀/砍价 * * @param tradeDTO 购物车视图 */ diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index a3c1b50a..b1688352 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -23,16 +23,16 @@ import cn.lili.modules.order.cart.entity.vo.TradeParams; import cn.lili.modules.order.cart.render.TradeBuilder; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.vo.ReceiptVO; +import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum; +import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; -import cn.lili.modules.promotion.service.MemberAddressService; -import cn.lili.modules.promotion.service.MemberCouponService; -import cn.lili.modules.promotion.service.PintuanService; -import cn.lili.modules.promotion.service.PromotionGoodsService; +import cn.lili.modules.promotion.entity.vos.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.service.*; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsSearchService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -93,6 +93,11 @@ public class CartServiceImpl implements CartService { */ @Autowired private PintuanService pintuanService; + /** + * 砍价 + */ + @Autowired + private KanjiaActivityService kanjiaActivityService; /** * 交易 */ @@ -147,32 +152,26 @@ public class CartServiceImpl implements CartService { CartSkuVO cartSkuVO = new CartSkuVO(dataSku); cartSkuVO.setCartType(cartTypeEnum); promotionGoodsService.updatePromotion(cartSkuVO); - //再设置加入购物车的数量 - this.checkSetGoodsQuantity(cartSkuVO, skuId, num); - - //拼团判定 - checkPintuan(cartTypeEnum, cartSkuVO); - + //检测购物车数据 + checkCart(cartTypeEnum, cartSkuVO, skuId, num); //计算购物车小计 cartSkuVO.setSubTotal(CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); cartSkuVOS.add(cartSkuVO); } - tradeDTO.setCartTypeEnum(cartTypeEnum); //如购物车发生更改,则重置优惠券 tradeDTO.setStoreCoupons(null); tradeDTO.setPlatformCoupon(null); this.resetTradeDTO(tradeDTO); - } catch (ServiceException se) { - throw se; + } catch (ServiceException serviceException) { + throw serviceException; } catch (Exception e) { log.error("购物车渲染异常", e); throw new ServiceException(errorMessage); } } - @Override public void updateNum(String skuId, int num) { try { @@ -637,32 +636,80 @@ public class CartServiceImpl implements CartService { } /** - * 校验拼团信息 + * 检测购物车 * * @param cartTypeEnum 购物车枚举 - * @param cartSkuVO 购物车信息 + * @param cartSkuVO SKUVO + * @param skuId SkuId + * @param num 数量 */ - private void checkPintuan(CartTypeEnum cartTypeEnum, CartSkuVO cartSkuVO) { - - //拼团活动的话,需要对限购数量进行判定 + private void checkCart(CartTypeEnum cartTypeEnum, CartSkuVO cartSkuVO, String skuId, Integer num) { + //拼团判定 if (cartTypeEnum.equals(CartTypeEnum.PINTUAN)) { - //获取拼团信息 - List currentPromotion = cartSkuVO.getPromotions().stream().filter( - promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()))) - .collect(Collectors.toList()); - //拼团活动判定 - if (!currentPromotion.isEmpty()) { - //写入拼团信息 - cartSkuVO.setPintuanId(currentPromotion.get(0).getPromotionId()); - } else { - throw new ServiceException(ResultCode.CART_PINTUAN_NOT_EXIST_ERROR); - } + checkPintuan(cartSkuVO); + //砍价判定 + } else if (cartTypeEnum.equals(CartTypeEnum.KANJIA)) { + checkKanjia(cartSkuVO); + //检测购物车的数量 + } else { + this.checkSetGoodsQuantity(cartSkuVO, skuId, num); + } - Pintuan pintuan = pintuanService.getPintuanById(cartSkuVO.getPintuanId()); - Integer limitNum = pintuan.getLimitNum(); - if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { - throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR); - } + } + + /** + * 校验拼团信息 + * + * @param cartSkuVO 购物车信息 + */ + private void checkPintuan(CartSkuVO cartSkuVO) { + + //拼团活动,需要对限购数量进行判定 + //获取拼团信息 + List currentPromotion = cartSkuVO.getPromotions().stream().filter( + promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()))) + .collect(Collectors.toList()); + //拼团活动判定 + if (!currentPromotion.isEmpty()) { + //写入拼团信息 + cartSkuVO.setPintuanId(currentPromotion.get(0).getPromotionId()); + } else { + throw new ServiceException(ResultCode.CART_PINTUAN_NOT_EXIST_ERROR); + } + //检测拼团限购数量 + Pintuan pintuan = pintuanService.getPintuanById(cartSkuVO.getPintuanId()); + Integer limitNum = pintuan.getLimitNum(); + if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { + throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR); + } + } + + /** + * 校验砍价信息 + * + * @param cartSkuVO 购物车信息 + */ + private void checkKanjia(CartSkuVO cartSkuVO) { + + List currentPromotion = cartSkuVO.getPromotions().stream().filter( + promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()))) + .collect(Collectors.toList()); + + //校验砍价活动是否满足条件 + KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams(); + kanjiaActivitySearchParams.setKanjiaActivityGoodsId(currentPromotion.get(0).getSkuId()); + kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); + KanjiaActivity kanjiaActivity = kanjiaActivityService.getKanjiaActivity(kanjiaActivitySearchParams); + + //判断发起砍价活动 + if (kanjiaActivity == null) { + throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR); + //判断砍价活动是否已满足条件 + } else if (!KanJiaStatusEnum.PASS.name().equals(kanjiaActivity.getStatus())) { + throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR); + //判断砍价商品数量 + } else if (cartSkuVO.getNum() > 1) { + throw new ServiceException(ResultCode.KANJIA_NUM_BUY_ERROR); } } } 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 index e355af54..ecd4d9e5 100644 --- 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 @@ -1,6 +1,7 @@ package cn.lili.modules.promotion.entity.dos; import cn.lili.base.BaseEntity; +import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -46,6 +47,9 @@ public class KanjiaActivity extends BaseEntity { @ApiModelProperty(value = "缩略图") private String thumbnail; + /** + * @see KanJiaStatusEnum + */ @ApiModelProperty(value = "我的砍价状态") private String status; 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 index afeede37..2e4dc1fa 100644 --- 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 @@ -30,10 +30,10 @@ public class KanJiaActivityLogQuery { QueryWrapper queryWrapper = new QueryWrapper<>(); if (CharSequenceUtil.isNotEmpty(kanJiaActivityId)) { - queryWrapper.like("kan_jia_activity_id", kanJiaActivityId); + queryWrapper.like("kanjia_activity_id", kanJiaActivityId); } if (memberId != null) { - queryWrapper.eq("kan_jia_member_id", memberId); + queryWrapper.eq("kanjia_member_id", memberId); } queryWrapper.eq("delete_flag", false); queryWrapper.orderByDesc("create_time"); 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 index 322d9ad2..0d5641bd 100644 --- 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 @@ -8,7 +8,22 @@ package cn.lili.modules.promotion.entity.enums; */ public enum KanJiaStatusEnum { - START("开始"), FAIL("失败"), SUCCESS("成功"); + /** + * 已开始 + */ + START("开始"), + /** + * 砍价失败 + */ + FAIL("失败"), + /** + * 砍价成功 + */ + SUCCESS("成功"), + /** + * 砍价活动结束 + */ + END("已结束"); private final String description; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsListVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsListVO.java index 29c5ba49..5ae391d3 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsListVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsListVO.java @@ -12,8 +12,8 @@ import lombok.Data; @Data public class KanjiaActivityGoodsListVO { - @ApiModelProperty(value = "货品id") - private String skuId; + @ApiModelProperty(value = "砍价活动商品id") + private String id; @ApiModelProperty(value = "货品名称") private String goodsName; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivitySearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivitySearchParams.java index d60513ee..de790065 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivitySearchParams.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivitySearchParams.java @@ -34,9 +34,9 @@ public class KanjiaActivitySearchParams { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq(StrUtil.isNotEmpty(id), "id", id); queryWrapper.eq(StrUtil.isNotEmpty(kanjiaActivityId), "id", kanjiaActivityId); - queryWrapper.eq(StrUtil.isNotEmpty(kanjiaActivityGoodsId), "kanJia_activity_goods_id", kanjiaActivityGoodsId); + queryWrapper.eq(StrUtil.isNotEmpty(kanjiaActivityGoodsId), "kanjia_activity_goods_id", kanjiaActivityGoodsId); queryWrapper.eq(StrUtil.isNotEmpty(memberId), "member_id", memberId); queryWrapper.eq(StrUtil.isNotEmpty(status), "status", status); - return wrapper(); + return queryWrapper; } } 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 index dada60d4..983be0f4 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityLogServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityLogServiceImpl.java @@ -51,8 +51,8 @@ public class KanjiaActivityLogServiceImpl extends ServiceImpl 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()); + queryWrapper.eq(kanjiaActivityDTO.getKanjiaMemberId() != null, "kanjia_member_id", kanjiaActivityDTO.getKanjiaMemberId()); + queryWrapper.eq(kanjiaActivityDTO.getKanjiaActivityId() != null, "kanjia_activity_id", kanjiaActivityDTO.getKanjiaActivityId()); Integer count = this.baseMapper.selectCount(queryWrapper); if (count > 0) { throw new ServiceException(ResultCode.KANJIA_ACTIVITY_LOG_MEMBER_ERROR); 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 index 268d4320..6b087c15 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java @@ -1,6 +1,8 @@ package cn.lili.modules.promotion.serviceimpl; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.RandomUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.context.UserContext; @@ -23,6 +25,7 @@ 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.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -30,6 +33,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; + /** * 砍价活动参与记录业务层实现 @@ -65,7 +70,7 @@ public class KanjiaActivityServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("kan_jia_activity_goods_id", kanJiaActivityGoods.getId()); + queryWrapper.eq("kanjia_activity_goods_id", kanJiaActivityGoods.getId()); queryWrapper.eq("member_id", member.getId()); if (this.count(queryWrapper) > 0) { throw new ServiceException(ResultCode.KANJIA_ACTIVITY_MEMBER_ERROR); @@ -81,27 +86,14 @@ public class KanjiaActivityServiceImpl extends ServiceImpl() + .eq(KanjiaActivityLog::getKanjiaActivityId, kanjiaActivityId) + .eq(KanjiaActivityLog::getKanjiaMemberId, member.getId()); + if (kanjiaActivityLogService.count(lambdaQueryWrapper) > 0) { + throw new ServiceException(ResultCode.PROMOTION_LOG_EXIST); + } + + //添加砍价记录 + 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)); + kanjiaActivityDTO.setKanjiaMemberId(member.getId()); + kanjiaActivityDTO.setKanjiaMemberName(member.getUsername()); + kanjiaActivityDTO.setKanjiaMemberFace(member.getFace()); + KanjiaActivityLog kanjiaActivityLog = kanjiaActivityLogService.addKanJiaActivityLog(kanjiaActivityDTO); + + //如果可砍金额为0的话说明活动成功了 + if (Double.doubleToLongBits(kanjiaActivityDTO.getSurplusPrice()) == Double.doubleToLongBits(0D)) { + kanjiaActivity.setStatus(KanJiaStatusEnum.SUCCESS.name()); + } + kanjiaActivity.setSurplusPrice(kanjiaActivityLog.getSurplusPrice()); + this.updateById(kanjiaActivity); + return kanjiaActivityLog; } + /** * 随机获取砍一刀价格 * @@ -153,24 +158,16 @@ public class KanjiaActivityServiceImpl extends ServiceImpl 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; + + //获取随机砍价金额 + BigDecimal bigDecimal = RandomUtil.randomBigDecimal(Convert.toBigDecimal(kanjiaActivityGoods.getHighestPrice()), + Convert.toBigDecimal(kanjiaActivityGoods.getLowestPrice())); + return Convert.toDouble(bigDecimal, 0.0); } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java index 470dffb8..48d4236a 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionGoodsServiceImpl.java @@ -17,7 +17,6 @@ import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; -import cn.lili.modules.promotion.entity.dos.PointsGoods; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dos.SeckillApply; import cn.lili.modules.promotion.entity.dto.BasePromotion; @@ -123,10 +122,14 @@ public class PromotionGoodsServiceImpl extends ServiceImpl Date: Sat, 17 Jul 2021 14:02:34 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E7=A0=8D=E4=BB=B7=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E5=95=86=E5=93=81=E8=B4=AD=E4=B9=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KanjiaGoodsActivityBuyerController.java | 42 +++---- .../order/cart/service/CartServiceImpl.java | 4 +- .../promotion/entity/dos/FullDiscount.java | 4 + .../promotion/entity/dos/KanjiaActivity.java | 9 +- .../entity/dos/KanjiaActivityGoods.java | 32 +---- .../entity/dto/KanJiaActivityLogQuery.java | 5 - .../entity/dto/PromotionPriceParamDTO.java | 6 + .../entity/enums/KanJiaStatusEnum.java | 1 + .../entity/enums/PromotionTypeEnum.java | 4 +- .../KanjiaActivityGoodsListVO.java | 2 +- .../KanjiaActivityGoodsParams.java | 2 +- .../{ => kanjia}/KanjiaActivityGoodsVO.java | 2 +- .../KanjiaActivitySearchParams.java | 2 +- .../entity/vos/kanjia/KanjiaActivityVO.java | 27 ++++ .../mapper/KanJiaActivityGoodsMapper.java | 2 +- .../service/KanjiaActivityGoodsService.java | 6 +- .../service/KanjiaActivityService.java | 13 +- .../KanjiaActivityGoodsServiceImpl.java | 12 +- .../KanjiaActivityLogServiceImpl.java | 8 +- .../KanjiaActivityServiceImpl.java | 102 +++++++++------ .../PromotionGoodsServiceImpl.java | 7 +- .../PromotionPriceServiceImpl.java | 118 +++++++++--------- .../serviceimpl/PromotionServiceImpl.java | 6 +- .../passport/AdminUserManagerController.java | 12 +- .../KanJiaActivityGoodsManagerController.java | 2 +- 25 files changed, 243 insertions(+), 187 deletions(-) rename framework/src/main/java/cn/lili/modules/promotion/entity/vos/{ => kanjia}/KanjiaActivityGoodsListVO.java (91%) rename framework/src/main/java/cn/lili/modules/promotion/entity/vos/{ => kanjia}/KanjiaActivityGoodsParams.java (98%) rename framework/src/main/java/cn/lili/modules/promotion/entity/vos/{ => kanjia}/KanjiaActivityGoodsVO.java (90%) rename framework/src/main/java/cn/lili/modules/promotion/entity/vos/{ => kanjia}/KanjiaActivitySearchParams.java (96%) create mode 100644 framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityVO.java 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 index 7861251b..80b4ea66 100644 --- a/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java @@ -10,10 +10,7 @@ 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.entity.enums.PromotionStatusEnum; -import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsListVO; -import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsParams; -import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsVO; -import cn.lili.modules.promotion.entity.vos.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.vos.kanjia.*; import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; import cn.lili.modules.promotion.service.KanjiaActivityLogService; import cn.lili.modules.promotion.service.KanjiaActivityService; @@ -53,10 +50,10 @@ public class KanjiaGoodsActivityBuyerController { @GetMapping @ApiOperation(value = "分页获取砍价商品") - public ResultMessage> kanJiaActivityGoodsPage(KanjiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO page) { + public ResultMessage> kanJiaActivityGoodsPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO page) { // 会员端查询到的肯定是已经开始的活动商品 - kanJiaActivityGoodsParams.setPromotionStatus(PromotionStatusEnum.START.name()); - return ResultUtil.data(kanJiaActivityGoodsService.kanJiaGoodsVOPage(kanJiaActivityGoodsParams, page)); + kanjiaActivityGoodsParams.setPromotionStatus(PromotionStatusEnum.START.name()); + return ResultUtil.data(kanJiaActivityGoodsService.kanJiaGoodsVOPage(kanjiaActivityGoodsParams, page)); } @GetMapping("/{id}") @@ -69,43 +66,42 @@ public class KanjiaGoodsActivityBuyerController { @GetMapping("/getKanjiaActivity/logs") @ApiOperation(value = "分页获取砍价活动-帮砍记录") public ResultMessage> getPointsGoodsPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO page) { - // 会员端查询到的肯定是已经开始的活动商品 - kanJiaActivityLogQuery.setMemberId(UserContext.getCurrentUser().getId()); return ResultUtil.data(kanJiaActivityLogService.getForPage(kanJiaActivityLogQuery, page)); } @PostMapping("/getKanjiaActivity") @ApiOperation(value = "获取砍价活动") - public ResultMessage getKanJiaActivity(KanjiaActivitySearchParams kanJiaActivitySearchParams) { + public ResultMessage getKanJiaActivity(KanjiaActivitySearchParams kanjiaActivitySearchParams) { //如果是非被邀请关系则填写会员ID - if (StrUtil.isEmpty(kanJiaActivitySearchParams.getKanjiaActivityId())) { - kanJiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); + if (StrUtil.isEmpty(kanjiaActivitySearchParams.getKanjiaActivityId())) { + kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); } - return ResultUtil.data(kanJiaActivityService.getKanjiaActivity(kanJiaActivitySearchParams)); + return ResultUtil.data(kanJiaActivityService.getKanjiaActivityVO(kanjiaActivitySearchParams)); } @PostMapping @ApiImplicitParam(name = "id", value = "砍价活动商品ID", required = true, paramType = "path") @ApiOperation(value = "发起砍价活动") public ResultMessage launchKanJiaActivity(String id) { - KanjiaActivityLog kanJiaActivityLog = kanJiaActivityService.add(id); - return ResultUtil.data(kanJiaActivityLog); + KanjiaActivityLog kanjiaActivityLog = kanJiaActivityService.add(id); + return ResultUtil.data(kanjiaActivityLog); } - @PostMapping("/help") + @PostMapping("/help/{kanjiaActivityId}") + @ApiImplicitParam(name = "kanJiaActivityId", value = "砍价活动ID", required = true, paramType = "path") @ApiOperation(value = "帮砍一刀") - public ResultMessage helpKanJia(String kanJiaActivityId) { - KanjiaActivityLog kanJiaActivityLog = kanJiaActivityService.helpKanJia(kanJiaActivityId); - return ResultUtil.data(kanJiaActivityLog); + public ResultMessage helpKanJia(@PathVariable String kanjiaActivityId) { + KanjiaActivityLog kanjiaActivityLog = kanJiaActivityService.helpKanJia(kanjiaActivityId); + return ResultUtil.data(kanjiaActivityLog); } @GetMapping("/kanjiaActivity/mine/") @ApiOperation(value = "分页获取已参与的砍价活动") - public ResultMessage> getPointsGoodsPage(KanjiaActivityQuery kanJiaActivityQuery, PageVO page) { + public ResultMessage> getPointsGoodsPage(KanjiaActivityQuery kanjiaActivityQuery, PageVO page) { // 会员端查询到的肯定是已经开始的活动商品 - kanJiaActivityQuery.setMemberId(UserContext.getCurrentUser().getId()); - IPage kanJiaActivityIPage = kanJiaActivityService.getForPage(kanJiaActivityQuery, page); - return ResultUtil.data(kanJiaActivityIPage); + kanjiaActivityQuery.setMemberId(UserContext.getCurrentUser().getId()); + IPage kanjiaActivity = kanJiaActivityService.getForPage(kanjiaActivityQuery, page); + return ResultUtil.data(kanjiaActivity); } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index b1688352..0616b9ba 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -31,7 +31,7 @@ import cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; -import cn.lili.modules.promotion.entity.vos.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; import cn.lili.modules.promotion.service.*; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsSearchService; @@ -705,7 +705,7 @@ public class CartServiceImpl implements CartService { if (kanjiaActivity == null) { throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR); //判断砍价活动是否已满足条件 - } else if (!KanJiaStatusEnum.PASS.name().equals(kanjiaActivity.getStatus())) { + } else if (!KanJiaStatusEnum.SUCCESS.name().equals(kanjiaActivity.getStatus())) { throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR); //判断砍价商品数量 } else if (cartSkuVO.getNum() > 1) { diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java index d78c7a7c..1a6d6e5b 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java @@ -27,6 +27,10 @@ public class FullDiscount extends BasePromotion { private static final long serialVersionUID = 430433787214894166L; + @NotEmpty(message = "活动名称不能为空") + @ApiModelProperty(value = "活动名称", required = true) + private String promotionName; + @NotNull(message = "请填写优惠门槛") @DecimalMax(value = "99999999.00", message = "优惠券门槛金额超出限制") @ApiModelProperty(value = "优惠门槛金额", required = true) 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 index ecd4d9e5..f293fa6e 100644 --- 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 @@ -29,15 +29,18 @@ public class KanjiaActivity extends BaseEntity { @ApiModelProperty(value = "砍价商品id") private String kanjiaActivityGoodsId; - @ApiModelProperty(value = "参与砍价活动会员id") + @ApiModelProperty(value = "发起砍价活动会员id") private String memberId; - @ApiModelProperty(value = "参与砍价活动会员名称") + @ApiModelProperty(value = "发起砍价活动会员名称") private String memberName; @ApiModelProperty(value = "剩余购买金额") private Double surplusPrice; + @ApiModelProperty(value = "砍价最低购买金额") + private Double purchasePrice; + @ApiModelProperty(value = "砍价商品skuId") private String skuId; @@ -50,7 +53,7 @@ public class KanjiaActivity extends BaseEntity { /** * @see KanJiaStatusEnum */ - @ApiModelProperty(value = "我的砍价状态") + @ApiModelProperty(value = "砍价活动状态") private String status; 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 ce8c939b..5244441c 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,19 +1,14 @@ package cn.lili.modules.promotion.entity.dos; -import cn.lili.base.BaseEntity; -import cn.lili.modules.promotion.entity.enums.PromotionStatusEnum; +import cn.lili.modules.promotion.entity.dto.BasePromotion; 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; /** * 砍价活动商品实体类 @@ -26,7 +21,7 @@ import java.util.Date; @Table(name = "li_kanjia_activity_goods") @TableName("li_kanjia_activity_goods") @ApiModel(value = "砍价活动商品对象") -public class KanjiaActivityGoods extends BaseEntity { +public class KanjiaActivityGoods extends BasePromotion { private static final long serialVersionUID = 6694714877345423488L; @@ -34,6 +29,9 @@ public class KanjiaActivityGoods extends BaseEntity { @NotEmpty(message = "结算价格不能为空") private Double settlementPrice; + @ApiModelProperty(value = "商品原价") + private Double originalPrice; + @ApiModelProperty(value = "最低购买金额") @NotEmpty(message = "最低购买金额不能为空") private Double purchasePrice; @@ -59,24 +57,4 @@ public class KanjiaActivityGoods extends BaseEntity { @ApiModelProperty(value = "每人最高砍价金额") @NotEmpty(message = "每人最高砍价金额不能为空") private Double highestPrice; - - /** - * @see PromotionStatusEnum - */ - @ApiModelProperty(value = "活动状态") - @NotNull(message = "活动状态不能为空") - private String promotionStatus; - - @Min(message = "活动开始时间不能为空", value = 0) - @ApiModelProperty(value = "活动开始时间", required = true) - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - private Date startTime; - - @Min(message = "活动结束时间不能为空", value = 0) - @ApiModelProperty(value = "活动结束时间", required = true) - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - private Date endTime; - - - } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityLogQuery.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/KanJiaActivityLogQuery.java index 2e4dc1fa..0639bc89 100644 --- 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 @@ -23,8 +23,6 @@ public class KanJiaActivityLogQuery { @ApiModelProperty(value = "砍价发起活动id") private String kanJiaActivityId; - @ApiModelProperty(value = "会员id", hidden = true) - private String memberId; public QueryWrapper wrapper() { QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -32,9 +30,6 @@ public class KanJiaActivityLogQuery { if (CharSequenceUtil.isNotEmpty(kanJiaActivityId)) { queryWrapper.like("kanjia_activity_id", kanJiaActivityId); } - if (memberId != null) { - queryWrapper.eq("kanjia_member_id", memberId); - } queryWrapper.eq("delete_flag", false); queryWrapper.orderByDesc("create_time"); return queryWrapper; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/PromotionPriceParamDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/PromotionPriceParamDTO.java index 42019a79..2d4c3f00 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/PromotionPriceParamDTO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/PromotionPriceParamDTO.java @@ -20,4 +20,10 @@ public class PromotionPriceParamDTO { @ApiModelProperty(value = "拼团id 如果是拼团购买 此值为拼团活动id,当pintuanId为空,则表示普通购买(或者拼团商品,单独购买)") private String pintuanId; + + @ApiModelProperty(value = "砍价ID") + private String kanjiaId; + + @ApiModelProperty(value = "积分ID") + private String pointsId; } 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 index 0d5641bd..54f7743e 100644 --- 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 @@ -22,6 +22,7 @@ public enum KanJiaStatusEnum { SUCCESS("成功"), /** * 砍价活动结束 + * 已购买、超时未购买都是这个状态 */ END("已结束"); diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java index b2ce2dd0..67a99a33 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/enums/PromotionTypeEnum.java @@ -16,14 +16,14 @@ public enum PromotionTypeEnum { COUPON("优惠券"), FULL_DISCOUNT("满减"), POINTS_GOODS("积分商品"), - KAN_JIA("砍价"), + KANJIA("砍价"), COUPON_ACTIVITY("优惠券活动") ; /** * 拼团秒杀拥有独立库存,如果其他促销也有独立库存涉及库存扣减的,请添加在下方 */ - static PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL, KAN_JIA}; + static PromotionTypeEnum[] haveStockPromotion = new PromotionTypeEnum[]{PINTUAN, SECKILL, KANJIA}; private final String description; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsListVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsListVO.java similarity index 91% rename from framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsListVO.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsListVO.java index 5ae391d3..5c7024e2 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsListVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsListVO.java @@ -1,4 +1,4 @@ -package cn.lili.modules.promotion.entity.vos; +package cn.lili.modules.promotion.entity.vos.kanjia; import io.swagger.annotations.ApiModelProperty; import lombok.Data; 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/kanjia/KanjiaActivityGoodsParams.java similarity index 98% rename from framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsParams.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsParams.java index f5bab12a..82900494 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/kanjia/KanjiaActivityGoodsParams.java @@ -1,4 +1,4 @@ -package cn.lili.modules.promotion.entity.vos; +package cn.lili.modules.promotion.entity.vos.kanjia; import cn.hutool.core.text.CharSequenceUtil; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsVO.java similarity index 90% rename from framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsVO.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsVO.java index 0ca5ba90..f5ae1f66 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivityGoodsVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityGoodsVO.java @@ -1,4 +1,4 @@ -package cn.lili.modules.promotion.entity.vos; +package cn.lili.modules.promotion.entity.vos.kanjia; import cn.lili.modules.goods.entity.dos.GoodsSku; import io.swagger.annotations.ApiModelProperty; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivitySearchParams.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivitySearchParams.java similarity index 96% rename from framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivitySearchParams.java rename to framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivitySearchParams.java index de790065..0b2bceb2 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/KanjiaActivitySearchParams.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivitySearchParams.java @@ -1,4 +1,4 @@ -package cn.lili.modules.promotion.entity.vos; +package cn.lili.modules.promotion.entity.vos.kanjia; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityVO.java new file mode 100644 index 00000000..3119cba8 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityVO.java @@ -0,0 +1,27 @@ +package cn.lili.modules.promotion.entity.vos.kanjia; + +import cn.lili.modules.promotion.entity.dos.KanjiaActivity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 砍价活动参与实体类 + * + * @author qiuqiu + * @date 2020-7-1 10:44 上午 + */ +@Data +@ApiModel(value = "砍价活动VO") +public class KanjiaActivityVO extends KanjiaActivity { + + @ApiModelProperty(value = "是否可以砍价") + private Boolean help = false; + + @ApiModelProperty(value = "是否已发起砍价") + private Boolean launch = false; + + @ApiModelProperty(value = "是否可购买") + private Boolean pass = false; + +} \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java index 847a4d4c..3baeb5f7 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java +++ b/framework/src/main/java/cn/lili/modules/promotion/mapper/KanJiaActivityGoodsMapper.java @@ -1,7 +1,7 @@ package cn.lili.modules.promotion.mapper; import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; -import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsListVO; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsListVO; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; 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 d6f489a4..13a21aad 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 @@ -5,9 +5,9 @@ import cn.lili.common.vo.PageVO; import cn.lili.modules.promotion.entity.dos.KanjiaActivityGoods; import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO; import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsOperationDTO; -import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsListVO; -import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsParams; -import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsVO; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsListVO; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsParams; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; 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 index 26dd8259..e2a5e2e4 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/KanjiaActivityService.java @@ -5,7 +5,8 @@ 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.KanjiaActivityQuery; -import cn.lili.modules.promotion.entity.vos.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -21,13 +22,21 @@ public interface KanjiaActivityService extends IService { /** * 获取砍价活动 * + * @param kanJiaActivitySearchParams 砍价活动搜索参数 + * @return 砍价活动 + */ + KanjiaActivity getKanjiaActivity(KanjiaActivitySearchParams kanJiaActivitySearchParams); + + /** + * 获取砍价活动 + *

* 有值说明是已参加的砍价活动 * 没有值说明是未参加的砍价活动 * * @param kanJiaActivitySearchParams 砍价活动搜索参数 * @return 砍价活动 */ - KanjiaActivity getKanjiaActivity(KanjiaActivitySearchParams kanJiaActivitySearchParams); + KanjiaActivityVO getKanjiaActivityVO(KanjiaActivitySearchParams kanJiaActivitySearchParams); /** * 发起人发起砍价活动 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 2b00287d..6cb48438 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 @@ -22,9 +22,9 @@ 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.KanjiaActivityGoodsListVO; -import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsParams; -import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsVO; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsListVO; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsParams; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsVO; import cn.lili.modules.promotion.mapper.KanJiaActivityGoodsMapper; import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; import cn.lili.modules.promotion.tools.PromotionTools; @@ -110,7 +110,7 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq(kanjiaActivityDTO.getKanjiaMemberId() != null, "kanjia_member_id", kanjiaActivityDTO.getKanjiaMemberId()); - queryWrapper.eq(kanjiaActivityDTO.getKanjiaActivityId() != null, "kanjia_activity_id", kanjiaActivityDTO.getKanjiaActivityId()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(kanjiaActivityDTO.getKanjiaActivityId() != null, KanjiaActivityLog::getKanjiaActivityId, kanjiaActivityDTO.getKanjiaActivityId()); + queryWrapper.eq( KanjiaActivityLog::getKanjiaMemberId, UserContext.getCurrentUser().getId()); Integer count = this.baseMapper.selectCount(queryWrapper); if (count > 0) { throw new ServiceException(ResultCode.KANJIA_ACTIVITY_LOG_MEMBER_ERROR); 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 index 6b087c15..e23145ba 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.RandomUtil; 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.CurrencyUtil; import cn.lili.common.utils.PageUtil; import cn.lili.common.vo.PageVO; @@ -20,7 +21,8 @@ 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.entity.vos.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityVO; import cn.lili.modules.promotion.mapper.KanJiaActivityMapper; import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; import cn.lili.modules.promotion.service.KanjiaActivityLogService; @@ -60,44 +62,73 @@ public class KanjiaActivityServiceImpl extends ServiceImpl() + .eq(KanjiaActivityLog::getKanjiaActivityId, kanjiaActivity.getId()) + .eq(KanjiaActivityLog::getKanjiaMemberId, UserContext.getCurrentUser().getId())); + if (kanjiaActivityLog == null) { + kanjiaActivityVO.setHelp(true); + } + //判断活动已通过并且是当前用户发起的砍价则可以进行购买 + if (kanjiaActivity.getStatus().equals(KanJiaStatusEnum.SUCCESS.name()) && + kanjiaActivity.getMemberId().equals(UserContext.getCurrentUser().getId())) { + kanjiaActivityVO.setPass(true); + } + } + return kanjiaActivityVO; + } + @Override public KanjiaActivityLog add(String id) { //根据skuId查询当前sku是否参与活动并且是在活动进行中 KanjiaActivityGoods kanJiaActivityGoods = kanjiaActivityGoodsService.getById(id); //只有砍价商品存在且已经开始的活动才可以发起砍价 - if (kanJiaActivityGoods != null && kanJiaActivityGoods.getPromotionStatus().equals(PromotionStatusEnum.START.name())) { - //获取会员信息 - Member member = memberService.getById(UserContext.getCurrentUser().getId()); - //校验此活动是否已经发起过 - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("kanjia_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(kanJiaActivityGoods.getSkuId()); - if (goodsSku != null && member != null) { - kanJiaActivity.setSkuId(kanJiaActivityGoods.getSkuId()); - 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()); - //剩余砍价金额 开始 是商品金额; - kanJiaActivity.setSurplusPrice(goodsSku.getPrice()); - //保存我的砍价活动 - boolean result = this.save(kanJiaActivity); - //因为发起砍价就是自己给自己砍一刀,所以要添加砍价记录信息 - if (result) { - this.helpKanJia(kanJiaActivity.getId()); - } - } - throw new ServiceException(ResultCode.GOODS_NOT_EXIST); + if (kanJiaActivityGoods == null || !kanJiaActivityGoods.getPromotionStatus().equals(PromotionStatusEnum.START.name())) { + throw new ServiceException(ResultCode.PROMOTION_STATUS_END); } - throw new ServiceException(ResultCode.PROMOTION_STATUS_END); + KanjiaActivityLog kanjiaActivityLog = new KanjiaActivityLog(); + //获取会员信息 + Member member = memberService.getById(UserContext.getCurrentUser().getId()); + //校验此活动是否已经发起过 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("kanjia_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(kanJiaActivityGoods.getSkuId()); + if (goodsSku != null && member != null) { + kanJiaActivity.setSkuId(kanJiaActivityGoods.getSkuId()); + 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()); + //剩余砍价金额 开始 是商品金额; + kanJiaActivity.setSurplusPrice(goodsSku.getPrice()); + //砍价最低购买金额 + kanJiaActivity.setPurchasePrice(kanJiaActivityGoods.getPurchasePrice()); + //保存我的砍价活动 + boolean result = this.save(kanJiaActivity); + + //因为发起砍价就是自己给自己砍一刀,所以要添加砍价记录信息 + if (result) { + kanjiaActivityLog = this.helpKanJia(kanJiaActivity.getId()); + } + } + return kanjiaActivityLog; } @@ -165,8 +196,9 @@ public class KanjiaActivityServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PromotionGoods::getSkuId, cartSkuVO.getGoodsSku().getId()).eq(PromotionGoods::getPromotionStatus, PromotionStatusEnum.START.name()); - queryWrapper.le(PromotionGoods::getStartTime, date); + queryWrapper.eq(PromotionGoods::getSkuId, cartSkuVO.getGoodsSku().getId()) + .eq(PromotionGoods::getPromotionStatus, PromotionStatusEnum.START.name()) + .le(PromotionGoods::getStartTime, date); //获取有效的促销活动 List promotionGoods = this.list(queryWrapper); //同步查询缓存中的促销活动商品的库存 @@ -171,7 +172,7 @@ public class PromotionGoodsServiceImpl extends ServiceImpl couponVOS = mongoTemplate.find(query, CouponVO.class); for (CouponVO couponVO : couponVOS) { boolean aLLScopeType = (couponVO.getPromotionGoodsList() == null diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java index d3d06fa8..f747e050 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java @@ -53,35 +53,16 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { @Override public PromotionPriceDTO calculationPromotionPrice(List tradeSkuList, List memberCouponList) { - PromotionPriceDTO promotionPrice = new PromotionPriceDTO(); - if (!tradeSkuList.isEmpty()) { - //拆分出SkuId列表 - List skuIds = tradeSkuList.parallelStream().map(PromotionPriceParamDTO::getSkuId).collect(Collectors.toList()); - //参与计算的ES商品SKU及其促销信息列表 - List esGoodsSkus = goodsSearchService.getEsGoodsBySkuIds(skuIds); - //参与计算的缓存中的商品SKU列表 - List goodsSkus = goodsSkuService.getGoodsSkuByIdFromCache(skuIds); - //计算价格 - promotionPrice = this.calculationPromotionPrice(tradeSkuList, memberCouponList, esGoodsSkus, goodsSkus); - } - return promotionPrice; - } - /** - * 促销计算 - * - * @param tradeSkuList 促销计算参数列表 - * @param memberCouponList 参与促销计算的优惠券列表 - * @param esGoodsSkus 参与计算的ES商品SKU及其促销信息列表 - * @param goodsSkus 参与计算的缓存中的商品SKU列表 - * @return 促销计算结果 - */ - private PromotionPriceDTO calculationPromotionPrice(List tradeSkuList, List memberCouponList, List esGoodsSkus, List goodsSkus) { PromotionPriceDTO promotionPrice = new PromotionPriceDTO(); - + //拆分出SkuId列表 + List skuIds = tradeSkuList.parallelStream().map(PromotionPriceParamDTO::getSkuId).collect(Collectors.toList()); + //参与计算的ES商品SKU及其促销信息列表 + List esGoodsSkus = goodsSearchService.getEsGoodsBySkuIds(skuIds); + //参与计算的缓存中的商品SKU列表 + List goodsSkus = goodsSkuService.getGoodsSkuByIdFromCache(skuIds); //单品商品SKU促销计算结果列表 List priceDTOList = this.packageGoodsSkuPromotionPrice(tradeSkuList, esGoodsSkus, goodsSkus); - //将使用的优惠券根据店铺分类 Map> couponCollect = memberCouponList.parallelStream().collect(Collectors.groupingBy(MemberCoupon::getStoreId)); @@ -150,7 +131,6 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { return promotionPrice; } - /** * 单品SKU的促销计算 * @@ -166,16 +146,14 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { if (!collect.isEmpty()) { EsGoodsIndex esGoodsIndex = collect.get(0); //找出当前商品相应的结算参数 - PromotionPriceParamDTO tradeSku = tradeSkuList.parallelStream().filter(i -> i.getSkuId().equals(skus.getId())).findFirst().orElse(new PromotionPriceParamDTO()); - GoodsSkuPromotionPriceDTO goodsSkuPromotionPrice = new GoodsSkuPromotionPriceDTO(skus, tradeSku.getNum()); + PromotionPriceParamDTO promotionPriceParamDTO = tradeSkuList.parallelStream().filter(i -> i.getSkuId().equals(skus.getId())).findFirst().orElse(new PromotionPriceParamDTO()); + GoodsSkuPromotionPriceDTO goodsSkuPromotionPrice = new GoodsSkuPromotionPriceDTO(skus, promotionPriceParamDTO.getNum()); //商品原价总价 = 商品原价 * 数量 - goodsSkuPromotionPrice.setTotalOriginalPrice(CurrencyUtil.mul(goodsSkuPromotionPrice.getOriginalPrice(), tradeSku.getNum())); + goodsSkuPromotionPrice.setTotalOriginalPrice(CurrencyUtil.mul(goodsSkuPromotionPrice.getOriginalPrice(), promotionPriceParamDTO.getNum())); //获取当前商品所有参加的促销活动 Map promotionMap = esGoodsIndex.getPromotionMap(); - //是否计算拼团促销 - String pintuanId = tradeSku.getPintuanId() != null ? tradeSku.getPintuanId() : null; //如果商品促销列表存在促销活动 - this.calculationPromotionMap(promotionMap, goodsSkuPromotionPrice, esGoodsIndex, pintuanId); + this.calculationPromotionMap(promotionMap, goodsSkuPromotionPrice, esGoodsIndex, promotionPriceParamDTO); goodsSkuPromotionPrice.setTotalOriginalPrice(CurrencyUtil.mul(goodsSkuPromotionPrice.getOriginalPrice(), goodsSkuPromotionPrice.getNumber())); goodsSkuPromotionPrice.setTotalPoints(CurrencyUtil.mul(goodsSkuPromotionPrice.getPoints(), goodsSkuPromotionPrice.getNumber())); @@ -188,28 +166,54 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { } /** - * 促销计算(秒杀活动,拼团) + * 促销计算(秒杀活动、拼团、满优惠活动、砍价) * * @param promotionMap 当前商品所有参加的促销活动 * @param goodsSkuPromotionPrice 商品SKU促销计算信息 * @param esGoodsIndex ES商品信息 - * @param pintuanId 拼团id,标示是否计算拼团活动 + * @param promotionPriceParamDTO 拼团id,标示是否计算拼团活动 */ - private void calculationPromotionMap(Map promotionMap, GoodsSkuPromotionPriceDTO goodsSkuPromotionPrice, EsGoodsIndex esGoodsIndex, String pintuanId) { - if (promotionMap != null && !promotionMap.isEmpty()) { - //检查当前商品是否存在秒杀活动活动 - Optional existSeckill = promotionMap.keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.SECKILL.name())).findFirst(); - if (existSeckill.isPresent()) { - Seckill seckill = (Seckill) promotionMap.get(existSeckill.get()); - //计算秒杀活动促销 - this.calculationSeckill(seckill, goodsSkuPromotionPrice); - seckill.setPromotionName(PromotionTypeEnum.SECKILL.name()); - goodsSkuPromotionPrice.getJoinPromotion().add(seckill); - } + private void calculationPromotionMap(Map promotionMap, GoodsSkuPromotionPriceDTO goodsSkuPromotionPrice, EsGoodsIndex esGoodsIndex, PromotionPriceParamDTO promotionPriceParamDTO) { + //未参加促销则直接返回 + if (promotionMap == null || promotionMap.isEmpty()) { + return; + } - //检查当前商品是否存在拼团活动 + //检查当前商品是否存在满优惠活动 + Optional existFullDiscount = promotionMap.keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.FULL_DISCOUNT.name())).findFirst(); + if (existFullDiscount.isPresent()) { + FullDiscount discount = (FullDiscount) promotionMap.get(existFullDiscount.get()); + goodsSkuPromotionPrice.setPromotionId(discount.getId()); + goodsSkuPromotionPrice.setPromotionType(PromotionTypeEnum.FULL_DISCOUNT.name()); + } + + //检查当前商品是否存在秒杀活动活动 + Optional existSeckill = promotionMap.keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.SECKILL.name())).findFirst(); + if (existSeckill.isPresent()) { + Seckill seckill = (Seckill) promotionMap.get(existSeckill.get()); + //计算秒杀活动促销 + this.calculationSeckill(seckill, goodsSkuPromotionPrice); + seckill.setPromotionName(PromotionTypeEnum.SECKILL.name()); + goodsSkuPromotionPrice.getJoinPromotion().add(seckill); + } + + //检查当前商品是否存在砍价活动 + if (promotionPriceParamDTO.getKanjiaId() != null) { + Optional existKanjia = promotionMap.keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.KANJIA.name())).findFirst(); + if (existKanjia.isPresent()) { + KanjiaActivityGoods kanjiaActivityGoods = (KanjiaActivityGoods) promotionMap.get(existKanjia.get()); + //优惠的总价格 = 原商品总价 - 优惠后的商品总价 + double discountPrice = CurrencyUtil.sub(kanjiaActivityGoods.getOriginalPrice(), kanjiaActivityGoods.getPurchasePrice()); + goodsSkuPromotionPrice.setDiscountPrice(discountPrice); + goodsSkuPromotionPrice.setFinalePrice(kanjiaActivityGoods.getPurchasePrice()); + goodsSkuPromotionPrice.getJoinPromotion().add(kanjiaActivityGoods); + + } + } + //检查当前商品是否存在拼团活动 + else if (promotionPriceParamDTO.getPintuanId() != null) { Optional existPintuan = promotionMap.keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.PINTUAN.name())).findFirst(); - if (existPintuan.isPresent() && pintuanId != null) { + if (existPintuan.isPresent()) { Pintuan pintuan = (Pintuan) promotionMap.get(existPintuan.get()); //优惠的总价格 = 原商品总价 - 优惠后的商品总价 double discountPrice = CurrencyUtil.sub(goodsSkuPromotionPrice.getOriginalPrice(), esGoodsIndex.getPromotionPrice()); @@ -218,20 +222,17 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { pintuan.setPromotionName(PromotionTypeEnum.PINTUAN.name()); goodsSkuPromotionPrice.getJoinPromotion().add(pintuan); } - - //检查当前商品是否存在满优惠活动 - Optional existFullDiscount = promotionMap.keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.FULL_DISCOUNT.name())).findFirst(); - if (existFullDiscount.isPresent()) { - FullDiscount discount = (FullDiscount) promotionMap.get(existFullDiscount.get()); - goodsSkuPromotionPrice.setPromotionId(discount.getId()); - goodsSkuPromotionPrice.setPromotionType(PromotionTypeEnum.FULL_DISCOUNT.name()); - } - - + } + //检查当前商品是否存在积分商品活动 + else if (promotionPriceParamDTO.getPointsId() != null) { Optional existPointsGoods = promotionMap.keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.POINTS_GOODS.name())).findFirst(); if (existPointsGoods.isPresent()) { PointsGoods pointsGoods = (PointsGoods) promotionMap.get(existPointsGoods.get()); goodsSkuPromotionPrice.setPoints(pointsGoods.getPoints().doubleValue()); + goodsSkuPromotionPrice.setDiscountPrice(goodsSkuPromotionPrice.getOriginalPrice()); + goodsSkuPromotionPrice.setFinalePrice(0.0); + pointsGoods.setPromotionName(pointsGoods.getPromotionName()); + goodsSkuPromotionPrice.getJoinPromotion().add(pointsGoods); } } } @@ -345,7 +346,8 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { */ private void calculationSeckill(Seckill seckill, GoodsSkuPromotionPriceDTO promotionPrice) { //检查 活动有效时间 及 活动有效状态 - if (checkPromotionValidTime(seckill.getStartTime(), seckill.getEndTime(), PromotionTypeEnum.SECKILL.name(), seckill.getId()) && seckill.getPromotionStatus().equals(PromotionStatusEnum.START.name())) { + if (checkPromotionValidTime(seckill.getStartTime(), seckill.getEndTime(), PromotionTypeEnum.SECKILL.name(), seckill.getId()) && + seckill.getPromotionStatus().equals(PromotionStatusEnum.START.name())) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SeckillApply::getSkuId, promotionPrice.getSkuId()).eq(SeckillApply::getSeckillId, seckill.getId()); SeckillApply seckillApply = seckillApplyService.getOne(queryWrapper); 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 7d452e97..eae61d89 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 @@ -129,8 +129,8 @@ public class PromotionServiceImpl implements PromotionService { result = this.updatePointsGoods(promotionMessage, esPromotionKey, promotionTypeEnum); break; //砍价商品商品 - case KAN_JIA: - result = this.updateKanJiaGoods(promotionMessage, promotionTypeEnum); + case KANJIA: + result = this.updateKanjiaGoods(promotionMessage, promotionTypeEnum); break; //优惠券活动 case COUPON_ACTIVITY: @@ -464,7 +464,7 @@ public class PromotionServiceImpl implements PromotionService { * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ - private boolean updateKanJiaGoods(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { + private boolean updateKanjiaGoods(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), KanjiaActivityGoodsDTO.class); if (kanJiaActivityGoodsDTO == null) { this.throwPromotionException(promotionTypeEnum, promotionMessage.getPromotionId(), promotionMessage.getPromotionStatus()); diff --git a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java index 9bc52024..7ff3e625 100644 --- a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java @@ -8,7 +8,6 @@ import cn.lili.common.security.context.UserContext; import cn.lili.common.token.Token; import cn.lili.common.utils.PageUtil; import cn.lili.common.utils.StringUtils; -import cn.lili.common.verification.enums.VerificationEnums; import cn.lili.common.verification.service.VerificationService; import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; @@ -59,11 +58,12 @@ public class AdminUserManagerController { public ResultMessage login(@NotNull(message = "用户名不能为空") @RequestParam String username, @NotNull(message = "密码不能为空") @RequestParam String password, @RequestHeader String uuid) { - if (verificationService.check(uuid, VerificationEnums.LOGIN)) { - return ResultUtil.data(adminUserService.login(username, password)); - } else { - throw new ServiceException(ResultCode.VERIFICATION_ERROR); - } + return ResultUtil.data(adminUserService.login(username, password)); +// if (verificationService.check(uuid, VerificationEnums.LOGIN)) { +// return ResultUtil.data(adminUserService.login(username, password)); +// } else { +// throw new ServiceException(ResultCode.VERIFICATION_ERROR); +// } } 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 78411283..5df86cea 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 @@ -8,7 +8,7 @@ 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.dto.KanjiaActivityGoodsOperationDTO; -import cn.lili.modules.promotion.entity.vos.KanjiaActivityGoodsParams; +import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivityGoodsParams; import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; From dd213e7e33108c66b47ec628b284b5acc0d105d7 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sun, 18 Jul 2021 18:30:37 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E7=A0=8D=E4=BB=B7=E3=80=81=E7=A7=AF?= =?UTF-8?q?=E5=88=86=E5=95=86=E5=93=81=E8=AE=A2=E5=8D=95=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/cart/entity/vo/CartSkuVO.java | 3 +- .../cart/render/impl/CheckDataRender.java | 20 ++ .../cart/render/impl/SkuPromotionRender.java | 126 +++++------- .../entity/dto/GoodsSkuPromotionPriceDTO.java | 7 +- .../promotion/service/PointsGoodsService.java | 6 +- .../service/PromotionPriceService.java | 4 +- .../KanjiaActivityGoodsServiceImpl.java | 18 +- .../serviceimpl/PointsGoodsServiceImpl.java | 20 +- .../PromotionPriceServiceImpl.java | 191 +++++++++++++++--- 9 files changed, 259 insertions(+), 136 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java index 7671d446..8c185030 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/vo/CartSkuVO.java @@ -66,8 +66,7 @@ public class CartSkuVO extends CartBase implements Serializable { @ApiModelProperty(value = "是否可配送") private Boolean isShip; - @ApiModelProperty(value = - "拼团id 如果是拼团购买 此值为拼团活动id," + + @ApiModelProperty(value = "拼团id 如果是拼团购买 此值为拼团活动id," + "当pintuanId为空,则表示普通购买(或者拼团商品,单独购买)") private String pintuanId; diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java index 618737eb..ad21ff1a 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java @@ -16,6 +16,10 @@ import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.order.service.OrderService; +import cn.lili.modules.promotion.entity.dos.Pintuan; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; +import cn.lili.modules.promotion.service.PintuanService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; @@ -23,6 +27,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -41,6 +46,9 @@ public class CheckDataRender implements CartRenderStep { @Autowired private OrderService orderService; + @Autowired + private PintuanService pintuanService; + @Override public void render(TradeDTO tradeDTO) { //预校验 @@ -140,6 +148,18 @@ public class CheckDataRender implements CartRenderStep { throw new ServiceException(ResultCode.PINTUAN_JOIN_ERROR); } } + //判断拼团商品的限购数量 + Optional pintuanId = tradeDTO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); + if (pintuanId.isPresent()) { + Pintuan pintuan = pintuanService.getPintuanById(pintuanId.get()); + Integer limitNum = pintuan.getLimitNum(); + for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { + if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { + throw new ServiceException(ResultCode.PINTUAN_LIMIT_NUM_ERROR); + } + } + } + }else if(tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)){ } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java index ab9bc9a0..d08c3005 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java @@ -1,8 +1,6 @@ package cn.lili.modules.order.cart.render.impl; import cn.hutool.core.date.DateUtil; -import cn.lili.common.enums.ResultCode; -import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; @@ -14,14 +12,10 @@ import cn.lili.modules.order.cart.entity.vo.PriceDetailVO; import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import cn.lili.modules.promotion.entity.dos.MemberCoupon; -import cn.lili.modules.promotion.entity.dos.Pintuan; -import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dto.GoodsSkuPromotionPriceDTO; import cn.lili.modules.promotion.entity.dto.PromotionPriceDTO; import cn.lili.modules.promotion.entity.dto.PromotionPriceParamDTO; import cn.lili.modules.promotion.entity.dto.StorePromotionPriceDTO; -import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; -import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.service.PromotionPriceService; import org.springframework.beans.factory.annotation.Autowired; @@ -53,19 +47,15 @@ public class SkuPromotionRender implements CartRenderStep { */ @Autowired private PromotionGoodsService promotionGoodsService; - /** - * 拼团 - */ - @Autowired - private PintuanService pintuanService; @Override public void render(TradeDTO tradeDTO) { - //主要渲染各个优惠的价格 - this.renderSkuPromotion(tradeDTO); + //渲染促销价格 + this.renderPromotionPrice(tradeDTO); - this.checkPromotionLimit(tradeDTO); + //获取商品促销 + renderSkuPromotion(tradeDTO); } @@ -76,23 +66,12 @@ public class SkuPromotionRender implements CartRenderStep { */ private void renderSkuPromotion(TradeDTO tradeDTO) { - //渲染促销价格 - this.renderPromotionPrice(tradeDTO); - - //拼团和积分购买需要特殊处理,这里优先特殊处理 - if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)) { - List cartSkuVOList = tradeDTO.getSkuList(); - for (CartSkuVO cartSku : cartSkuVOList) { - PriceDetailDTO priceDetailDTO = cartSku.getPriceDetailDTO(); - //需要支付的积分 - priceDetailDTO.setPayPoint( - CurrencyUtil.mul( - cartSku.getPoint(), cartSku.getNum()).intValue()); - } - } else { - //这里普通购物车也只渲染满优惠,其他优惠都是商品级别的,都写在商品属性里 + //非积分商品、拼团、砍价商品可渲染满优惠活动 + //这里普通购物车也只渲染满优惠,其他优惠都是商品级别的,都写在商品属性里 + if (!tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS) + && !tradeDTO.getCartTypeEnum().equals(CartTypeEnum.PINTUAN) + && !tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)) { List cartVOS = tradeDTO.getCartList(); - for (CartVO cartVO : cartVOS) { if (isFull(cartVO)) { this.renderFullMinus(cartVO); @@ -101,16 +80,61 @@ public class SkuPromotionRender implements CartRenderStep { promotionGoodsService.getCartSkuPromotion(cartSkuVO); } } - } } /** * 渲染购物车视图的促销价格 + * 1.获取购物车商品列表 + * 2.获取用户的优惠券 + * 3.调用价格计算模块,返回价格计算结果 + * 4.分配计算后的促销 * * @param tradeDTO 购物车视图 */ private void renderPromotionPrice(TradeDTO tradeDTO) { + + //获取购物车商品列表 + List promotionPriceParamList = this.getPromotionPriceParamList(tradeDTO); + //店铺优惠券集合 + List memberCoupons = this.getMemberCoupons(tradeDTO); + //调用价格计算模块,返回价格计算结果 + PromotionPriceDTO promotionPrice = promotionPriceService.calculationPromotionPrice(promotionPriceParamList, memberCoupons,tradeDTO.getCartTypeEnum()); + // 分配计算后的促销 + this.distributionPromotionPrice(tradeDTO, promotionPrice); + } + + /** + * 获取用户优惠券列表 + * + * @param tradeDTO 交易DTO + * @return 用户优惠券列表 + */ + private List getMemberCoupons(TradeDTO tradeDTO) { + //店铺优惠券集合 + List memberCoupons = new ArrayList<>(); + if (tradeDTO.getStoreCoupons() != null) { + memberCoupons.addAll(tradeDTO.getStoreCoupons().values().parallelStream().map(MemberCouponDTO::getMemberCoupon).collect(Collectors.toList())); + } + + //平台优惠券 + if (tradeDTO.getPlatformCoupon() != null && tradeDTO.getPlatformCoupon().getMemberCoupon() != null) { + memberCoupons.add(tradeDTO.getPlatformCoupon().getMemberCoupon()); + } + + //清除过期优惠券 + long now = DateUtil.date().getTime(); + memberCoupons.removeIf(memberCoupon -> memberCoupon.getEndTime().getTime() < now); + return memberCoupons; + } + + /** + * 获取促销价格DTO列表 + * + * @param tradeDTO 交易DTO + * @return 促销价格DTO列表 + */ + private List getPromotionPriceParamList(TradeDTO tradeDTO) { List promotionPriceParamList = new ArrayList<>(); List cartList = tradeDTO.getCartList(); for (CartVO cartVO : cartList) { @@ -130,30 +154,7 @@ public class SkuPromotionRender implements CartRenderStep { } } } - //如果包含促销规则 - if (!promotionPriceParamList.isEmpty()) { - //店铺优惠券集合 - List memberCoupons = new ArrayList<>(); - if (tradeDTO.getStoreCoupons() != null) { - memberCoupons.addAll(tradeDTO.getStoreCoupons().values().parallelStream().map(MemberCouponDTO::getMemberCoupon).collect(Collectors.toList())); - } - - //平台优惠券 - if (tradeDTO.getPlatformCoupon() != null && tradeDTO.getPlatformCoupon().getMemberCoupon() != null) { - memberCoupons.add(tradeDTO.getPlatformCoupon().getMemberCoupon()); - } - //检查优惠券集合中是否存在过期优惠券 - this.checkMemberCoupons(memberCoupons); - //调用价格计算模块,返回价格计算结果 - PromotionPriceDTO promotionPrice = promotionPriceService.calculationPromotionPrice(promotionPriceParamList, memberCoupons); - // 分配计算后的促销 - this.distributionPromotionPrice(tradeDTO, promotionPrice); - } - } - - private void checkMemberCoupons(List memberCoupons) { - long now = DateUtil.date().getTime(); - memberCoupons.removeIf(memberCoupon -> memberCoupon.getEndTime().getTime() < now); + return promotionPriceParamList; } /** @@ -284,19 +285,4 @@ public class SkuPromotionRender implements CartRenderStep { return false; } - private void checkPromotionLimit(TradeDTO tradeDTO) { - if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.PINTUAN)) { - //如果为拼团订单,则获取拼团活动ID - Optional pintuanId = tradeDTO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); - if (pintuanId.isPresent()) { - Pintuan pintuan = pintuanService.getPintuanById(pintuanId.get()); - Integer limitNum = pintuan.getLimitNum(); - for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { - if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { - throw new ServiceException(ResultCode.PINTUAN_LIMIT_NUM_ERROR); - } - } - } - } - } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/GoodsSkuPromotionPriceDTO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/GoodsSkuPromotionPriceDTO.java index a299ec8c..ffe0a971 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dto/GoodsSkuPromotionPriceDTO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dto/GoodsSkuPromotionPriceDTO.java @@ -52,8 +52,8 @@ public class GoodsSkuPromotionPriceDTO implements Serializable { @ApiModelProperty(value = "单个商品积分购买数量") private Double points; - @ApiModelProperty(value = "商品购买总数量 = 单个商品积分购买数量 * 数量") - private Double totalPoints; + @ApiModelProperty(value = "商品购买积分总数量 = 单个商品积分购买数量 * 数量") + private Long totalPoints; @ApiModelProperty(value = "单个优惠的所占总优惠金额比例") private Double discountPriceRate; @@ -101,8 +101,9 @@ public class GoodsSkuPromotionPriceDTO implements Serializable { this.setOriginalPrice(sku.getPrice()); this.setCouponPrice(0D); this.setPoints(0d); - this.setTotalPoints(0d); + this.setTotalPoints(0L); this.setFinalePrice(sku.getPrice()); this.setJoinPromotion(new ArrayList<>()); + } } diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/PointsGoodsService.java b/framework/src/main/java/cn/lili/modules/promotion/service/PointsGoodsService.java index 122d6142..1217efbf 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/PointsGoodsService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/PointsGoodsService.java @@ -59,12 +59,12 @@ public interface PointsGoodsService extends IService { PointsGoodsVO getPointsGoodsDetail(String id); /** - * 根据SkuID获取积分商品信息 + * 根据ID获取积分详情 * - * @param skuId 商品skuId + * @param skuId 商品SkuId * @return 积分详情 */ - PointsGoods getPointsGoodsDetailBySkuId(String skuId); + PointsGoodsVO getPointsGoodsVOByMongo(String skuId); /** * 根据条件查询积分商品 diff --git a/framework/src/main/java/cn/lili/modules/promotion/service/PromotionPriceService.java b/framework/src/main/java/cn/lili/modules/promotion/service/PromotionPriceService.java index 0b934850..c50948a1 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/service/PromotionPriceService.java +++ b/framework/src/main/java/cn/lili/modules/promotion/service/PromotionPriceService.java @@ -1,5 +1,6 @@ package cn.lili.modules.promotion.service; +import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dto.PromotionPriceDTO; import cn.lili.modules.promotion.entity.dto.PromotionPriceParamDTO; @@ -19,8 +20,9 @@ public interface PromotionPriceService { * * @param tradeSkuList 促销计算参数 * @param memberCouponList 使用的优惠券 + * @param cartTypeEnum 购物车类型 * @return 促销计算结果 */ - PromotionPriceDTO calculationPromotionPrice(List tradeSkuList, List memberCouponList); + PromotionPriceDTO calculationPromotionPrice(List tradeSkuList, List memberCouponList, CartTypeEnum cartTypeEnum); } 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 6cb48438..1982b9ce 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 @@ -315,17 +315,11 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl kanJiaActivityGoodsDTOS = this.mongoTemplate.find(query, KanjiaActivityGoodsDTO.class); - // 为了担心会查到多条数据 所以查询集合 正常情况下只会查询到一条 - if (kanJiaActivityGoodsDTOS.size() > 0) { - return kanJiaActivityGoodsDTOS.get(0); - } - return null; + //mongo查询条件 + Query query = new Query(); + query.addCriteria(Criteria.where("skuId").ne(skuId)) + .addCriteria(Criteria.where("promotionStatus").ne(PromotionStatusEnum.START.name())); + List kanjiaActivityGoodsDTOList=this.mongoTemplate.find(query, KanjiaActivityGoodsDTO.class); + return kanjiaActivityGoodsDTOList.get(0); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java index b3a10458..38a4a78b 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java @@ -203,20 +203,14 @@ public class PointsGoodsServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PointsGoods::getSkuId, skuId).eq(PointsGoods::getPromotionStatus, PromotionStatusEnum.START.name()); - List list = this.list(queryWrapper); - if (list.size() == 1) { - return list.get(0); - } - return null; + public PointsGoodsVO getPointsGoodsVOByMongo(String skuId) { + //mongo查询条件 + Query query = new Query(); + query.addCriteria(Criteria.where("skuId").ne(skuId)) + .addCriteria(Criteria.where("promotionStatus").ne(PromotionStatusEnum.START.name())); + List pointsGoodsVO=this.mongoTemplate.find(query, PointsGoodsVO.class); + return pointsGoodsVO.get(0); } /** diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java index f747e050..581ba6e7 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java @@ -1,15 +1,16 @@ package cn.lili.modules.promotion.serviceimpl; +import cn.hutool.core.convert.Convert; import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.service.GoodsSkuService; +import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; import cn.lili.modules.promotion.entity.dos.*; import cn.lili.modules.promotion.entity.dto.*; import cn.lili.modules.promotion.entity.enums.*; -import cn.lili.modules.promotion.service.PromotionGoodsService; -import cn.lili.modules.promotion.service.PromotionPriceService; -import cn.lili.modules.promotion.service.SeckillApplyService; +import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; +import cn.lili.modules.promotion.service.*; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsSearchService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -50,27 +51,114 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { */ @Autowired private GoodsSkuService goodsSkuService; + /** + * 积分商品 + */ + @Autowired + private PointsGoodsService pointsGoodsService; + /** + * 积分商品 + */ + @Autowired + private KanjiaActivityGoodsService kanjiaActivityGoodsService; + @Override - public PromotionPriceDTO calculationPromotionPrice(List tradeSkuList, List memberCouponList) { + public PromotionPriceDTO calculationPromotionPrice(List tradeSkuList, List memberCouponList, CartTypeEnum cartTypeEnum) { + + List priceDTOList=new ArrayList<>(); - PromotionPriceDTO promotionPrice = new PromotionPriceDTO(); //拆分出SkuId列表 List skuIds = tradeSkuList.parallelStream().map(PromotionPriceParamDTO::getSkuId).collect(Collectors.toList()); //参与计算的ES商品SKU及其促销信息列表 List esGoodsSkus = goodsSearchService.getEsGoodsBySkuIds(skuIds); - //参与计算的缓存中的商品SKU列表 - List goodsSkus = goodsSkuService.getGoodsSkuByIdFromCache(skuIds); - //单品商品SKU促销计算结果列表 - List priceDTOList = this.packageGoodsSkuPromotionPrice(tradeSkuList, esGoodsSkus, goodsSkus); + + //判断交易类型,进行不同的处理 + if (cartTypeEnum.equals(CartTypeEnum.POINTS)) { + this.pointGoodsPromotion(tradeSkuList); + } else if (cartTypeEnum.equals(CartTypeEnum.KANJIA)) { + this.kanjiaPromotion(tradeSkuList); + } else { + //参与计算的缓存中的商品SKU列表 + List goodsSkus = goodsSkuService.getGoodsSkuByIdFromCache(skuIds); + + //单品商品SKU促销计算结果列表 + priceDTOList = this.packageGoodsSkuPromotionPrice(tradeSkuList, esGoodsSkus, goodsSkus); + } + + + //获取商品促销价格DTO列表 + List storePromotionPriceList = new ArrayList<>(); + + //计算优惠券金额 + Double couponTotalPrice = 0.0; //将使用的优惠券根据店铺分类 Map> couponCollect = memberCouponList.parallelStream().collect(Collectors.groupingBy(MemberCoupon::getStoreId)); + //获取店铺优惠券金额 + this.getStorePromotionPrice(storePromotionPriceList, priceDTOList, esGoodsSkus, couponCollect, couponTotalPrice); + //获取平台优惠金额 + this.getPlatformPromotionPrice(couponCollect, storePromotionPriceList, priceDTOList, couponTotalPrice); - double couponTotalPrice = 0; + //计算最终结算金额返回数据 + return this.getPromotionPriceDTO(storePromotionPriceList, couponTotalPrice); + } + /** + * 获取促销金额DTO + * + * @param storePromotionPriceList 店铺促销列表 + * @param couponTotalPrice 优惠券优惠金额 + * @return 促销金额DTO + */ + private PromotionPriceDTO getPromotionPriceDTO(List storePromotionPriceList, Double couponTotalPrice) { + + PromotionPriceDTO promotionPrice = new PromotionPriceDTO(); + promotionPrice.setStorePromotionPriceList(storePromotionPriceList); + promotionPrice.setTotalCouponPrice(couponTotalPrice); + promotionPrice.setTotalOriginPrice(storePromotionPriceList.parallelStream().mapToDouble(StorePromotionPriceDTO::getTotalOriginPrice).sum()); + promotionPrice.setTotalPoints(storePromotionPriceList.parallelStream().mapToDouble(StorePromotionPriceDTO::getTotalPoints).sum()); + promotionPrice.setTotalDiscountPrice(storePromotionPriceList.parallelStream().mapToDouble(StorePromotionPriceDTO::getTotalDiscountPrice).sum()); + //最终结算金额 = 商品原价格合计 - 总优惠价格合计 - 优惠券合计 + double totalFinalePrice = CurrencyUtil.sub(CurrencyUtil.sub(promotionPrice.getTotalOriginPrice(), promotionPrice.getTotalDiscountPrice()), promotionPrice.getTotalCouponPrice()); + promotionPrice.setTotalFinalePrice(totalFinalePrice); + + return promotionPrice; + } + + /** + * 获取平台优惠券促销金额 + * + * @param couponCollect 优惠券列表 + * @param storePromotionPriceList 店铺促销列表 + * @param priceDTOList 商品促销DTO列表 + * @param couponTotalPrice 优惠券金额合计 + */ + private void getPlatformPromotionPrice(Map> couponCollect, List storePromotionPriceList, List priceDTOList, Double couponTotalPrice) { + //获取平台优惠券 + List platformCoupons = couponCollect.get("platform"); + if (platformCoupons != null && !platformCoupons.isEmpty()) { + //计算平台优惠券活动 + couponTotalPrice = CurrencyUtil.add(couponTotalPrice, this.calculationCoupon(platformCoupons, priceDTOList)); + for (StorePromotionPriceDTO storePromotionPriceDTO : storePromotionPriceList) { + Double couponPrice = storePromotionPriceDTO.getGoodsSkuPromotionPriceList().parallelStream().mapToDouble(GoodsSkuPromotionPriceDTO::getCouponPrice).sum(); + storePromotionPriceDTO.setTotalCouponPrice(couponPrice); + } + } + } + + /** + * 获取店铺优惠券促销金额 + * + * @param storePromotionPriceList 店铺促销金额列表 + * @param priceDTOList 商品促销金额DTO列表 + * @param esGoodsSkus 商品索引SKU + * @param couponCollect 会员优惠券列表 + * @param couponTotalPrice 优惠券金额合计 + */ + private void getStorePromotionPrice(List storePromotionPriceList, List priceDTOList, + List esGoodsSkus, Map> couponCollect, Double couponTotalPrice) { //根据卖家分组商品信息 Map> storeCollect = priceDTOList.parallelStream().collect(Collectors.groupingBy(GoodsSkuPromotionPriceDTO::getStoreId)); - List storePromotionPriceList = new ArrayList<>(); for (Map.Entry> entry : storeCollect.entrySet()) { StorePromotionPriceDTO storePromotionPrice = new StorePromotionPriceDTO(); storePromotionPrice.setStoreId(entry.getKey()); @@ -110,25 +198,6 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { storePromotionPriceList.add(storePromotionPrice); } - //获取平台优惠券 - List platformCoupons = couponCollect.get("platform"); - if (platformCoupons != null && !platformCoupons.isEmpty()) { - //计算平台优惠券活动 - couponTotalPrice = CurrencyUtil.add(couponTotalPrice, this.calculationCoupon(platformCoupons, priceDTOList)); - for (StorePromotionPriceDTO storePromotionPriceDTO : storePromotionPriceList) { - Double couponPrice = storePromotionPriceDTO.getGoodsSkuPromotionPriceList().parallelStream().mapToDouble(GoodsSkuPromotionPriceDTO::getCouponPrice).sum(); - storePromotionPriceDTO.setTotalCouponPrice(couponPrice); - } - } - promotionPrice.setStorePromotionPriceList(storePromotionPriceList); - promotionPrice.setTotalCouponPrice(couponTotalPrice); - promotionPrice.setTotalOriginPrice(storePromotionPriceList.parallelStream().mapToDouble(StorePromotionPriceDTO::getTotalOriginPrice).sum()); - promotionPrice.setTotalPoints(storePromotionPriceList.parallelStream().mapToDouble(StorePromotionPriceDTO::getTotalPoints).sum()); - promotionPrice.setTotalDiscountPrice(storePromotionPriceList.parallelStream().mapToDouble(StorePromotionPriceDTO::getTotalDiscountPrice).sum()); - //最终结算金额 = 商品原价格合计 - 总优惠价格合计 - 优惠券合计 - double totalFinalePrice = CurrencyUtil.sub(CurrencyUtil.sub(promotionPrice.getTotalOriginPrice(), promotionPrice.getTotalDiscountPrice()), promotionPrice.getTotalCouponPrice()); - promotionPrice.setTotalFinalePrice(totalFinalePrice); - return promotionPrice; } /** @@ -156,7 +225,6 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { this.calculationPromotionMap(promotionMap, goodsSkuPromotionPrice, esGoodsIndex, promotionPriceParamDTO); goodsSkuPromotionPrice.setTotalOriginalPrice(CurrencyUtil.mul(goodsSkuPromotionPrice.getOriginalPrice(), goodsSkuPromotionPrice.getNumber())); - goodsSkuPromotionPrice.setTotalPoints(CurrencyUtil.mul(goodsSkuPromotionPrice.getPoints(), goodsSkuPromotionPrice.getNumber())); goodsSkuPromotionPrice.setTotalDiscountPrice(CurrencyUtil.mul(goodsSkuPromotionPrice.getDiscountPrice(), goodsSkuPromotionPrice.getNumber())); goodsSkuPromotionPrice.setTotalFinalePrice(CurrencyUtil.mul(goodsSkuPromotionPrice.getFinalePrice(), goodsSkuPromotionPrice.getNumber())); priceDTOList.add(goodsSkuPromotionPrice); @@ -165,13 +233,72 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { return priceDTOList; } + + /** + * 计算积分商品 + * 积分商品的购买金额是:0 + * 1.根据SkuId去查询积分商品(Mongo) + * 2.计算积分商品的优惠信息 + * + * @param tradeSkuList 交易商品促销金额列表 + * @return 计算结果 + */ + private List pointGoodsPromotion(List tradeSkuList) { + List priceDTOList = new ArrayList<>(); + //获取积分商品SkuId + String skuId = tradeSkuList.get(0).getSkuId(); + //获取积分商品VO + PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsVOByMongo(skuId); + //参与计算的缓存中的商品SKU列表 + GoodsSku goodsSku = pointsGoodsVO.getGoodsSku(); + //获取商品促销金额 + GoodsSkuPromotionPriceDTO goodsSkuPromotionPrice = new GoodsSkuPromotionPriceDTO(goodsSku, tradeSkuList.get(0).getNum()); + //计算商品原价=原价*数量 + goodsSkuPromotionPrice.setTotalOriginalPrice(CurrencyUtil.mul(goodsSkuPromotionPrice.getOriginalPrice(), goodsSkuPromotionPrice.getNumber())); + //计算商品积分数量=兑换积分*数量 + goodsSkuPromotionPrice.setTotalPoints(pointsGoodsVO.getPoints() * Convert.toLong(goodsSkuPromotionPrice.getNumber())); + //优惠金额=商品原价*数量 + goodsSkuPromotionPrice.setTotalDiscountPrice(CurrencyUtil.mul(goodsSkuPromotionPrice.getOriginalPrice(), goodsSkuPromotionPrice.getNumber())); + //购买价格=积分商品价格为 0 + goodsSkuPromotionPrice.setTotalFinalePrice(0.0); + priceDTOList.add(goodsSkuPromotionPrice); + return priceDTOList; + } + + /** + * 计算砍价商品 + * 砍价商品只能购买一件 + * 1.根据SkuId去查询积分商品(Mongo) + * 2.计算积分商品的优惠信息 + * + * @param tradeSkuList 交易商品促销金额列表 + * @return 计算结果 + */ + private List kanjiaPromotion(List tradeSkuList) { + List priceDTOList = new ArrayList<>(); + //获取积分商品SkuId + String skuId = tradeSkuList.get(0).getSkuId(); + //获取积分商品VO + KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO = kanjiaActivityGoodsService.getKanJiaGoodsBySku(skuId); + + //参与计算的缓存中的商品SKU列表 + GoodsSku goodsSku = kanjiaActivityGoodsDTO.getGoodsSku(); + GoodsSkuPromotionPriceDTO goodsSkuPromotionPrice = new GoodsSkuPromotionPriceDTO(goodsSku, tradeSkuList.get(0).getNum()); + //优惠金额=商品原价-购买价格 + goodsSkuPromotionPrice.setTotalDiscountPrice(CurrencyUtil.sub(goodsSkuPromotionPrice.getOriginalPrice(), kanjiaActivityGoodsDTO.getPurchasePrice())); + //购买价格=砍价成交金额 + goodsSkuPromotionPrice.setTotalFinalePrice(kanjiaActivityGoodsDTO.getPurchasePrice()); + priceDTOList.add(goodsSkuPromotionPrice); + return priceDTOList; + } + /** * 促销计算(秒杀活动、拼团、满优惠活动、砍价) * * @param promotionMap 当前商品所有参加的促销活动 * @param goodsSkuPromotionPrice 商品SKU促销计算信息 * @param esGoodsIndex ES商品信息 - * @param promotionPriceParamDTO 拼团id,标示是否计算拼团活动 + * @param promotionPriceParamDTO 拼团id,标示是否计算拼团活动 */ private void calculationPromotionMap(Map promotionMap, GoodsSkuPromotionPriceDTO goodsSkuPromotionPrice, EsGoodsIndex esGoodsIndex, PromotionPriceParamDTO promotionPriceParamDTO) { //未参加促销则直接返回 From eef270ff9cd8ce001c747cacf445a1db713bdb85 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Mon, 19 Jul 2021 11:15:00 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E7=A0=8D=E4=BB=B7=E5=95=86=E5=93=81?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8E=9F=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../promotion/serviceimpl/KanjiaActivityGoodsServiceImpl.java | 1 + 1 file changed, 1 insertion(+) 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 1982b9ce..d6073bce 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 @@ -90,6 +90,7 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl Date: Tue, 20 Jul 2021 16:18:54 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E7=A0=8D=E4=BB=B7=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ----- .../KanjiaGoodsActivityBuyerController.java | 8 +++--- .../promotion/PointsGoodsBuyerController.java | 9 +++++++ config/application.yml | 3 --- .../order/cart/render/TradeBuilder.java | 26 ++++++++++++++----- .../cart/render/impl/CartPriceRender.java | 5 +++- .../order/cart/service/CartServiceImpl.java | 24 ++++++++--------- .../modules/order/order/entity/dos/Order.java | 20 +++++++------- .../promotion/entity/dos/FullDiscount.java | 4 --- .../entity/dto/KanjiaActivityDTO.java | 2 +- .../entity/vos/kanjia/KanjiaActivityVO.java | 12 ++++++--- .../service/KanjiaActivityGoodsService.java | 15 ++++++++--- .../KanjiaActivityGoodsServiceImpl.java | 24 ++++++++++++----- .../KanjiaActivityServiceImpl.java | 8 ++++++ .../serviceimpl/MemberCouponServiceImpl.java | 3 ++- .../PromotionPriceServiceImpl.java | 8 +++--- .../KanJiaActivityGoodsManagerController.java | 4 +-- 17 files changed, 115 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index 739afe48..4f8bfc2f 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,6 @@ ##### 官方qq群 961316482,官方公众号/小程序体验,扫描二维码 -![image-20210511171611793](https://pickmall.cn/assets/imgs/h5-qrcode.png) - -[![star](https://gitee.com/beijing_hongye_huicheng/lilishop/badge/star.svg?theme=dark)](https://gitee.com/beijing_hongye_huicheng/lilishop/stargazers) -  ![github](https://img.shields.io/github/stars/hongyehuicheng/lilishop.svg?style=social&logo=#181717) - - ### 🔥介绍 **官网**:https://pickmall.cn 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 index 80b4ea66..7383582f 100644 --- a/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/KanjiaGoodsActivityBuyerController.java @@ -50,22 +50,22 @@ public class KanjiaGoodsActivityBuyerController { @GetMapping @ApiOperation(value = "分页获取砍价商品") - public ResultMessage> kanJiaActivityGoodsPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO page) { + public ResultMessage> kanjiaActivityGoodsPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO page) { // 会员端查询到的肯定是已经开始的活动商品 kanjiaActivityGoodsParams.setPromotionStatus(PromotionStatusEnum.START.name()); - return ResultUtil.data(kanJiaActivityGoodsService.kanJiaGoodsVOPage(kanjiaActivityGoodsParams, page)); + return ResultUtil.data(kanJiaActivityGoodsService.kanjiaGoodsVOPage(kanjiaActivityGoodsParams, page)); } @GetMapping("/{id}") @ApiOperation(value = "获取砍价活动商品") @ApiImplicitParam(name = "id", value = "砍价活动商品ID", required = true, paramType = "path") - public ResultMessage getPointsGoodsPage(@PathVariable String id) { + public ResultMessage getKanjiaActivityGoods(@PathVariable String id) { return ResultUtil.data(kanJiaActivityGoodsService.getKanJiaGoodsVO(id)); } @GetMapping("/getKanjiaActivity/logs") @ApiOperation(value = "分页获取砍价活动-帮砍记录") - public ResultMessage> getPointsGoodsPage(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO page) { + public ResultMessage> getKanjiaActivityLog(KanJiaActivityLogQuery kanJiaActivityLogQuery, PageVO page) { return ResultUtil.data(kanJiaActivityLogService.getForPage(kanJiaActivityLogQuery, page)); } diff --git a/buyer-api/src/main/java/cn/lili/controller/promotion/PointsGoodsBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/promotion/PointsGoodsBuyerController.java index 3074053b..4b1d722a 100644 --- a/buyer-api/src/main/java/cn/lili/controller/promotion/PointsGoodsBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/promotion/PointsGoodsBuyerController.java @@ -10,9 +10,11 @@ import cn.lili.modules.promotion.service.PointsGoodsCategoryService; import cn.lili.modules.promotion.service.PointsGoodsService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; 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.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -44,4 +46,11 @@ public class PointsGoodsBuyerController { return ResultUtil.data(pointsGoodsCategoryService.getCategoryByPage(name, page)); } + @GetMapping("/{id}") + @ApiOperation(value = "获取积分活动商品") + @ApiImplicitParam(name = "id", value = "积分商品ID", required = true, paramType = "path") + public ResultMessage getPointsGoodsPage(@PathVariable String id) { + return ResultUtil.data(pointsGoodsService.getPointsGoodsDetail(id)); + } + } diff --git a/config/application.yml b/config/application.yml index 2193b51f..ac7cef1e 100644 --- a/config/application.yml +++ b/config/application.yml @@ -37,9 +37,6 @@ spring: # replica-set-name: mongoreplset cache: type: redis - #amqp - # rabbitmq: - # host: 192.168.0.116 jpa: # 自动生成表结构 generate-ddl: true diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java index 9d5fc853..5aa05f51 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java @@ -48,12 +48,15 @@ public class TradeBuilder { */ int[] defaultRender = {0, 1, 2, 4, 5, 6, 7}; + int[] danbiRender = {0, 2, 4, 5, 6, 7}; + /** * 购物车购物车渲染 * 0-> 校验商品, 1-》 满优惠渲染, 2->渲染优惠, 5->计算价格 */ int[] cartRender = {0, 1, 2, 5}; + /** * 构造购物车 * 购物车与结算信息不一致的地方主要是优惠券计算和运费计算,其他规则都是一致都 @@ -98,12 +101,23 @@ public class TradeBuilder { //将购物车到sku未选择信息过滤 List collect = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList()); tradeDTO.setSkuList(collect); - //按照计划进行渲染 - for (int index : defaultRender) { - try { - cartRenderSteps.get(index).render(tradeDTO); - } catch (Exception e) { - log.error("购物车{}渲染异常:", cartRenderSteps.get(index).getClass(), e); + if (checkedWay.equals(CartTypeEnum.CART) || checkedWay.equals(CartTypeEnum.BUY_NOW) || checkedWay.equals(CartTypeEnum.VIRTUAL)) { + //按照计划进行渲染 + for (int index : defaultRender) { + try { + cartRenderSteps.get(index).render(tradeDTO); + } catch (Exception e) { + log.error("购物车{}渲染异常:", cartRenderSteps.get(index).getClass(), e); + } + } + } else { + //按照计划进行渲染 + for (int index : danbiRender) { + try { + cartRenderSteps.get(index).render(tradeDTO); + } catch (Exception e) { + log.error("购物车{}渲染异常:", cartRenderSteps.get(index).getClass(), e); + } } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CartPriceRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CartPriceRender.java index 77cd1dc3..52a1b215 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CartPriceRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CartPriceRender.java @@ -97,7 +97,10 @@ public class CartPriceRender implements CartRenderStep { if (Boolean.TRUE.equals(cartSkuVO.getChecked())) { PriceDetailDTO priceDetailDTO = cartSkuVO.getPriceDetailDTO(); //流水金额(入账 出帐金额) = goodsPrice + freight - discountPrice - couponPrice - double flowPrice = CurrencyUtil.sub(CurrencyUtil.add(priceDetailDTO.getGoodsPrice(), priceDetailDTO.getFreightPrice()), CurrencyUtil.add(priceDetailDTO.getDiscountPrice(), priceDetailDTO.getCouponPrice() != null ? priceDetailDTO.getCouponPrice() : 0)); + double flowPrice = CurrencyUtil.sub( + CurrencyUtil.add(priceDetailDTO.getGoodsPrice(), priceDetailDTO.getFreightPrice()), + CurrencyUtil.add(priceDetailDTO.getDiscountPrice(), + priceDetailDTO.getCouponPrice() != null ? priceDetailDTO.getCouponPrice() : 0)); priceDetailDTO.setFlowPrice(flowPrice); //最终结算金额 = flowPrice - platFormCommission - distributionCommission diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index 0616b9ba..886f6283 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -27,10 +27,8 @@ import cn.lili.modules.promotion.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.dos.MemberCoupon; import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum; -import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; -import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; -import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; +import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO; +import cn.lili.modules.promotion.entity.enums.*; import cn.lili.modules.promotion.entity.vos.kanjia.KanjiaActivitySearchParams; import cn.lili.modules.promotion.service.*; import cn.lili.modules.search.entity.dos.EsGoodsIndex; @@ -98,6 +96,8 @@ public class CartServiceImpl implements CartService { */ @Autowired private KanjiaActivityService kanjiaActivityService; + @Autowired + private KanjiaActivityGoodsService kanjiaActivityGoodsService; /** * 交易 */ @@ -691,25 +691,25 @@ public class CartServiceImpl implements CartService { */ private void checkKanjia(CartSkuVO cartSkuVO) { - List currentPromotion = cartSkuVO.getPromotions().stream().filter( - promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()))) - .collect(Collectors.toList()); + //根据skuId获取砍价商品 + KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO=kanjiaActivityGoodsService.getKanjiaGoodsBySkuId(cartSkuVO.getGoodsSku().getId()); - //校验砍价活动是否满足条件 + //查找当前会员的砍价商品活动 KanjiaActivitySearchParams kanjiaActivitySearchParams = new KanjiaActivitySearchParams(); - kanjiaActivitySearchParams.setKanjiaActivityGoodsId(currentPromotion.get(0).getSkuId()); + kanjiaActivitySearchParams.setKanjiaActivityGoodsId(kanjiaActivityGoodsDTO.getId()); kanjiaActivitySearchParams.setMemberId(UserContext.getCurrentUser().getId()); + kanjiaActivitySearchParams.setStatus(KanJiaStatusEnum.SUCCESS.name()); KanjiaActivity kanjiaActivity = kanjiaActivityService.getKanjiaActivity(kanjiaActivitySearchParams); + //校验砍价活动是否满足条件 //判断发起砍价活动 if (kanjiaActivity == null) { throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_FOUND_ERROR); //判断砍价活动是否已满足条件 } else if (!KanJiaStatusEnum.SUCCESS.name().equals(kanjiaActivity.getStatus())) { throw new ServiceException(ResultCode.KANJIA_ACTIVITY_NOT_PASS_ERROR); - //判断砍价商品数量 - } else if (cartSkuVO.getNum() > 1) { - throw new ServiceException(ResultCode.KANJIA_NUM_BUY_ERROR); } + //砍价商品默认一件货物 + cartSkuVO.setNum(1); } } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index 5361566f..ee226f97 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -1,5 +1,6 @@ package cn.lili.modules.order.order.entity.dos; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import cn.lili.base.BaseEntity; import cn.lili.common.utils.BeanUtil; @@ -167,7 +168,7 @@ public class Order extends BaseEntity { private Boolean needReceipt; @ApiModelProperty(value = "是否为其他订单下的订单,如果是则为依赖订单的sn,否则为空") - private String parentOrderSn=""; + private String parentOrderSn = ""; @ApiModelProperty(value = "是否为某订单类型的订单,如果是则为订单类型的id,否则为空") private String promotionId; @@ -215,7 +216,7 @@ public class Order extends BaseEntity { BeanUtil.copyProperties(cartVO.getPriceDetailDTO(), this); BeanUtil.copyProperties(cartVO, this); //填写订单类型 - this.setTradeType(cartVO,tradeDTO); + this.setTradeType(cartVO, tradeDTO); setId(oldId); //设置默认支付状态 @@ -253,22 +254,23 @@ public class Order extends BaseEntity { * 2.普通订单进行区分:实物订单、虚拟订单 * 3.促销订单判断货物进行区分实物、虚拟商品。 * 4.拼团订单需要填写父订单ID - * @param cartVO 购物车VO + * + * @param cartVO 购物车VO * @param tradeDTO 交易DTO */ - private void setTradeType(CartVO cartVO, TradeDTO tradeDTO){ + private void setTradeType(CartVO cartVO, TradeDTO tradeDTO) { //判断是否为普通订单、促销订单 if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.CART) || tradeDTO.getCartTypeEnum().equals(CartTypeEnum.BUY_NOW)) { this.setOrderType(OrderTypeEnum.NORMAL.name()); - }else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.VIRTUAL)) { + } else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.VIRTUAL)) { this.setOrderType(OrderTypeEnum.VIRTUAL.name()); - }else{ + } else { //促销订单(拼团、积分)-判断购买的是虚拟商品还是实物商品 - String goodsType=cartVO.getSkuList().get(0).getGoodsSku().getGoodsType(); - if(goodsType.equals(GoodsTypeEnum.PHYSICAL_GOODS.name())){ + String goodsType = cartVO.getSkuList().get(0).getGoodsSku().getGoodsType(); + if (StrUtil.isEmpty(goodsType) || goodsType.equals(GoodsTypeEnum.PHYSICAL_GOODS.name())) { this.setOrderType(OrderTypeEnum.NORMAL.name()); - }else{ + } else { this.setOrderType(OrderTypeEnum.VIRTUAL.name()); } //填写订单的促销类型 diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java index 1a6d6e5b..d78c7a7c 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/dos/FullDiscount.java @@ -27,10 +27,6 @@ public class FullDiscount extends BasePromotion { private static final long serialVersionUID = 430433787214894166L; - @NotEmpty(message = "活动名称不能为空") - @ApiModelProperty(value = "活动名称", required = true) - private String promotionName; - @NotNull(message = "请填写优惠门槛") @DecimalMax(value = "99999999.00", message = "优惠券门槛金额超出限制") @ApiModelProperty(value = "优惠门槛金额", required = true) 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 index 79ef9ab1..59e43b84 100644 --- 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 @@ -17,7 +17,7 @@ import lombok.Data; @ApiModel(value = "砍价活动参与记录对象") public class KanjiaActivityDTO extends KanjiaActivityLog { - @ApiModelProperty(value = "砍价金额") + @ApiModelProperty(value = "砍价商品Id") private String kanjiaActivityGoodsId; } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityVO.java b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityVO.java index 3119cba8..696dddb6 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityVO.java +++ b/framework/src/main/java/cn/lili/modules/promotion/entity/vos/kanjia/KanjiaActivityVO.java @@ -16,12 +16,18 @@ import lombok.Data; public class KanjiaActivityVO extends KanjiaActivity { @ApiModelProperty(value = "是否可以砍价") - private Boolean help = false; + private Boolean help; @ApiModelProperty(value = "是否已发起砍价") - private Boolean launch = false; + private Boolean launch; @ApiModelProperty(value = "是否可购买") - private Boolean pass = false; + private Boolean pass; + + public KanjiaActivityVO() { + this.setHelp(false); + this.setLaunch(false); + this.setPass(false); + } } \ 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 13a21aad..d68114f5 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 @@ -47,7 +47,7 @@ public interface KanjiaActivityGoodsService extends IService kanJiaGoodsVOPage(KanjiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO); + IPage kanjiaGoodsVOPage(KanjiaActivityGoodsParams kanJiaActivityGoodsParams, PageVO pageVO); /** * 查询砍价活动商品 @@ -55,7 +55,14 @@ public interface KanjiaActivityGoodsService extends IService kanJiaGoodsVOPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO pageVO) { + public IPage kanjiaGoodsVOPage(KanjiaActivityGoodsParams kanjiaActivityGoodsParams, PageVO pageVO) { return this.baseMapper.kanjiaActivityGoodsVOPage(PageUtil.initPage(pageVO),kanjiaActivityGoodsParams.wrapper()); } @@ -225,7 +225,7 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl kanjiaActivityGoodsDTOS = this.mongoTemplate.find(query, KanjiaActivityGoodsDTO.class); + return kanjiaActivityGoodsDTOS.get(0); + } + @Override public KanjiaActivityGoodsVO getKanJiaGoodsVO(String id) { @@ -252,9 +262,9 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl ids) { List skuIds = new ArrayList<>(); for (String id : ids) { - KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.getKanJiaGoodsDetail(id); + KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO = this.getKanjiaGoodsDetail(id); this.timeTrigger.delete(TimeExecuteConstant.PROMOTION_EXECUTOR, kanJiaActivityGoodsDTO.getStartTime().getTime(), DelayQueueTools.wrapperUniqueKey(DelayTypeEnums.PROMOTION, (PromotionTypeEnum.KANJIA.name() + kanJiaActivityGoodsDTO.getId())), @@ -318,8 +328,8 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl kanjiaActivityGoodsDTOList=this.mongoTemplate.find(query, KanjiaActivityGoodsDTO.class); return kanjiaActivityGoodsDTOList.get(0); } 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 index e23145ba..4711c42b 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/KanjiaActivityServiceImpl.java @@ -66,6 +66,10 @@ public class KanjiaActivityServiceImpl extends ServiceImpl i.in(MemberCoupon::getStoreId, storeId).or(j -> j.eq(MemberCoupon::getIsPlatform, true))); + queryWrapper.gt(MemberCoupon::getEndTime, new Date()); + //queryWrapper.and(i -> i.in(MemberCoupon::getStoreId, storeId).or(j -> j.eq(MemberCoupon::getIsPlatform, true))); return this.list(queryWrapper); } diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java index 581ba6e7..1a0645d5 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PromotionPriceServiceImpl.java @@ -66,7 +66,7 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { @Override public PromotionPriceDTO calculationPromotionPrice(List tradeSkuList, List memberCouponList, CartTypeEnum cartTypeEnum) { - List priceDTOList=new ArrayList<>(); + List priceDTOList = new ArrayList<>(); //拆分出SkuId列表 List skuIds = tradeSkuList.parallelStream().map(PromotionPriceParamDTO::getSkuId).collect(Collectors.toList()); @@ -75,9 +75,9 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { //判断交易类型,进行不同的处理 if (cartTypeEnum.equals(CartTypeEnum.POINTS)) { - this.pointGoodsPromotion(tradeSkuList); + priceDTOList = this.pointGoodsPromotion(tradeSkuList); } else if (cartTypeEnum.equals(CartTypeEnum.KANJIA)) { - this.kanjiaPromotion(tradeSkuList); + priceDTOList = this.kanjiaPromotion(tradeSkuList); } else { //参与计算的缓存中的商品SKU列表 List goodsSkus = goodsSkuService.getGoodsSkuByIdFromCache(skuIds); @@ -288,6 +288,8 @@ public class PromotionPriceServiceImpl implements PromotionPriceService { goodsSkuPromotionPrice.setTotalDiscountPrice(CurrencyUtil.sub(goodsSkuPromotionPrice.getOriginalPrice(), kanjiaActivityGoodsDTO.getPurchasePrice())); //购买价格=砍价成交金额 goodsSkuPromotionPrice.setTotalFinalePrice(kanjiaActivityGoodsDTO.getPurchasePrice()); + //原价 + goodsSkuPromotionPrice.setTotalOriginalPrice(goodsSkuPromotionPrice.getOriginalPrice()); priceDTOList.add(goodsSkuPromotionPrice); return priceDTOList; } 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 5df86cea..0b6f305f 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 @@ -51,7 +51,7 @@ public class KanJiaActivityGoodsManagerController { @GetMapping("/{id}") @ApiOperation(value = "获取积分商品详情") public ResultMessage getPointsGoodsDetail(@PathVariable("id") String goodsId) { - KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO = kanJiaActivityGoodsService.getKanJiaGoodsDetail(goodsId); + KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO = kanJiaActivityGoodsService.getKanjiaGoodsDetail(goodsId); return ResultUtil.data(kanJiaActivityGoodsDTO); } @@ -59,7 +59,7 @@ public class KanJiaActivityGoodsManagerController { @PutMapping @ApiOperation(value = "修改砍价商品") public ResultMessage updatePointsGoods(@RequestBody KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO) { - kanJiaActivityGoodsService.updateKanJiaActivityGoods(kanJiaActivityGoodsDTO); + kanJiaActivityGoodsService.updateKanjiaActivityGoods(kanJiaActivityGoodsDTO); return ResultUtil.success(); } From 7c48413d6b6c611558e80ec1e08126eac9ee104a Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sat, 24 Jul 2021 17:06:24 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E7=BB=93=E7=AE=97=E5=8D=95=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=A7=AF=E5=88=86=E3=80=81=E7=A0=8D=E4=BB=B7=E5=95=86?= =?UTF-8?q?=E5=93=81=E7=BB=93=E7=AE=97=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/cart/entity/enums/CartTypeEnum.java | 8 ++-- .../cart/render/impl/CartPriceRender.java | 44 ++++++++++++++++--- .../modules/order/order/entity/dos/Order.java | 11 ++++- .../order/order/entity/dos/StoreFlow.java | 11 +++++ .../order/entity/dto/PriceDetailDTO.java | 3 ++ .../entity/enums/OrderPromotionTypeEnum.java | 10 ++++- .../serviceimpl/StoreFlowServiceImpl.java | 20 ++++++--- .../lili/modules/store/entity/dos/Bill.java | 7 +++ .../lili/modules/store/mapper/BillMapper.java | 5 ++- .../store/serviceimpl/BillServiceImpl.java | 6 ++- update-sql/version4.2to4.3.sql | 5 +++ 11 files changed, 110 insertions(+), 20 deletions(-) create mode 100644 update-sql/version4.2to4.3.sql diff --git a/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java b/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java index d1aee55a..5949526a 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/entity/enums/CartTypeEnum.java @@ -16,6 +16,10 @@ public enum CartTypeEnum { * 立即购买 */ BUY_NOW, + /** + * 虚拟商品 + */ + VIRTUAL, /** * 拼团 */ @@ -24,10 +28,6 @@ public enum CartTypeEnum { * 积分 */ POINTS, - /** - * 虚拟商品 - */ - VIRTUAL, /** * 砍价商品 */ diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CartPriceRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CartPriceRender.java index 52a1b215..7b6525cf 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CartPriceRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CartPriceRender.java @@ -1,13 +1,18 @@ package cn.lili.modules.order.cart.render.impl; -import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.StrUtil; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.goods.service.CategoryService; import cn.lili.modules.order.cart.entity.dto.TradeDTO; +import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; +import cn.lili.modules.promotion.entity.dto.KanjiaActivityGoodsDTO; +import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; +import cn.lili.modules.promotion.service.KanjiaActivityGoodsService; +import cn.lili.modules.promotion.service.PointsGoodsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; @@ -33,6 +38,16 @@ public class CartPriceRender implements CartRenderStep { */ @Autowired private CategoryService categoryService; + /** + * 积分商品 + */ + @Autowired + private PointsGoodsService pointsGoodsService; + /** + * 砍价商品 + */ + @Autowired + private KanjiaActivityGoodsService kanjiaActivityGoodsService; @Override public void render(TradeDTO tradeDTO) { @@ -103,18 +118,37 @@ public class CartPriceRender implements CartRenderStep { priceDetailDTO.getCouponPrice() != null ? priceDetailDTO.getCouponPrice() : 0)); priceDetailDTO.setFlowPrice(flowPrice); - //最终结算金额 = flowPrice - platFormCommission - distributionCommission - double billPrice = CurrencyUtil.sub(CurrencyUtil.sub(flowPrice, priceDetailDTO.getPlatFormCommission()), priceDetailDTO.getDistributionCommission()); - priceDetailDTO.setBillPrice(billPrice); + //如果是普通订单最终结算金额 = flowPrice - platFormCommission - distributionCommission + //砍价、积分订单按照商品的结算价进行结算 + if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.CART) + || tradeDTO.getCartTypeEnum().equals(CartTypeEnum.BUY_NOW) + || tradeDTO.getCartTypeEnum().equals(CartTypeEnum.VIRTUAL)) { + + double billPrice = CurrencyUtil.sub(CurrencyUtil.sub(flowPrice, priceDetailDTO.getPlatFormCommission()), priceDetailDTO.getDistributionCommission()); + priceDetailDTO.setBillPrice(billPrice); + } else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)) { + PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsVOByMongo(cartSkuVO.getGoodsSku().getId()); + priceDetailDTO.setBillPrice(pointsGoodsVO.getSettlementPrice()); + priceDetailDTO.setSettlementPrice(pointsGoodsVO.getSettlementPrice()); + } else if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)) { + KanjiaActivityGoodsDTO kanjiaActivityGoodsDTO = kanjiaActivityGoodsService.getKanJiaGoodsBySku(cartSkuVO.getGoodsSku().getId()); + priceDetailDTO.setBillPrice(kanjiaActivityGoodsDTO.getSettlementPrice()); + priceDetailDTO.setSettlementPrice(kanjiaActivityGoodsDTO.getSettlementPrice()); + } + //填写结算价格 + //平台佣金 String categoryId = cartSkuVO.getGoodsSku().getCategoryPath().substring( cartSkuVO.getGoodsSku().getCategoryPath().lastIndexOf(",") + 1 ); - if (CharSequenceUtil.isNotEmpty(categoryId)) { + + //平台佣金=订单金额 * 分类佣金百分比 + if (StrUtil.isNotEmpty(categoryId)) { Double platFormCommission = CurrencyUtil.div(CurrencyUtil.mul(flowPrice, categoryService.getById(categoryId).getCommissionRate()), 100); priceDetailDTO.setPlatFormCommission(platFormCommission); } + priceDetailDTOS.add(priceDetailDTO); } } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index ee226f97..7a02f2d7 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -278,8 +278,17 @@ public class Order extends BaseEntity { //判断是否为拼团订单,如果为拼团订单获取拼团ID,判断是否为主订单 if (tradeDTO.getCartTypeEnum().name().equals(PromotionTypeEnum.PINTUAN.name())) { - Optional pintuanId = cartVO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); + Optional pintuanId = cartVO.getSkuList().get(0).getPromotions().stream() + .filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); promotionId = pintuanId.get(); + }else if (tradeDTO.getCartTypeEnum().name().equals(PromotionTypeEnum.POINTS_GOODS.name())) { + Optional pointsGoodsId = cartVO.getSkuList().get(0).getPromotions().stream() + .filter(i -> i.getPromotionType().equals(PromotionTypeEnum.POINTS_GOODS.name())).map(PromotionGoods::getPromotionId).findFirst(); + promotionId = pointsGoodsId.get(); + }else if (tradeDTO.getCartTypeEnum().name().equals(PromotionTypeEnum.KANJIA.name())) { + Optional kanjiaId = cartVO.getSkuList().get(0).getPromotions().stream() + .filter(i -> i.getPromotionType().equals(PromotionTypeEnum.KANJIA.name())).map(PromotionGoods::getPromotionId).findFirst(); + promotionId = kanjiaId.get(); } } } diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/StoreFlow.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/StoreFlow.java index c4747861..5f3813ec 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/StoreFlow.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/StoreFlow.java @@ -91,6 +91,17 @@ public class StoreFlow { @ApiModelProperty(value = "流水类型:PAY/REFUND 支付/退款", allowableValues = "PAY,REFUND") private String flowType; + /** + * @see cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum + */ + @ApiModelProperty(value = "订单促销类型") + private String orderPromotionType; + + @ApiModelProperty(value = "积分活动商品结算价格") + private Double pointSettlementPrice; + + @ApiModelProperty(value = "砍价活动商品结算价格") + private Double kanjiaSettlementPrice; @ApiModelProperty(value = "平台优惠券 使用金额") private Double siteCouponPrice; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PriceDetailDTO.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PriceDetailDTO.java index 06ab410c..df94d02c 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PriceDetailDTO.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dto/PriceDetailDTO.java @@ -81,6 +81,9 @@ public class PriceDetailDTO implements Serializable { @ApiModelProperty(value = "流水金额(入账 出帐金额) = goodsPrice + freight - discountPrice - couponPrice + updatePrice") private Double flowPrice; + @ApiModelProperty(value = "结算价格") + private Double settlementPrice; + @ApiModelProperty(value = "最终结算金额 = flowPrice - platFormCommission - distributionCommission") private Double billPrice; diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderPromotionTypeEnum.java b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderPromotionTypeEnum.java index ac06e73c..f3f0a8b7 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderPromotionTypeEnum.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/enums/OrderPromotionTypeEnum.java @@ -8,6 +8,10 @@ package cn.lili.modules.order.order.entity.enums; */ public enum OrderPromotionTypeEnum { + /** + * 普通订单 + */ + NORMAL, /** * 赠品订单 */ @@ -19,6 +23,10 @@ public enum OrderPromotionTypeEnum { /** * 积分订单 */ - POINT + POINT, + /** + * 砍价订单 + */ + KANJIA } diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java index 5eb8d19f..46c84483 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/StoreFlowServiceImpl.java @@ -7,6 +7,7 @@ import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.OrderItem; import cn.lili.modules.order.order.entity.dos.StoreFlow; import cn.lili.modules.order.order.entity.enums.FlowTypeEnum; +import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.mapper.StoreFlowMapper; import cn.lili.modules.order.order.service.OrderItemService; @@ -24,7 +25,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -62,14 +62,13 @@ public class StoreFlowServiceImpl extends ServiceImpl sns = new ArrayList<>(); - sns.add(order.getSn()); - sns.add(order.getTradeSn()); - //如果查询到多条支付记录,打印日志 if (order.getPayStatus().equals(PayStatusEnum.PAID.name())) { log.error("订单[{}]检测到重复付款,请处理", orderSn); } + + //获取订单促销类型,如果为促销订单则获取促销商品并获取结算价 + String orderPromotionType = order.getOrderPromotionType(); //循环子订单记录流水 for (OrderItem item : orderItems) { StoreFlow storeFlow = new StoreFlow(); @@ -92,6 +91,13 @@ public class StoreFlowServiceImpl extends ServiceImpl lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(StoreFlow::getStoreId, storeId); - lambdaQueryWrapper.isNotNull(distribution,StoreFlow::getDistributionRebate); + lambdaQueryWrapper.isNotNull(distribution, StoreFlow::getDistributionRebate); lambdaQueryWrapper.between(StoreFlow::getCreateTime, startTime, endTime); - lambdaQueryWrapper.eq(StringUtils.isNotEmpty(type),StoreFlow::getFlowType, type); + lambdaQueryWrapper.eq(StringUtils.isNotEmpty(type), StoreFlow::getFlowType, type); return this.page(PageUtil.initPage(pageVO), lambdaQueryWrapper); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/store/entity/dos/Bill.java b/framework/src/main/java/cn/lili/modules/store/entity/dos/Bill.java index 8f0aaaf5..19f96dd9 100644 --- a/framework/src/main/java/cn/lili/modules/store/entity/dos/Bill.java +++ b/framework/src/main/java/cn/lili/modules/store/entity/dos/Bill.java @@ -92,6 +92,7 @@ public class Bill { * -commissionPrice+refundCommissionPrice * -distributionCommission+distributionRefundCommission * +siteCouponCommission-siteCouponRefundCommission + * +kanjiaSettlementPrice+pointSettlementPrice */ @ApiModelProperty(value = "结算周期内订单付款总金额") private Double orderPrice; @@ -117,6 +118,12 @@ public class Bill { @ApiModelProperty(value = "退货平台优惠券补贴返还") private Double siteCouponRefundCommission; + @ApiModelProperty(value = "积分商品结算价格") + private Double pointSettlementPrice; + + @ApiModelProperty(value = "砍价商品结算价格") + private Double kanjiaSettlementPrice; + @ApiModelProperty(value = "最终结算金额") private Double billPrice; diff --git a/framework/src/main/java/cn/lili/modules/store/mapper/BillMapper.java b/framework/src/main/java/cn/lili/modules/store/mapper/BillMapper.java index 9fdef23f..040ab507 100644 --- a/framework/src/main/java/cn/lili/modules/store/mapper/BillMapper.java +++ b/framework/src/main/java/cn/lili/modules/store/mapper/BillMapper.java @@ -37,7 +37,10 @@ public interface BillMapper extends BaseMapper { */ @Select("SELECT SUM( final_price ) AS orderPrice,SUM( commission_price ) AS commissionPrice" + ",SUM( distribution_rebate ) AS distributionCommission,SUM( site_coupon_commission ) AS siteCouponCommission" + - ",SUM( bill_price ) AS billPrice FROM li_store_flow ${ew.customSqlSegment}") + ",SUM( point_settlement_price ) AS pointSettlementPrice " + + ",SUM( kanjia_settlement_price ) AS kanjiaSettlementPrice " + + ",SUM( bill_price ) AS billPrice " + + "FROM li_store_flow ${ew.customSqlSegment}") Bill getOrderBill(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); /** diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java index e72d7729..6dfe5fdd 100644 --- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/BillServiceImpl.java @@ -89,7 +89,11 @@ public class BillServiceImpl extends ServiceImpl implements Bi bill.setCommissionPrice(orderBill.getCommissionPrice()); bill.setDistributionCommission(orderBill.getDistributionCommission()); bill.setSiteCouponCommission(orderBill.getSiteCouponCommission()); - orderPrice = orderBill.getBillPrice(); + bill.setPointSettlementPrice(orderBill.getPointSettlementPrice()); + bill.setKanjiaSettlementPrice(orderBill.getKanjiaSettlementPrice()); + //入账金额=订单金额+积分商品+砍价商品 + orderPrice = CurrencyUtil.add(CurrencyUtil.add(orderBill.getBillPrice(), orderBill.getPointSettlementPrice()), + orderBill.getKanjiaSettlementPrice()); } diff --git a/update-sql/version4.2to4.3.sql b/update-sql/version4.2to4.3.sql new file mode 100644 index 00000000..52e00042 --- /dev/null +++ b/update-sql/version4.2to4.3.sql @@ -0,0 +1,5 @@ +/** 添加结算单积分、砍价结算价信息**/ +ALTER TABLE li_bill ADD point_settlement_price double DEFAULT 0.00 COMMENT '积分商品结算金额 '; +ALTER TABLE li_bill ADD kanjia_settlement_price double DEFAULT 0.00 COMMENT '砍价商品结算金额'; +ALTER TABLE li_store_flow ADD point_settlement_price double DEFAULT 0.00 COMMENT '积分商品结算金额'; +ALTER TABLE li_store_flow ADD kanjia_settlement_price double DEFAULT 0.00 COMMENT '砍价商品结算金额'; \ No newline at end of file From 2e2ba961d9a7849515cd16e6db35b8f754bc79f7 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Sat, 24 Jul 2021 17:56:43 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=B8=AD=E5=AD=98=E5=85=A5=E7=A0=8D=E4=BB=B7=E3=80=81=E7=A7=AF?= =?UTF-8?q?=E5=88=86=E5=95=86=E5=93=81=E7=9A=84=E4=BF=83=E9=94=80=E5=95=86?= =?UTF-8?q?=E5=93=81ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/lili/modules/order/order/entity/dos/Order.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java index 7a02f2d7..cc4bf871 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java +++ b/framework/src/main/java/cn/lili/modules/order/order/entity/dos/Order.java @@ -281,14 +281,6 @@ public class Order extends BaseEntity { Optional pintuanId = cartVO.getSkuList().get(0).getPromotions().stream() .filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); promotionId = pintuanId.get(); - }else if (tradeDTO.getCartTypeEnum().name().equals(PromotionTypeEnum.POINTS_GOODS.name())) { - Optional pointsGoodsId = cartVO.getSkuList().get(0).getPromotions().stream() - .filter(i -> i.getPromotionType().equals(PromotionTypeEnum.POINTS_GOODS.name())).map(PromotionGoods::getPromotionId).findFirst(); - promotionId = pointsGoodsId.get(); - }else if (tradeDTO.getCartTypeEnum().name().equals(PromotionTypeEnum.KANJIA.name())) { - Optional kanjiaId = cartVO.getSkuList().get(0).getPromotions().stream() - .filter(i -> i.getPromotionType().equals(PromotionTypeEnum.KANJIA.name())).map(PromotionGoods::getPromotionId).findFirst(); - promotionId = kanjiaId.get(); } } } From 02f3bde2b47054d3bfc95842e982dba7c8b43552 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Tue, 27 Jul 2021 15:33:11 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E7=A7=AF=E5=88=86=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E3=80=81=E7=94=A8=E6=88=B7=E4=B8=8B=E5=8D=95=E7=A7=AF=E5=88=86?= =?UTF-8?q?=E6=95=B0=E5=80=BC=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/PointsHistoryBuyerController.java | 2 +- .../main/java/cn/lili/common/enums/ResultCode.java | 1 + .../order/cart/render/impl/CheckDataRender.java | 14 +++++++++++--- .../order/order/serviceimpl/TradeServiceImpl.java | 2 +- .../serviceimpl/PointsGoodsServiceImpl.java | 4 ++-- .../serviceimpl/PromotionServiceImpl.java | 8 +++----- .../passport/AdminUserManagerController.java | 6 ------ .../promotion/PointsGoodsManagerController.java | 2 +- 8 files changed, 20 insertions(+), 19 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/member/PointsHistoryBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/member/PointsHistoryBuyerController.java index acea7dc5..8bc163f1 100644 --- a/buyer-api/src/main/java/cn/lili/controller/member/PointsHistoryBuyerController.java +++ b/buyer-api/src/main/java/cn/lili/controller/member/PointsHistoryBuyerController.java @@ -37,7 +37,7 @@ public class PointsHistoryBuyerController { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(MemberPointsHistory::getMemberId, UserContext.getCurrentUser().getId()); - + queryWrapper.orderByDesc(MemberPointsHistory::getCreateTime); return ResultUtil.data(memberPointsHistoryService.page(PageUtil.initPage(page), queryWrapper)); } 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 dd66819a..d971db28 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -125,6 +125,7 @@ public enum ResultCode { USER_OVERDUE_CONNECT_ERROR(20022, "授权信息已过期,请重新授权/登录"), USER_CONNECT_BANDING_ERROR(20023, "当前联合登陆方式,已绑定其他账号,需进行解绑操作"), USER_CONNECT_NOT_EXIST_ERROR(20024, "暂无联合登陆信息,无法实现一键注册功能,请点击第三方登录进行授权"), + USER_POINTS_ERROR(20024, "用户积分不足"), /** * 权限 diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java index e43c680a..03877b42 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java @@ -10,6 +10,8 @@ import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; 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.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; @@ -49,6 +51,9 @@ public class CheckDataRender implements CartRenderStep { @Autowired private PintuanService pintuanService; + @Autowired + private MemberService memberService; + @Override public void render(TradeDTO tradeDTO) { //预校验 @@ -159,9 +164,12 @@ public class CheckDataRender implements CartRenderStep { } } } - - }else if(tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)){ - + //积分商品,判断用户积分是否满足 + }else if(tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)){ + Member member=memberService.getUserInfo(); + if(member.getPoint() implements TradeService { /** * 缓存 */ @Autowired private Cache cache; /** * 订单 */ @Autowired private OrderService orderService; /** * 会员 */ @Autowired private MemberService memberService; /** * 优惠券 */ @Autowired private CouponService couponService; /** * 会员优惠券 */ @Autowired private MemberCouponService memberCouponService; /** * RocketMQ */ @Autowired private RocketMQTemplate rocketMQTemplate; /** * RocketMQ 配置 */ @Autowired private RocketmqCustomProperties rocketmqCustomProperties; @Override @Transactional(rollbackFor = Exception.class) public Trade createTrade(TradeDTO tradeDTO) { //创建订单预校验 createTradeCheck(tradeDTO); Trade trade = new Trade(tradeDTO); String key = CachePrefix.TRADE.getPrefix() + trade.getSn(); //积分预处理 pointPretreatment(tradeDTO); //优惠券预处理 couponPretreatment(tradeDTO); //添加交易 this.save(trade); //添加订单 orderService.intoDB(tradeDTO); //写入缓存,给消费者调用 cache.put(key, tradeDTO); //构建订单创建消息 String destination = rocketmqCustomProperties.getOrderTopic() + ":" + MqOrderTagsEnum.ORDER_CREATE.name(); //发送订单创建消息 rocketMQTemplate.asyncSend(destination, key, RocketmqSendCallbackBuilder.commonCallback()); return trade; } /** * 创建订单最后一步校验 * * @param tradeDTO */ private void createTradeCheck(TradeDTO tradeDTO) { //创建订单如果没有收获地址, MemberAddress memberAddress = tradeDTO.getMemberAddress(); if (memberAddress == null) { throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } /** * 订单配送区域校验 */ if (tradeDTO.getNotSupportFreight() != null && tradeDTO.getNotSupportFreight().size() > 0) { StringBuilder stringBuilder = new StringBuilder("包含商品有-"); tradeDTO.getNotSupportFreight().forEach(sku -> { stringBuilder.append(sku.getGoodsSku().getGoodsName()); }); throw new ServiceException(ResultCode.ORDER_NOT_SUPPORT_DISTRIBUTION, stringBuilder.toString()); } } @Override public Trade getBySn(String sn) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Trade::getSn, sn); return this.getOne(queryWrapper); } @Override public void payTrade(String tradeSn, String paymentName, String receivableNo) { LambdaQueryWrapper orderQueryWrapper = new LambdaQueryWrapper<>(); orderQueryWrapper.eq(Order::getTradeSn, tradeSn); List orders = orderService.list(orderQueryWrapper); for (Order order : orders) { orderService.payOrder(order.getSn(), paymentName, receivableNo); } Trade trade = this.getBySn(tradeSn); trade.setPayStatus(PayStatusEnum.PAID.name()); this.saveOrUpdate(trade); } /** * 积分预处理 * 下单同时,使用积分 * * @param tradeDTO */ private void pointPretreatment(TradeDTO tradeDTO) { StringBuilder orderSns = new StringBuilder(); for (CartVO item : tradeDTO.getCartList()) { orderSns.append(item.getSn()).append(","); } if (tradeDTO.getPriceDetailDTO() != null && tradeDTO.getPriceDetailDTO().getPayPoint() != null && tradeDTO.getPriceDetailDTO().getPayPoint() > 0) { Member userInfo = memberService.getUserInfo(); if (userInfo.getPoint() < tradeDTO.getPriceDetailDTO().getPayPoint()) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } boolean result = memberService.updateMemberPoint(tradeDTO.getPriceDetailDTO(). getPayPoint().longValue(), false, tradeDTO.getMemberId(), "订单【" + orderSns + "】创建,积分扣减"); if (!result) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } } } /** * 优惠券预处理 * 下单同时,扣除优惠券 * * @param tradeDTO */ private void couponPretreatment(TradeDTO tradeDTO) { List memberCouponDTOList = new ArrayList<>(); if (null != tradeDTO.getPlatformCoupon()) { memberCouponDTOList.add(tradeDTO.getPlatformCoupon()); } Collection storeCoupons = tradeDTO.getStoreCoupons().values(); if (!storeCoupons.isEmpty()) { memberCouponDTOList.addAll(storeCoupons); } List ids = memberCouponDTOList.stream().map(e -> e.getMemberCoupon().getId()).collect(Collectors.toList()); memberCouponService.used(ids); memberCouponDTOList.forEach(e -> couponService.usedCoupon(e.getMemberCoupon().getCouponId(), 1)); } } \ No newline at end of file +package cn.lili.modules.order.order.serviceimpl; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.MqOrderTagsEnum; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.mapper.TradeMapper; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.TradeService; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.MemberCouponService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; /** * 交易业务层实现 * * @author Chopper * @date 2020/11/17 7:39 下午 */ @Service @Transactional(rollbackFor = Exception.class) public class TradeServiceImpl extends ServiceImpl implements TradeService { /** * 缓存 */ @Autowired private Cache cache; /** * 订单 */ @Autowired private OrderService orderService; /** * 会员 */ @Autowired private MemberService memberService; /** * 优惠券 */ @Autowired private CouponService couponService; /** * 会员优惠券 */ @Autowired private MemberCouponService memberCouponService; /** * RocketMQ */ @Autowired private RocketMQTemplate rocketMQTemplate; /** * RocketMQ 配置 */ @Autowired private RocketmqCustomProperties rocketmqCustomProperties; @Override @Transactional(rollbackFor = Exception.class) public Trade createTrade(TradeDTO tradeDTO) { //创建订单预校验 createTradeCheck(tradeDTO); Trade trade = new Trade(tradeDTO); String key = CachePrefix.TRADE.getPrefix() + trade.getSn(); //积分预处理 pointPretreatment(tradeDTO); //优惠券预处理 couponPretreatment(tradeDTO); //添加交易 this.save(trade); //添加订单 orderService.intoDB(tradeDTO); //写入缓存,给消费者调用 cache.put(key, tradeDTO); //构建订单创建消息 String destination = rocketmqCustomProperties.getOrderTopic() + ":" + MqOrderTagsEnum.ORDER_CREATE.name(); //发送订单创建消息 rocketMQTemplate.asyncSend(destination, key, RocketmqSendCallbackBuilder.commonCallback()); return trade; } /** * 创建订单最后一步校验 * * @param tradeDTO */ private void createTradeCheck(TradeDTO tradeDTO) { //创建订单如果没有收获地址, MemberAddress memberAddress = tradeDTO.getMemberAddress(); if (memberAddress == null) { throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } /** * 订单配送区域校验 */ if (tradeDTO.getNotSupportFreight() != null && tradeDTO.getNotSupportFreight().size() > 0) { StringBuilder stringBuilder = new StringBuilder("包含商品有-"); tradeDTO.getNotSupportFreight().forEach(sku -> { stringBuilder.append(sku.getGoodsSku().getGoodsName()); }); throw new ServiceException(ResultCode.ORDER_NOT_SUPPORT_DISTRIBUTION, stringBuilder.toString()); } } @Override public Trade getBySn(String sn) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Trade::getSn, sn); return this.getOne(queryWrapper); } @Override public void payTrade(String tradeSn, String paymentName, String receivableNo) { LambdaQueryWrapper orderQueryWrapper = new LambdaQueryWrapper<>(); orderQueryWrapper.eq(Order::getTradeSn, tradeSn); List orders = orderService.list(orderQueryWrapper); for (Order order : orders) { orderService.payOrder(order.getSn(), paymentName, receivableNo); } Trade trade = this.getBySn(tradeSn); trade.setPayStatus(PayStatusEnum.PAID.name()); this.saveOrUpdate(trade); } /** * 积分预处理 * 下单同时,使用积分 * * @param tradeDTO */ private void pointPretreatment(TradeDTO tradeDTO) { StringBuilder orderSns = new StringBuilder(); for (CartVO item : tradeDTO.getCartList()) { orderSns.append(item.getSn()); } if (tradeDTO.getPriceDetailDTO() != null && tradeDTO.getPriceDetailDTO().getPayPoint() != null && tradeDTO.getPriceDetailDTO().getPayPoint() > 0) { Member userInfo = memberService.getUserInfo(); if (userInfo.getPoint() < tradeDTO.getPriceDetailDTO().getPayPoint()) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } boolean result = memberService.updateMemberPoint(tradeDTO.getPriceDetailDTO(). getPayPoint().longValue(), false, tradeDTO.getMemberId(), "订单【" + orderSns + "】创建,积分扣减"); if (!result) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } } } /** * 优惠券预处理 * 下单同时,扣除优惠券 * * @param tradeDTO */ private void couponPretreatment(TradeDTO tradeDTO) { List memberCouponDTOList = new ArrayList<>(); if (null != tradeDTO.getPlatformCoupon()) { memberCouponDTOList.add(tradeDTO.getPlatformCoupon()); } Collection storeCoupons = tradeDTO.getStoreCoupons().values(); if (!storeCoupons.isEmpty()) { memberCouponDTOList.addAll(storeCoupons); } List ids = memberCouponDTOList.stream().map(e -> e.getMemberCoupon().getId()).collect(Collectors.toList()); memberCouponService.used(ids); memberCouponDTOList.forEach(e -> couponService.usedCoupon(e.getMemberCoupon().getCouponId(), 1)); } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java index 8d0f4c56..cf6f15e1 100644 --- a/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/promotion/serviceimpl/PointsGoodsServiceImpl.java @@ -207,8 +207,8 @@ public class PointsGoodsServiceImpl extends ServiceImpl pointsGoodsVO=this.mongoTemplate.find(query, PointsGoodsVO.class); return pointsGoodsVO.get(0); } 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 bffc9b21..f938c573 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 @@ -127,7 +127,7 @@ public class PromotionServiceImpl implements PromotionService { break; //积分商品 case POINTS_GOODS: - result = this.updatePointsGoods(promotionMessage, esPromotionKey, promotionTypeEnum); + result = this.updatePointsGoods(promotionMessage, promotionTypeEnum); break; //砍价商品商品 case KANJIA: @@ -439,11 +439,10 @@ public class PromotionServiceImpl implements PromotionService { * 修改积分商品状态 * * @param promotionMessage 信息队列传输促销信息实体 - * @param esPromotionKey es Key * @param promotionTypeEnum 促销分类枚举 * @return 修改结果 */ - private boolean updatePointsGoods(PromotionMessage promotionMessage, String esPromotionKey, PromotionTypeEnum promotionTypeEnum) { + private boolean updatePointsGoods(PromotionMessage promotionMessage, PromotionTypeEnum promotionTypeEnum) { boolean result; PointsGoodsVO pointsGoodsVO = this.mongoTemplate.findById(promotionMessage.getPromotionId(), PointsGoodsVO.class); if (pointsGoodsVO == null) { @@ -452,8 +451,6 @@ public class PromotionServiceImpl implements PromotionService { } pointsGoodsVO.setPromotionStatus(promotionMessage.getPromotionStatus()); result = this.pointsGoodsService.update(updateWrapper(promotionMessage)); - PointsGoods pointsGoods = JSONUtil.toBean(JSONUtil.toJsonStr(pointsGoodsVO), PointsGoods.class); - this.goodsIndexService.updateEsGoodsIndex(pointsGoodsVO.getSkuId(), pointsGoods, esPromotionKey, null); this.mongoTemplate.save(pointsGoodsVO); return result; } @@ -528,6 +525,7 @@ public class PromotionServiceImpl implements PromotionService { /** * 根据消息,获取update wrapper + * * @param * @return */ diff --git a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java index a347eb48..e7966201 100644 --- a/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/passport/AdminUserManagerController.java @@ -7,21 +7,15 @@ import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.token.Token; import cn.lili.common.utils.StringUtils; -<<<<<<< HEAD -import cn.lili.common.verification.service.VerificationService; -======= ->>>>>>> master import cn.lili.common.vo.PageVO; import cn.lili.common.vo.ResultMessage; import cn.lili.common.vo.SearchVO; -import cn.lili.modules.system.aspect.annotation.DemoSite; import cn.lili.modules.permission.entity.dos.AdminUser; import cn.lili.modules.permission.entity.dto.AdminUserDTO; import cn.lili.modules.permission.entity.vo.AdminUserVO; import cn.lili.modules.permission.service.AdminUserService; import cn.lili.modules.permission.service.DepartmentService; import cn.lili.modules.system.aspect.annotation.DemoSite; -import cn.lili.modules.verification.enums.VerificationEnums; import cn.lili.modules.verification.service.VerificationService; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; diff --git a/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java b/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java index e31e9d0a..db15c51f 100644 --- a/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java +++ b/manager-api/src/main/java/cn/lili/controller/promotion/PointsGoodsManagerController.java @@ -39,7 +39,7 @@ public class PointsGoodsManagerController { List collect = new ArrayList<>(); for (PointsGoodsVO i : pointsGoodsList) { i.setStoreName(i.getGoodsSku().getStoreName()); - i.setStoreId(UserContext.getCurrentUser().getStoreId()); + i.setStoreId(i.getGoodsSku().getStoreId()); collect.add(i); } pointsGoodsService.addPointsGoods(collect); From 1b60079481eb84453c6a7e29fbe56e0982ee7805 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Tue, 27 Jul 2021 16:58:38 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E5=8F=96=E6=B6=88=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=EF=BC=8C=E6=81=A2=E5=A4=8D=E7=A7=AF=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/event/impl/MemberPointExecute.java | 43 ++++++++++++++++--- .../cart/render/impl/CheckDataRender.java | 21 ++++++--- .../entity/enums/OrderPromotionTypeEnum.java | 2 +- .../order/serviceimpl/TradeServiceImpl.java | 2 +- .../service/KanjiaActivityGoodsService.java | 2 +- .../KanjiaActivityGoodsServiceImpl.java | 2 +- 6 files changed, 56 insertions(+), 16 deletions(-) diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java index 71cd6d01..1733f787 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java @@ -1,14 +1,16 @@ package cn.lili.event.impl; +import cn.hutool.core.convert.Convert; +import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.CurrencyUtil; -import cn.lili.event.AfterSaleStatusChangeEvent; -import cn.lili.event.GoodsCommentCompleteEvent; -import cn.lili.event.MemberRegisterEvent; -import cn.lili.event.OrderStatusChangeEvent; +import cn.lili.event.*; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.entity.dos.MemberEvaluation; import cn.lili.modules.member.service.MemberService; +import cn.lili.modules.order.cart.entity.dto.TradeDTO; +import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.order.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dto.OrderMessage; @@ -31,7 +33,7 @@ import org.springframework.stereotype.Service; * @since 2020-07-03 11:20 */ @Service -public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentCompleteEvent, OrderStatusChangeEvent, AfterSaleStatusChangeEvent { +public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentCompleteEvent, OrderStatusChangeEvent, AfterSaleStatusChangeEvent, TradeEvent { /** * 配置 @@ -86,7 +88,7 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp if (orderMessage.getNewStatus().equals(OrderStatusEnum.COMPLETED)) { //根据订单编号获取订单数据,如果为积分订单则跳回 Order order = orderService.getBySn(orderMessage.getOrderSn()); - if (order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINT.name())) { + if (order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINTS.name())) { return; } //获取积分设置 @@ -95,7 +97,13 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp Double point = CurrencyUtil.mul(pointSetting.getMoney(), order.getFlowPrice(), 0); //赠送会员积分 memberService.updateMemberPoint(point.longValue(), true, order.getMemberId(), "会员下单,赠送积分" + point + "分"); - + //取消订单恢复积分 + } else if (orderMessage.getNewStatus().equals(OrderStatusEnum.CANCELLED)) { + //根据订单编号获取订单数据,如果为积分订单则跳回 + Order order = orderService.getBySn(orderMessage.getOrderSn()); + if (order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINTS.name()) && order.getPriceDetailDTO().getPayPoint() != null) { + memberService.updateMemberPoint(Convert.toLong(order.getPriceDetailDTO().getPayPoint()), true, order.getMemberId(), "订单取消,恢复积分:" + order.getPriceDetailDTO().getPayPoint() + "分"); + } } } @@ -126,4 +134,25 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp Setting setting = settingService.get(SettingEnum.POINT_SETTING.name()); return new Gson().fromJson(setting.getSettingValue(), PointSetting.class); } + + /** + * 积分订单 扣除用户积分 + * + * @param tradeDTO 交易 + */ + @Override + public void orderCreate(TradeDTO tradeDTO) { + if (tradeDTO.getPriceDetailDTO() != null && tradeDTO.getPriceDetailDTO().getPayPoint() != null && tradeDTO.getPriceDetailDTO().getPayPoint() > 0) { + StringBuilder orderSns = new StringBuilder(); + for (CartVO item : tradeDTO.getCartList()) { + orderSns.append(item.getSn()); + } + boolean result = memberService.updateMemberPoint((0 - tradeDTO.getPriceDetailDTO().getPayPoint().longValue()), false, tradeDTO.getMemberId(), + "订单【" + orderSns + "】创建,积分扣减"); + + if (!result) { + throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); + } + } + } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java index 03877b42..68b2edbd 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java @@ -21,7 +21,9 @@ import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.entity.vos.PointsGoodsVO; import cn.lili.modules.promotion.service.PintuanService; +import cn.lili.modules.promotion.service.PointsGoodsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; @@ -54,6 +56,9 @@ public class CheckDataRender implements CartRenderStep { @Autowired private MemberService memberService; + @Autowired + private PointsGoodsService pointsGoodsService; + @Override public void render(TradeDTO tradeDTO) { //预校验 @@ -143,7 +148,7 @@ public class CheckDataRender implements CartRenderStep { private void preCalibration(TradeDTO tradeDTO) { //拼团订单预校验 - if(tradeDTO.getCartTypeEnum().equals(CartTypeEnum.PINTUAN)){ + if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.PINTUAN)) { //拼团判定,不能参与自己创建的拼团 if (tradeDTO.getParentOrderSn() != null) { //订单接受 @@ -164,10 +169,16 @@ public class CheckDataRender implements CartRenderStep { } } } - //积分商品,判断用户积分是否满足 - }else if(tradeDTO.getCartTypeEnum().equals(CartTypeEnum.POINTS)){ - Member member=memberService.getUserInfo(); - if(member.getPoint() implements TradeService { /** * 缓存 */ @Autowired private Cache cache; /** * 订单 */ @Autowired private OrderService orderService; /** * 会员 */ @Autowired private MemberService memberService; /** * 优惠券 */ @Autowired private CouponService couponService; /** * 会员优惠券 */ @Autowired private MemberCouponService memberCouponService; /** * RocketMQ */ @Autowired private RocketMQTemplate rocketMQTemplate; /** * RocketMQ 配置 */ @Autowired private RocketmqCustomProperties rocketmqCustomProperties; @Override @Transactional(rollbackFor = Exception.class) public Trade createTrade(TradeDTO tradeDTO) { //创建订单预校验 createTradeCheck(tradeDTO); Trade trade = new Trade(tradeDTO); String key = CachePrefix.TRADE.getPrefix() + trade.getSn(); //积分预处理 pointPretreatment(tradeDTO); //优惠券预处理 couponPretreatment(tradeDTO); //添加交易 this.save(trade); //添加订单 orderService.intoDB(tradeDTO); //写入缓存,给消费者调用 cache.put(key, tradeDTO); //构建订单创建消息 String destination = rocketmqCustomProperties.getOrderTopic() + ":" + MqOrderTagsEnum.ORDER_CREATE.name(); //发送订单创建消息 rocketMQTemplate.asyncSend(destination, key, RocketmqSendCallbackBuilder.commonCallback()); return trade; } /** * 创建订单最后一步校验 * * @param tradeDTO */ private void createTradeCheck(TradeDTO tradeDTO) { //创建订单如果没有收获地址, MemberAddress memberAddress = tradeDTO.getMemberAddress(); if (memberAddress == null) { throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } /** * 订单配送区域校验 */ if (tradeDTO.getNotSupportFreight() != null && tradeDTO.getNotSupportFreight().size() > 0) { StringBuilder stringBuilder = new StringBuilder("包含商品有-"); tradeDTO.getNotSupportFreight().forEach(sku -> { stringBuilder.append(sku.getGoodsSku().getGoodsName()); }); throw new ServiceException(ResultCode.ORDER_NOT_SUPPORT_DISTRIBUTION, stringBuilder.toString()); } } @Override public Trade getBySn(String sn) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Trade::getSn, sn); return this.getOne(queryWrapper); } @Override public void payTrade(String tradeSn, String paymentName, String receivableNo) { LambdaQueryWrapper orderQueryWrapper = new LambdaQueryWrapper<>(); orderQueryWrapper.eq(Order::getTradeSn, tradeSn); List orders = orderService.list(orderQueryWrapper); for (Order order : orders) { orderService.payOrder(order.getSn(), paymentName, receivableNo); } Trade trade = this.getBySn(tradeSn); trade.setPayStatus(PayStatusEnum.PAID.name()); this.saveOrUpdate(trade); } /** * 积分预处理 * 下单同时,使用积分 * * @param tradeDTO */ private void pointPretreatment(TradeDTO tradeDTO) { StringBuilder orderSns = new StringBuilder(); for (CartVO item : tradeDTO.getCartList()) { orderSns.append(item.getSn()); } if (tradeDTO.getPriceDetailDTO() != null && tradeDTO.getPriceDetailDTO().getPayPoint() != null && tradeDTO.getPriceDetailDTO().getPayPoint() > 0) { Member userInfo = memberService.getUserInfo(); if (userInfo.getPoint() < tradeDTO.getPriceDetailDTO().getPayPoint()) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } boolean result = memberService.updateMemberPoint(tradeDTO.getPriceDetailDTO(). getPayPoint().longValue(), false, tradeDTO.getMemberId(), "订单【" + orderSns + "】创建,积分扣减"); if (!result) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } } } /** * 优惠券预处理 * 下单同时,扣除优惠券 * * @param tradeDTO */ private void couponPretreatment(TradeDTO tradeDTO) { List memberCouponDTOList = new ArrayList<>(); if (null != tradeDTO.getPlatformCoupon()) { memberCouponDTOList.add(tradeDTO.getPlatformCoupon()); } Collection storeCoupons = tradeDTO.getStoreCoupons().values(); if (!storeCoupons.isEmpty()) { memberCouponDTOList.addAll(storeCoupons); } List ids = memberCouponDTOList.stream().map(e -> e.getMemberCoupon().getId()).collect(Collectors.toList()); memberCouponService.used(ids); memberCouponDTOList.forEach(e -> couponService.usedCoupon(e.getMemberCoupon().getCouponId(), 1)); } } \ No newline at end of file +package cn.lili.modules.order.order.serviceimpl; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.mapper.TradeMapper; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.TradeService; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.MemberCouponService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; import cn.lili.rocketmq.tags.MqOrderTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; /** * 交易业务层实现 * * @author Chopper * @date 2020/11/17 7:39 下午 */ @Service @Transactional(rollbackFor = Exception.class) public class TradeServiceImpl extends ServiceImpl implements TradeService { /** * 缓存 */ @Autowired private Cache cache; /** * 订单 */ @Autowired private OrderService orderService; /** * 会员 */ @Autowired private MemberService memberService; /** * 优惠券 */ @Autowired private CouponService couponService; /** * 会员优惠券 */ @Autowired private MemberCouponService memberCouponService; /** * RocketMQ */ @Autowired private RocketMQTemplate rocketMQTemplate; /** * RocketMQ 配置 */ @Autowired private RocketmqCustomProperties rocketmqCustomProperties; @Override @Transactional(rollbackFor = Exception.class) public Trade createTrade(TradeDTO tradeDTO) { //创建订单预校验 createTradeCheck(tradeDTO); Trade trade = new Trade(tradeDTO); String key = CachePrefix.TRADE.getPrefix() + trade.getSn(); //优惠券预处理 couponPretreatment(tradeDTO); //添加交易 this.save(trade); //添加订单 orderService.intoDB(tradeDTO); //写入缓存,给消费者调用 cache.put(key, tradeDTO); //构建订单创建消息 String destination = rocketmqCustomProperties.getOrderTopic() + ":" + MqOrderTagsEnum.ORDER_CREATE.name(); //发送订单创建消息 rocketMQTemplate.asyncSend(destination, key, RocketmqSendCallbackBuilder.commonCallback()); return trade; } /** * 创建订单最后一步校验 * * @param tradeDTO */ private void createTradeCheck(TradeDTO tradeDTO) { //创建订单如果没有收获地址, MemberAddress memberAddress = tradeDTO.getMemberAddress(); if (memberAddress == null) { throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } /** * 订单配送区域校验 */ if (tradeDTO.getNotSupportFreight() != null && tradeDTO.getNotSupportFreight().size() > 0) { StringBuilder stringBuilder = new StringBuilder("包含商品有-"); tradeDTO.getNotSupportFreight().forEach(sku -> { stringBuilder.append(sku.getGoodsSku().getGoodsName()); }); throw new ServiceException(ResultCode.ORDER_NOT_SUPPORT_DISTRIBUTION, stringBuilder.toString()); } } @Override public Trade getBySn(String sn) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Trade::getSn, sn); return this.getOne(queryWrapper); } @Override public void payTrade(String tradeSn, String paymentName, String receivableNo) { LambdaQueryWrapper orderQueryWrapper = new LambdaQueryWrapper<>(); orderQueryWrapper.eq(Order::getTradeSn, tradeSn); List orders = orderService.list(orderQueryWrapper); for (Order order : orders) { orderService.payOrder(order.getSn(), paymentName, receivableNo); } Trade trade = this.getBySn(tradeSn); trade.setPayStatus(PayStatusEnum.PAID.name()); this.saveOrUpdate(trade); } /** * 优惠券预处理 * 下单同时,扣除优惠券 * * @param tradeDTO */ private void couponPretreatment(TradeDTO tradeDTO) { List memberCouponDTOList = new ArrayList<>(); if (null != tradeDTO.getPlatformCoupon()) { memberCouponDTOList.add(tradeDTO.getPlatformCoupon()); } Collection storeCoupons = tradeDTO.getStoreCoupons().values(); if (!storeCoupons.isEmpty()) { memberCouponDTOList.addAll(storeCoupons); } List ids = memberCouponDTOList.stream().map(e -> e.getMemberCoupon().getId()).collect(Collectors.toList()); memberCouponService.used(ids); memberCouponDTOList.forEach(e -> couponService.usedCoupon(e.getMemberCoupon().getCouponId(), 1)); } } \ 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 d68114f5..7ef066bd 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 @@ -29,7 +29,7 @@ public interface KanjiaActivityGoodsService extends IService kanjiaActivityGoodsList = new ArrayList<>(); for (KanjiaActivityGoodsDTO kanJiaActivityGoodsDTO : kanJiaActivityGoodsOperationDTO.getPromotionGoodsList()) { //根据skuId查询商品信息 From ceea01ccf8a64ca2088fd4f30f57837095b703cd Mon Sep 17 00:00:00 2001 From: lifenlong Date: Tue, 27 Jul 2021 17:15:52 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E8=AF=84=E4=BB=B7=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=BA=97=E9=93=BA=E7=9A=84=E8=AF=84=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/entity/vo/MemberEvaluationListVO.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberEvaluationListVO.java b/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberEvaluationListVO.java index b7887db2..0a951462 100644 --- a/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberEvaluationListVO.java +++ b/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberEvaluationListVO.java @@ -39,8 +39,16 @@ public class MemberEvaluationListVO { @ApiModelProperty(value = "创建时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; + @ApiModelProperty(value = "物流评分") + private Integer deliveryScore; + + @ApiModelProperty(value = "服务评分") + private Integer serviceScore; + + @ApiModelProperty(value = "描述评分") + private Integer descriptionScore; }