|
@@ -13,6 +13,8 @@ import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
|
|
|
import cn.newfeifan.mall.framework.common.util.number.MoneyUtils;
|
|
|
import cn.newfeifan.mall.module.member.api.address.MemberAddressApi;
|
|
|
import cn.newfeifan.mall.module.member.api.address.dto.MemberAddressRespDTO;
|
|
|
+import cn.newfeifan.mall.module.member.dal.dataobject.user.MemberUserDO;
|
|
|
+import cn.newfeifan.mall.module.member.dal.mysql.user.MemberUserMapper;
|
|
|
import cn.newfeifan.mall.module.pay.api.order.PayOrderApi;
|
|
|
import cn.newfeifan.mall.module.pay.api.order.dto.PayOrderCreateReqDTO;
|
|
|
import cn.newfeifan.mall.module.pay.api.order.dto.PayOrderRespDTO;
|
|
@@ -56,6 +58,7 @@ import cn.newfeifan.mall.module.trade.service.price.calculator.TradePriceCalcula
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.ehcache.shadow.org.terracotta.offheapstore.HashingMap;
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
@@ -80,6 +83,9 @@ import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.*;
|
|
|
@Slf4j
|
|
|
public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
+ @Resource
|
|
|
+ private MemberUserMapper memberUserMapper;
|
|
|
+
|
|
|
@Resource
|
|
|
private ProductSkuMapper productSkuMapper;
|
|
|
|
|
@@ -125,27 +131,35 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
settlementReqVO.setAddressId(address.getId());
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- TradePriceCalculateRespBO calculateRespBO = calculatePrice(userId, settlementReqVO);
|
|
|
-
|
|
|
-
|
|
|
- AppTradeOrderSettlementRespVO respVO = TradeOrderConvert.INSTANCE.convert(calculateRespBO, address);
|
|
|
-
|
|
|
|
|
|
|
|
|
List<AppTradeOrderSettlementReqVO.Item> productSkuList = settlementReqVO.getItems();
|
|
|
- List<Long> productSkuIdList = new ArrayList<>();
|
|
|
+ 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);
|
|
|
}
|
|
|
|
|
|
List<ProductSkuDO> productSkuDOList = productSkuMapper.selectListBySKuId(productSkuIdList);
|
|
|
|
|
|
|
|
|
Map<Long,List<Long>> shopSkuIds = new HashMap<Long, List<Long>>();
|
|
|
+
|
|
|
+ Map<Long,List<AppTradeOrderSettlementReqVO.Item>> shopSkuItemMap = new HashMap<Long,List<AppTradeOrderSettlementReqVO.Item>>();
|
|
|
+
|
|
|
for(ProductSkuDO sku:productSkuDOList){
|
|
|
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);
|
|
|
+ }
|
|
|
+
|
|
|
+ itemList.add(itemMap.get(skuId));
|
|
|
+
|
|
|
List<Long> shopSkuList = shopSkuIds.get(shopId);
|
|
|
if(shopSkuList==null) {
|
|
|
shopSkuList = new ArrayList<Long>();
|
|
@@ -154,7 +168,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
shopSkuList.add(skuId);
|
|
|
}
|
|
|
|
|
|
- respVO.setShopSkuIds(shopSkuIds);
|
|
|
|
|
|
|
|
|
List<Long> shopIds = new ArrayList<Long>();
|
|
@@ -166,10 +179,65 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
for (ShopDO shopDO : shopDOList) {
|
|
|
shopNameMap.put(shopDO.getId(),shopDO.getName());
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ * add by Ben 20240402
|
|
|
+ * 原来下面的代码中是取settlementReqVO.getItems()的所有项计算的,其中Items含不同店铺的商品,现在要把不同店铺的商品分开计算
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+ Map<Long,AppTradeOrderSettlementRespVO> shopRespVOMap = new HashMap<Long,AppTradeOrderSettlementRespVO>();
|
|
|
+
|
|
|
+ Integer allShopPayPrice = 0;
|
|
|
+
|
|
|
+ Integer allShopItemPrice = 0;
|
|
|
+
|
|
|
+ Integer allShopDeliveryPrice = 0;
|
|
|
+
|
|
|
+
|
|
|
+ for(Long shopId:shopSkuItemMap.keySet()){
|
|
|
+ List<AppTradeOrderSettlementReqVO.Item> items = shopSkuItemMap.get(shopId);
|
|
|
+ AppTradeOrderSettlementReqVO shopSettlementReqVO = new AppTradeOrderSettlementReqVO();
|
|
|
+ BeanUtils.copyProperties(settlementReqVO, shopSettlementReqVO);
|
|
|
+ shopSettlementReqVO.setItems(items);
|
|
|
+ shopSettlementReqVO.setShopId(shopId);
|
|
|
+
|
|
|
+
|
|
|
+ TradePriceCalculateRespBO shopCalculateRespBO = calculatePrice(userId, shopSettlementReqVO);
|
|
|
+
|
|
|
+ AppTradeOrderSettlementRespVO respVO = TradeOrderConvert.INSTANCE.convert(shopCalculateRespBO, address);
|
|
|
+ shopRespVOMap.put(shopId,respVO);
|
|
|
+
|
|
|
+
|
|
|
+ allShopPayPrice += shopCalculateRespBO.getPrice().getPayPrice();
|
|
|
+
|
|
|
+ allShopItemPrice += shopCalculateRespBO.getPrice().getTotalPrice();
|
|
|
+
|
|
|
+ allShopDeliveryPrice += shopCalculateRespBO.getPrice().getDeliveryPrice();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ TradePriceCalculateRespBO calculateRespBO = new TradePriceCalculateRespBO();
|
|
|
+ calculateRespBO.getPrice().setPayPrice(allShopPayPrice);
|
|
|
+ calculateRespBO.getPrice().setTotalPrice(allShopItemPrice);
|
|
|
+ calculateRespBO.getPrice().setDeliveryPrice(allShopDeliveryPrice);
|
|
|
+
|
|
|
+
|
|
|
+ MemberUserDO memberUserDO = memberUserMapper.selectById(userId);
|
|
|
+ Long memberPoints = memberUserDO.getCurrentMemberPoints();
|
|
|
+
|
|
|
+
|
|
|
+ AppTradeOrderSettlementRespVO respVO = TradeOrderConvert.INSTANCE.convert(calculateRespBO, address);
|
|
|
+
|
|
|
+
|
|
|
+ respVO.setShopSkuIds(shopSkuIds);
|
|
|
respVO.setShopNameMap(shopNameMap);
|
|
|
+ respVO.setCurrentMemberPoints(memberPoints);
|
|
|
|
|
|
- System.out.println("shopSkuIds@@@@@@@@"+shopSkuIds);
|
|
|
- System.out.println("shopNameMap@@@@@@@@"+shopNameMap);
|
|
|
+
|
|
|
+
|
|
|
|
|
|
return respVO;
|
|
|
}
|
|
@@ -204,6 +272,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
TradePriceCalculateReqBO calculateReqBO = TradeOrderConvert.INSTANCE.convert(userId, settlementReqVO, cartList);
|
|
|
calculateReqBO.getItems().forEach(item -> Assert.isTrue(item.getSelected(),
|
|
|
"商品({}) 未设置为选中", item.getSkuId()));
|
|
|
+
|
|
|
+ calculateReqBO.setShopId(settlementReqVO.getShopId());
|
|
|
return tradePriceService.calculatePrice(calculateReqBO);
|
|
|
}
|
|
|
|