|
@@ -51,10 +51,12 @@ import cn.newfeifan.mall.module.trade.service.delivery.DeliveryExpressService;
|
|
import cn.newfeifan.mall.module.trade.service.message.TradeMessageService;
|
|
import cn.newfeifan.mall.module.trade.service.message.TradeMessageService;
|
|
import cn.newfeifan.mall.module.trade.service.message.bo.TradeOrderMessageWhenDeliveryOrderReqBO;
|
|
import cn.newfeifan.mall.module.trade.service.message.bo.TradeOrderMessageWhenDeliveryOrderReqBO;
|
|
import cn.newfeifan.mall.module.trade.service.order.handler.TradeOrderHandler;
|
|
import cn.newfeifan.mall.module.trade.service.order.handler.TradeOrderHandler;
|
|
|
|
+import cn.newfeifan.mall.module.trade.service.order.handler.TradeProductSkuOrderHandler;
|
|
import cn.newfeifan.mall.module.trade.service.price.TradePriceService;
|
|
import cn.newfeifan.mall.module.trade.service.price.TradePriceService;
|
|
import cn.newfeifan.mall.module.trade.service.price.bo.TradePriceCalculateReqBO;
|
|
import cn.newfeifan.mall.module.trade.service.price.bo.TradePriceCalculateReqBO;
|
|
import cn.newfeifan.mall.module.trade.service.price.bo.TradePriceCalculateRespBO;
|
|
import cn.newfeifan.mall.module.trade.service.price.bo.TradePriceCalculateRespBO;
|
|
import cn.newfeifan.mall.module.trade.service.price.calculator.TradePriceCalculatorHelper;
|
|
import cn.newfeifan.mall.module.trade.service.price.calculator.TradePriceCalculatorHelper;
|
|
|
|
+import io.swagger.v3.oas.annotations.media.Schema;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.ehcache.shadow.org.terracotta.offheapstore.HashingMap;
|
|
import org.ehcache.shadow.org.terracotta.offheapstore.HashingMap;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.NotNull;
|
|
@@ -92,6 +94,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
@Resource
|
|
@Resource
|
|
private ShopMapper shopMapper;//add by ben 20240314
|
|
private ShopMapper shopMapper;//add by ben 20240314
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ private TradeProductSkuOrderHandler tradeProductSkuOrderHandler;//add by ben 20240405
|
|
|
|
+
|
|
@Resource
|
|
@Resource
|
|
private TradeOrderMapper tradeOrderMapper;
|
|
private TradeOrderMapper tradeOrderMapper;
|
|
@Resource
|
|
@Resource
|
|
@@ -217,9 +222,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
allShopDeliveryPrice += shopCalculateRespBO.getPrice().getDeliveryPrice();
|
|
allShopDeliveryPrice += shopCalculateRespBO.getPrice().getDeliveryPrice();
|
|
}
|
|
}
|
|
|
|
|
|
-// TradePriceCalculateRespBO calculateRespBO = calculatePrice(userId, settlementReqVO);
|
|
|
|
|
|
+ //********这句是要被注释掉的
|
|
|
|
+ TradePriceCalculateRespBO calculateRespBO = calculatePrice(userId, settlementReqVO);
|
|
|
|
|
|
- TradePriceCalculateRespBO calculateRespBO = new TradePriceCalculateRespBO();
|
|
|
|
|
|
+// TradePriceCalculateRespBO calculateRespBO = new TradePriceCalculateRespBO();
|
|
calculateRespBO.setPrice(new TradePriceCalculateRespBO.Price());
|
|
calculateRespBO.setPrice(new TradePriceCalculateRespBO.Price());
|
|
calculateRespBO.getPrice().setPayPrice(allShopPayPrice);
|
|
calculateRespBO.getPrice().setPayPrice(allShopPayPrice);
|
|
calculateRespBO.getPrice().setTotalPrice(allShopItemPrice);
|
|
calculateRespBO.getPrice().setTotalPrice(allShopItemPrice);
|
|
@@ -283,22 +289,88 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CREATE)
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CREATE)
|
|
public TradeOrderDO createOrder(Long userId, AppTradeOrderCreateReqVO createReqVO) {
|
|
public TradeOrderDO createOrder(Long userId, AppTradeOrderCreateReqVO createReqVO) {
|
|
- // 1.1 价格计算
|
|
|
|
- TradePriceCalculateRespBO calculateRespBO = calculatePrice(userId, createReqVO);
|
|
|
|
- // 1.2 构建订单
|
|
|
|
- TradeOrderDO order = buildTradeOrder(userId, createReqVO, calculateRespBO);
|
|
|
|
- List<TradeOrderItemDO> orderItems = buildTradeOrderItems(order, calculateRespBO);
|
|
|
|
-
|
|
|
|
- // 2. 订单创建前的逻辑
|
|
|
|
- tradeOrderHandlers.forEach(handler -> handler.beforeOrderCreate(order, orderItems));
|
|
|
|
-
|
|
|
|
- // 3. 保存订单
|
|
|
|
- tradeOrderMapper.insert(order);
|
|
|
|
- orderItems.forEach(orderItem -> orderItem.setOrderId(order.getId()));
|
|
|
|
- tradeOrderItemMapper.insertBatch(orderItems);
|
|
|
|
-
|
|
|
|
- // 4. 订单创建后的逻辑
|
|
|
|
- afterCreateTradeOrder(order, orderItems, createReqVO);
|
|
|
|
|
|
+
|
|
|
|
+ // add by Ben 20240314
|
|
|
|
+ // 4. 查询每个sku对应的店铺ID,并传回页面
|
|
|
|
+ List<AppTradeOrderSettlementReqVO.Item> productSkuList = createReqVO.getItems();
|
|
|
|
+ // 把所有商品的id都取出来,为查询所有商品的店铺做准备
|
|
|
|
+ List<Long> productSkuIdList = new ArrayList<Long>();
|
|
|
|
+ Map<Long,AppTradeOrderSettlementReqVO.Item> itemMap = new HashMap<Long,AppTradeOrderSettlementReqVO.Item>();
|
|
|
|
+ for(AppTradeOrderSettlementReqVO.Item skuItem : productSkuList){
|
|
|
|
+ productSkuIdList.add(skuItem.getSkuId());
|
|
|
|
+ itemMap.put(skuItem.getSkuId(),skuItem);
|
|
|
|
+ }
|
|
|
|
+ // 查询每个skuid对应的sku对象
|
|
|
|
+ List<ProductSkuDO> productSkuDOList = productSkuMapper.selectListBySKuId(productSkuIdList);
|
|
|
|
+
|
|
|
|
+ //key为店铺ID,value为skuid的List
|
|
|
|
+ Map<Long,List<Long>> shopSkuIds = new HashMap<Long, List<Long>>();
|
|
|
|
+ //key为店铺ID,value为item的Map
|
|
|
|
+ Map<Long,List<AppTradeOrderSettlementReqVO.Item>> shopSkuItemMap = new HashMap<Long,List<AppTradeOrderSettlementReqVO.Item>>();
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ for(ProductSkuDO sku:productSkuDOList){//把sku根据店聚合放到map中
|
|
|
|
+ Long skuId = sku.getId();
|
|
|
|
+ Long shopId = sku.getShopId();
|
|
|
|
+
|
|
|
|
+ List<AppTradeOrderSettlementReqVO.Item> itemList = shopSkuItemMap.get(shopId);
|
|
|
|
+ if(itemList==null){
|
|
|
|
+ itemList=new ArrayList<AppTradeOrderSettlementReqVO.Item>();
|
|
|
|
+ shopSkuItemMap.put(shopId,itemList);
|
|
|
|
+ }
|
|
|
|
+// AppTradeOrderSettlementReqVO.Item item = new AppTradeOrderSettlementReqVO.Item();
|
|
|
|
+ itemList.add(itemMap.get(skuId));
|
|
|
|
+
|
|
|
|
+ List<Long> shopSkuList = shopSkuIds.get(shopId);
|
|
|
|
+ if(shopSkuList==null) {
|
|
|
|
+ shopSkuList = new ArrayList<Long>();
|
|
|
|
+ shopSkuIds.put(shopId,shopSkuList);
|
|
|
|
+ }
|
|
|
|
+ shopSkuList.add(skuId);//把sku根据店聚合放到map中
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //add by Ben
|
|
|
|
+ //为键值对,键为店铺ID,值为备注文本
|
|
|
|
+ Map<Long,String> shopRemarks = createReqVO.getShopRemarks();
|
|
|
|
+
|
|
|
|
+ //循环调用原来的计算订单价格方法,计算价格
|
|
|
|
+ //循环一次生成一间店的订单
|
|
|
|
+ for(Long shopId:shopSkuItemMap.keySet()){
|
|
|
|
+
|
|
|
|
+ AppTradeOrderCreateReqVO shopCreateReqVO = new AppTradeOrderCreateReqVO();
|
|
|
|
+
|
|
|
|
+ BeanUtils.copyProperties(createReqVO, shopCreateReqVO);
|
|
|
|
+ List<AppTradeOrderSettlementReqVO.Item> itemList = shopSkuItemMap.get(shopId);//店铺的商品列表
|
|
|
|
+ shopCreateReqVO.setItems(itemList);//设置为只有一个店铺的商品列表
|
|
|
|
+
|
|
|
|
+ //设置本店的订单备注
|
|
|
|
+ String remark = shopRemarks.get(shopId);
|
|
|
|
+ shopCreateReqVO.setRemark(remark);
|
|
|
|
+
|
|
|
|
+ // 1.1 价格计算
|
|
|
|
+ TradePriceCalculateRespBO calculateRespBO = calculatePrice(userId, shopCreateReqVO);
|
|
|
|
+ // 1.2 构建订单
|
|
|
|
+ TradeOrderDO order = buildTradeOrder(userId, shopCreateReqVO, calculateRespBO);
|
|
|
|
+ List<TradeOrderItemDO> orderItems = buildTradeOrderItems(order, calculateRespBO);
|
|
|
|
+
|
|
|
|
+ // 2. 订单创建前的逻辑
|
|
|
|
+ //修改sku库存
|
|
|
|
+ tradeProductSkuOrderHandler.beforeOrderCreate(order, orderItems);
|
|
|
|
+ //下面是旧的“订单创建前的逻辑”,因为里面的修改积分、营销与我们的业务不符,所以注释掉,只保留处理sku库存的代码
|
|
|
|
+// tradeOrderHandlers.forEach(handler -> handler.beforeOrderCreate(order, orderItems));
|
|
|
|
+
|
|
|
|
+ // 3. 保存订单
|
|
|
|
+ tradeOrderMapper.insert(order);
|
|
|
|
+ orderItems.forEach(orderItem -> orderItem.setOrderId(order.getId()));
|
|
|
|
+ tradeOrderItemMapper.insertBatch(orderItems);
|
|
|
|
+
|
|
|
|
+ // 4. 订单创建后的逻辑
|
|
|
|
+ afterCreateTradeOrder(order, orderItems, shopCreateReqVO);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ TradeOrderDO order = new TradeOrderDO();
|
|
return order;
|
|
return order;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -345,7 +417,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
private void afterCreateTradeOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems,
|
|
private void afterCreateTradeOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems,
|
|
AppTradeOrderCreateReqVO createReqVO) {
|
|
AppTradeOrderCreateReqVO createReqVO) {
|
|
// 1. 执行订单创建后置处理器
|
|
// 1. 执行订单创建后置处理器
|
|
- tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(order, orderItems));
|
|
|
|
|
|
+
|
|
|
|
+ //下面的代码是
|
|
|
|
+// tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(order, orderItems));
|
|
|
|
|
|
// 2. 删除购物车商品
|
|
// 2. 删除购物车商品
|
|
Set<Long> cartIds = convertSet(createReqVO.getItems(), AppTradeOrderSettlementReqVO.Item::getCartId);
|
|
Set<Long> cartIds = convertSet(createReqVO.getItems(), AppTradeOrderSettlementReqVO.Item::getCartId);
|
|
@@ -359,7 +433,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
// 4. 插入订单日志
|
|
// 4. 插入订单日志
|
|
TradeOrderLogUtils.setOrderInfo(order.getId(), null, order.getStatus());
|
|
TradeOrderLogUtils.setOrderInfo(order.getId(), null, order.getStatus());
|
|
|
|
|
|
- // TODO @LeeYan9: 是可以思考下, 订单的营销优惠记录, 应该记录在哪里, 微信讨论起来!
|
|
|
|
|
|
+ // TODO 是可以思考下, 订单的营销优惠记录, 应该记录在哪里
|
|
}
|
|
}
|
|
|
|
|
|
private void createPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
|
|
private void createPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
|