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 4cf13704..6c32b979 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberPointExecute.java @@ -17,6 +17,7 @@ import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.entity.dto.OrderMessage; import cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum; import cn.lili.modules.order.order.entity.enums.OrderStatusEnum; +import cn.lili.modules.order.order.entity.enums.PayStatusEnum; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum; import cn.lili.modules.system.entity.dos.Setting; @@ -62,7 +63,7 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp //获取积分设置 PointSetting pointSetting = getPointSetting(); //赠送会员积分 - memberService.updateMemberPoint(Long.valueOf(pointSetting.getRegister().longValue()), PointTypeEnum.INCREASE.name(), member.getId(), "会员注册,赠送积分" + pointSetting.getRegister() + "分"); + memberService.updateMemberPoint(pointSetting.getRegister().longValue(), PointTypeEnum.INCREASE.name(), member.getId(), "会员注册,赠送积分" + pointSetting.getRegister() + "分"); } /** @@ -75,7 +76,7 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp //获取积分设置 PointSetting pointSetting = getPointSetting(); //赠送会员积分 - memberService.updateMemberPoint(Long.valueOf(pointSetting.getComment().longValue()), PointTypeEnum.INCREASE.name(), memberEvaluation.getMemberId(), "会员评价,赠送积分" + pointSetting.getComment() + "分"); + memberService.updateMemberPoint(pointSetting.getComment().longValue(), PointTypeEnum.INCREASE.name(), memberEvaluation.getMemberId(), "会员评价,赠送积分" + pointSetting.getComment() + "分"); } /** @@ -86,30 +87,43 @@ public class MemberPointExecute implements MemberRegisterEvent, GoodsCommentComp @Override public void orderChange(OrderMessage orderMessage) { - if (orderMessage.getNewStatus().equals(OrderStatusEnum.COMPLETED)) { - Order order = orderService.getBySn(orderMessage.getOrderSn()); - //根据订单编号获取订单数据,如果订单促销类型不为空,并且订单促销类型为积分订单 则直接返回 - if (StringUtils.isNotEmpty(order.getOrderPromotionType()) && order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINTS.name())) { - return; + switch (orderMessage.getNewStatus()) { + case CANCELLED: { + Order order = orderService.getBySn(orderMessage.getOrderSn()); + Long point = order.getPriceDetailDTO().getPayPoint(); + if (point <= 0) { + return; + } + //如果未付款,则不去要退回相关代码执行 + if (order.getPayStatus().equals(PayStatusEnum.UNPAID.name())) { + return; + } + String content = "订单取消,积分返还:" + point + "分"; + //赠送会员积分 + memberService.updateMemberPoint(point, PointTypeEnum.INCREASE.name(), order.getMemberId(), content); + break; } - //获取积分设置 - PointSetting pointSetting = getPointSetting(); - //计算赠送积分数量 - Double point = CurrencyUtil.mul(pointSetting.getMoney(), order.getFlowPrice(), 0); - //赠送会员积分 - memberService.updateMemberPoint(point.longValue(), PointTypeEnum.INCREASE.name(), order.getMemberId(), "会员下单,赠送积分" + point + "分"); - //取消订单恢复积分 - } else if (orderMessage.getNewStatus().equals(OrderStatusEnum.CANCELLED)) { - //根据订单编号获取订单数据,如果为积分订单则跳回 - Order order = orderService.getBySn(orderMessage.getOrderSn()); - //增加对积分订单的判定,如果积分支付,取消订单则退还用户积分 - if (StringUtils.isNotEmpty(order.getOrderPromotionType()) && - order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINTS.name()) && order.getPriceDetailDTO().getPayPoint() != null) { - memberService.updateMemberPoint(Convert.toLong(order.getPriceDetailDTO().getPayPoint()), PointTypeEnum.INCREASE.name(), order.getMemberId(), "订单取消,恢复积分:" + order.getPriceDetailDTO().getPayPoint() + "分"); + case COMPLETED: { + Order order = orderService.getBySn(orderMessage.getOrderSn()); + //根据订单编号获取订单数据,如果订单促销类型不为空,并且订单促销类型为积分订单 则直接返回 + if (StringUtils.isNotEmpty(order.getOrderPromotionType()) && order.getOrderPromotionType().equals(OrderPromotionTypeEnum.POINTS.name())) { + return; + } + //获取积分设置 + PointSetting pointSetting = getPointSetting(); + //计算赠送积分数量 + Double point = CurrencyUtil.mul(pointSetting.getMoney(), order.getFlowPrice(), 0); + //赠送会员积分 + memberService.updateMemberPoint(point.longValue(), PointTypeEnum.INCREASE.name(), order.getMemberId(), "会员下单,赠送积分" + point + "分"); + break; } + + default: + break; } } + /** * 提交售后后扣除积分 * diff --git a/consumer/src/main/java/cn/lili/event/impl/PointExecute.java b/consumer/src/main/java/cn/lili/event/impl/PointExecute.java deleted file mode 100644 index be034348..00000000 --- a/consumer/src/main/java/cn/lili/event/impl/PointExecute.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.lili.event.impl; - -import cn.lili.event.OrderStatusChangeEvent; -import cn.lili.modules.member.entity.enums.PointTypeEnum; -import cn.lili.modules.member.service.MemberService; -import cn.lili.modules.order.order.entity.dos.Order; -import cn.lili.modules.order.order.entity.dto.OrderMessage; -import cn.lili.modules.order.order.entity.enums.PayStatusEnum; -import cn.lili.modules.order.order.service.OrderService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -/** - * 积分 - * - * @author Chopper - * @since 2021-03-13 16:58 - */ -@Slf4j -@Service -public class PointExecute implements OrderStatusChangeEvent { - - @Autowired - private MemberService memberService; - - @Autowired - private OrderService orderService; - - @Override - public void orderChange(OrderMessage orderMessage) { - - switch (orderMessage.getNewStatus()) { - case CANCELLED: - Order order = orderService.getBySn(orderMessage.getOrderSn()); - Long point = order.getPriceDetailDTO().getPayPoint(); - if (point <= 0) { - return; - } - //如果未付款,则不去要退回相关代码执行 - if (order.getPayStatus().equals(PayStatusEnum.UNPAID.name())) { - return; - } - //如果他不处于连续赠送阶段,则只赠送签到积分数 - String content = "订单取消,积分返还:" + point + "分"; - //赠送会员积分 - memberService.updateMemberPoint(point, PointTypeEnum.INCREASE.name(), order.getMemberId(), content); - break; - default: - break; - } - - - } - - -} 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 0b95a6f4..fa811003 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -335,7 +335,8 @@ public enum ResultCode { * 其他促销 */ MEMBER_SIGN_REPEAT(47001, "请勿重复签到"), - POINT_GOODS_ACTIVE_STOCK_ERROR(47002, "最低金额不能高于商品金额"), + POINT_GOODS_ACTIVE_STOCK_ERROR(47002, "活动库存数量不能高于商品库存"), + POINT_GOODS_ACTIVE_STOCK_INSUFFICIENT(47003, "积分商品库存不足"), /** * 砍价活动 diff --git a/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java index bd6f0214..d47a0d36 100644 --- a/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/distribution/entity/dto/DistributionGoodsSearchParams.java @@ -31,7 +31,7 @@ public class DistributionGoodsSearchParams extends PageVO { public QueryWrapper distributionQueryWrapper() { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq(StringUtils.isNotEmpty(goodsName), "dg.goods_name", goodsName); + queryWrapper.like(StringUtils.isNotEmpty(goodsName), "dg.goods_name", goodsName); return queryWrapper; } diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java index c8e0fe3b..56b92f3d 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/DraftGoods.java @@ -31,9 +31,10 @@ public class DraftGoods extends BaseEntity { @ApiModelProperty(value = "商品名称") private String goodsName; - @Length(max = 30, message = "商品规格编号太长,不能超过30个字符") - @ApiModelProperty(value = "商品编号") - private String sn; + @Max(value = 99999999, message = "价格不能超过99999999") + @ApiModelProperty(value = "商品价格") + private Double price; + @ApiModelProperty(value = "品牌id") private String brandId; @@ -47,9 +48,6 @@ public class DraftGoods extends BaseEntity { @ApiModelProperty(value = "卖点") private String sellingPoint; - @ApiModelProperty(value = "重量") - @Max(value = 99999999, message = "重量不能超过99999999") - private Double weight; /** * @see GoodsStatusEnum */ @@ -63,14 +61,6 @@ public class DraftGoods extends BaseEntity { @ApiModelProperty(value = "商品移动端详情") private String mobileIntro; - @Max(value = 99999999, message = "价格不能超过99999999") - @ApiModelProperty(value = "商品价格") - private Double price; - - @Max(value = 99999999, message = "成本价格99999999") - @ApiModelProperty(value = "成本价格") - private Double cost; - @ApiModelProperty(value = "购买数量") private Integer buyCount; @@ -137,7 +127,7 @@ public class DraftGoods extends BaseEntity { @ApiModelProperty(value = "商品图片JSON") private String goodsGalleryListJson; - + @ApiModelProperty(value = "sku列表JSON") private String skuListJson; diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java index 03943a5b..b9045b37 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java @@ -19,6 +19,9 @@ import lombok.Data; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.util.Map; /** @@ -33,17 +36,17 @@ import java.util.Map; public class Goods extends BaseEntity { private static final long serialVersionUID = 370683495251252601L; - /** - * 商品名称 - */ + @ApiModelProperty(value = "商品名称") + @NotEmpty(message = "商品名称不能为空") + @Length(max = 100, message = "商品名称提案仓,不能超过100个字符") private String goodsName; - /** - * 商品编号 - */ - @Length(max = 30, message = "商品规格编号太长,不能超过30个字符") - @ApiModelProperty(value = "商品编号") - private String sn; + + @ApiModelProperty(value = "商品价格", required = true) + @NotNull(message = "商品价格不能为空") + @Min(value = 0, message = "商品价格不能为负数") + @Max(value = 99999999, message = "商品价格不能超过99999999") + private Double price; @ApiModelProperty(value = "品牌id") private String brandId; @@ -54,129 +57,69 @@ public class Goods extends BaseEntity { @ApiModelProperty(value = "计量单位") private String goodsUnit; - /** - * 卖点 - */ + + @Length(max = 60, message = "商品卖点太长,不能超过60个字符") @ApiModelProperty(value = "卖点") private String sellingPoint; /** - * 重量 - */ - @ApiModelProperty(value = "重量") - @Max(value = 99999999, message = "重量不能超过99999999") - private Double weight; - /** - * 上架状态 - * * @see GoodsStatusEnum */ @ApiModelProperty(value = "上架状态") private String marketEnable; - /** - * 详情 - */ + @ApiModelProperty(value = "详情") private String intro; - /** - * 商品价格 - */ - @Max(value = 99999999, message = "价格不能超过99999999") - @ApiModelProperty(value = "商品价格") - private Double price; - /** - * 成本价格 - */ - @Max(value = 99999999, message = "成本价格99999999") - @ApiModelProperty(value = "成本价格") - private Double cost; - /** - * 购买数量 - */ @ApiModelProperty(value = "购买数量") private Integer buyCount; - /** - * 库存 - */ + @Max(value = 99999999, message = "库存不能超过99999999") @ApiModelProperty(value = "库存") private Integer quantity; - /** - * 商品好评率 - */ + @ApiModelProperty(value = "商品好评率") private Double grade; - /** - * 缩略图路径 - */ + @ApiModelProperty(value = "缩略图路径") private String thumbnail; - /** - * 小图路径 - */ + @ApiModelProperty(value = "小图路径") private String small; - /** - * 原图路径 - */ + @ApiModelProperty(value = "原图路径") private String original; - /** - * 店铺分类id - */ + @ApiModelProperty(value = "店铺分类id") private String storeCategoryPath; - /** - * 评论数量 - */ + @ApiModelProperty(value = "评论数量") private Integer commentNum; - /** - * 卖家id - */ + @ApiModelProperty(value = "卖家id") private String storeId; - /** - * 卖家名字 - */ + @ApiModelProperty(value = "卖家名字") private String storeName; - /** - * 运费模板id - */ + @ApiModelProperty(value = "运费模板id") private String templateId; - /** - * 审核状态 - * - * @see GoodsAuthEnum - */ + @ApiModelProperty(value = "审核状态") private String isAuth; - /** - * 审核信息 - */ + @ApiModelProperty(value = "审核信息") private String authMessage; - /** - * 下架原因 - */ + @ApiModelProperty(value = "下架原因") private String underMessage; - /** - * 是否自营 - */ + @ApiModelProperty(value = "是否自营") private Boolean selfOperated; - /** - * 商品移动端详情 - */ + @ApiModelProperty(value = "商品移动端详情") private String mobileIntro; - /** - * 商品视频 - */ + @ApiModelProperty(value = "商品视频") private String goodsVideo; @@ -207,9 +150,6 @@ public class Goods extends BaseEntity { this.categoryPath = goodsOperationDTO.getCategoryPath(); this.storeCategoryPath = goodsOperationDTO.getStoreCategoryPath(); this.brandId = goodsOperationDTO.getBrandId(); - this.sn = goodsOperationDTO.getSn(); - this.price = goodsOperationDTO.getPrice(); - this.weight = goodsOperationDTO.getWeight(); this.templateId = goodsOperationDTO.getTemplateId(); this.recommend = goodsOperationDTO.getRecommend(); this.sellingPoint = goodsOperationDTO.getSellingPoint(); @@ -217,8 +157,8 @@ public class Goods extends BaseEntity { this.goodsUnit = goodsOperationDTO.getGoodsUnit(); this.intro = goodsOperationDTO.getIntro(); this.mobileIntro = goodsOperationDTO.getMobileIntro(); - this.cost = goodsOperationDTO.getCost(); this.goodsVideo = goodsOperationDTO.getGoodsVideo(); + this.price = goodsOperationDTO.getPrice(); if (goodsOperationDTO.getGoodsParamsDTOList() != null && goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) { this.params = JSONUtil.toJsonStr(goodsOperationDTO.getGoodsParamsDTOList()); } diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java index a6039d8b..6c3bb520 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java @@ -29,6 +29,12 @@ public class GoodsOperationDTO implements Serializable { @ApiModelProperty(hidden = true) private String goodsId; + @ApiModelProperty(value = "商品价格", required = true) + @NotNull(message = "商品价格不能为空") + @Min(value = 0, message = "商品价格不能为负数") + @Max(value = 99999999, message = "商品价格不能超过99999999") + private Double price; + @ApiModelProperty(value = "分类path") private String categoryPath; @@ -45,25 +51,6 @@ public class GoodsOperationDTO implements Serializable { @NotEmpty(message = "商品名称不能为空") private String goodsName; - @ApiModelProperty(value = "商品编号", required = true) - @Length(max = 30, message = "商品编号太长,不能超过30个字符") - private String sn; - - @ApiModelProperty(value = "商品价格", required = true) - @NotNull(message = "商品价格不能为空") - @Min(value = 0, message = "商品价格不能为负数") - @Max(value = 99999999, message = "商品价格不能超过99999999") - private Double price; - - @ApiModelProperty(value = "市场价格", required = true) - @NotNull(message = "市场价格不能为空") - private Double cost; - - @ApiModelProperty(value = "重量", required = true) - @NotNull(message = "商品重量不能为空") - @Min(value = 0, message = "重量不能为负数") - @Max(value = 99999999, message = "重量不能超过99999999") - private Double weight; @ApiModelProperty(value = "详情") private String intro; diff --git a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java index 6e891b89..ab13aebd 100644 --- a/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java +++ b/framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSearchParams.java @@ -26,7 +26,7 @@ public class GoodsSearchParams extends PageVO { private String goodsName; @ApiModelProperty(value = "商品编号") - private String sn; + private String id; @ApiModelProperty(value = "商家ID") private String storeId; @@ -78,8 +78,8 @@ public class GoodsSearchParams extends PageVO { if (StringUtils.isNotEmpty(goodsName)) { queryWrapper.like("goods_name", goodsName); } - if (StringUtils.isNotEmpty(sn)) { - queryWrapper.eq("sn", sn); + if (StringUtils.isNotEmpty(id)) { + queryWrapper.eq("id", id); } if (StringUtils.isNotEmpty(storeId)) { queryWrapper.eq("store_id", storeId); 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 14cc677b..fa3de3ed 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 @@ -744,6 +744,10 @@ public class CartServiceImpl implements CartService { PointsGoodsVO pointsGoodsVO = pointsGoodsService.getPointsGoodsVOByMongo(cartSkuVO.getGoodsSku().getId()); if (pointsGoodsVO != null) { + + if (pointsGoodsVO.getActiveStock() < 1) { + throw new ServiceException(ResultCode.POINT_GOODS_ACTIVE_STOCK_INSUFFICIENT); + } cartSkuVO.setPoint(pointsGoodsVO.getPoints()); cartSkuVO.setPurchasePrice(0D); cartSkuVO.setPointsId(pointsGoodsVO.getId()); diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java index e037ae46..3a74708e 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/TradeServiceImpl.java @@ -1 +1 @@ -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.entity.enums.PointTypeEnum; 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.enums.CartTypeEnum; 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.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.KanjiaActivityService; 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.core.conditions.update.LambdaUpdateWrapper; 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; /** * 砍价 */ @Autowired private KanjiaActivityService kanjiaActivityService; /** * 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); //积分预处理 pointPretreatment(tradeDTO); //添加交易 this.save(trade); //添加订单 orderService.intoDB(tradeDTO); //砍价订单处理 kanjiaPretreatment(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)); } /** * 创建交易,积分处理 * * @param tradeDTO */ private void pointPretreatment(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()), PointTypeEnum.REDUCE.name(), tradeDTO.getMemberId(), "订单【" + orderSns + "】创建,积分扣减"); if (!result) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } } } /** * 创建交易、砍价处理 * @param tradeDTO */ private void kanjiaPretreatment(TradeDTO tradeDTO) { if(tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)){ String kanjiaId=tradeDTO.getSkuList().get(0).getKanjiaId(); kanjiaActivityService.update(new LambdaUpdateWrapper() .eq(KanjiaActivity::getId,kanjiaId) .set(KanjiaActivity::getStatus, KanJiaStatusEnum.END.name())); } } } \ 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.entity.enums.PointTypeEnum; 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.enums.CartTypeEnum; 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.entity.dos.KanjiaActivity; import cn.lili.modules.promotion.entity.enums.KanJiaStatusEnum; import cn.lili.modules.promotion.service.CouponService; import cn.lili.modules.promotion.service.KanjiaActivityService; 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.core.conditions.update.LambdaUpdateWrapper; 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; /** * 砍价 */ @Autowired private KanjiaActivityService kanjiaActivityService; /** * 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); //积分预处理 pointPretreatment(tradeDTO); //添加交易 this.save(trade); //添加订单 orderService.intoDB(tradeDTO); //砍价订单处理 kanjiaPretreatment(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)); } /** * 创建交易,积分处理 * * @param tradeDTO */ private void pointPretreatment(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(tradeDTO.getPriceDetailDTO().getPayPoint().longValue(), PointTypeEnum.REDUCE.name(), tradeDTO.getMemberId(), "订单【" + orderSns + "】创建,积分扣减"); if (!result) { throw new ServiceException(ResultCode.PAY_POINT_ENOUGH); } } } /** * 创建交易、砍价处理 * * @param tradeDTO */ private void kanjiaPretreatment(TradeDTO tradeDTO) { if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.KANJIA)) { String kanjiaId = tradeDTO.getSkuList().get(0).getKanjiaId(); kanjiaActivityService.update(new LambdaUpdateWrapper() .eq(KanjiaActivity::getId, kanjiaId) .set(KanjiaActivity::getStatus, KanJiaStatusEnum.END.name())); } } } \ 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 50e64bc2..c6cd6abd 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 @@ -185,7 +185,7 @@ public class KanjiaActivityGoodsServiceImpl extends ServiceImpl