فهرست منبع

Merge branch 'dev/2024/0529/update-app-Y' of feifan/mall-backend-app into master

修改发送微信消息
Yangzw 10 ماه پیش
والد
کامیت
78b50b1ca9

+ 1 - 1
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/aftersale/AfterSaleServiceImpl.java

@@ -312,7 +312,7 @@ public class AfterSaleServiceImpl implements AfterSaleService {
         List<Long> adminUsers = adminUserService.getUserIdsByShop(afterSale.getShopId());
         for (Long aUserId : adminUsers) {
             //发送信息
-            wcChatMessageUtils.sendWcChatMessage(afterSale.getUserId(), WcChatMessageTemplateIdEnum.AFTER_SALE_NO_CHECK2.getTemplateId(),
+            wcChatMessageUtils.sendWcChatMessage(WcChatMessageTemplateIdEnum.AFTER_SALE_NO_CHECK2.getTemplateId(),
                     params, aUserId, afterSale.getId());
         }
     }

+ 127 - 131
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

@@ -91,23 +91,17 @@ import static cn.newfeifan.mall.framework.web.core.util.WebFrameworkUtils.getTer
 import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.*;
 
 
-
 /**
  * 交易订单【写】Service 实现类
  *
  * @author LeeYan9
  * @since 2022-08-26
  */
-
-/**
- * 注释
- */
 @Service
 @Slf4j
 public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
 
-
     @Resource
     private IntegralMapper integralMapper;//add by ben 20240411
 
@@ -172,8 +166,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     /**
      * add by Ben
      * 待支付订单,点支付时的新增方法
-     * @param tradeOrderId
-     * @return
+     *
+     * @param tradeOrderId 订单id
+     * @return 支付订单
      */
     public PayOrderDO getPayOrder(Long tradeOrderId) {
 
@@ -182,29 +177,28 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
         //页面传入的订单
         TradeOrderDO orderDO = tradeOrderMapper.selectOne("id", tradeOrderId);
-       Long parentPayOrderId = orderDO.getPayOrderId();
+        Long parentPayOrderId = orderDO.getPayOrderId();
 
         //本订单对应的支付订单id,是否是多个订单支付的合并支付订单
         List<TradeOrderDO> tradeOrderList = tradeOrderMapper.selectList("pay_order_id", parentPayOrderId);
-        if(tradeOrderList.size()==1){//如果一个支付单只对应一个订单,证明不是合并支付订单
+        if (tradeOrderList.size() == 1) {//如果一个支付单只对应一个订单,证明不是合并支付订单
 
             thisPayOrderDO = payOrderMapper.selectById(parentPayOrderId);
 //            rs = thisPayOrderDO;
-        }else if(tradeOrderList.size()>1){//如果一个支付单对应多个订单,证明是合并支付订单,则生成其下级拆分支付的支付单
+        } else if (tradeOrderList.size() > 1) {//如果一个支付单对应多个订单,证明是合并支付订单,则生成其下级拆分支付的支付单
 
             PayOrderDO parentPayOrderDO = payOrderMapper.selectById(parentPayOrderId);
             LocalDateTime expireTime = parentPayOrderDO.getExpireTime();//原合并支付订单的过期时间
 
-            for (int i = 0; i < tradeOrderList.size(); i++) {
-                TradeOrderDO tradeOrderDO = tradeOrderList.get(i);
+            for (TradeOrderDO tradeOrderDO : tradeOrderList) {
                 Long tId = tradeOrderDO.getId();
                 List<TradeOrderItemDO> tradeOrderItemDOS = tradeOrderItemMapper.selectList("order_id", tId);
 
                 //创建子支付订单,并且让trade_order记录关联子支付订单
                 Long childPayOrderId = createChildPayOrder(tradeOrderDO, tradeOrderItemDOS,
-                        parentPayOrderId,expireTime);
+                        parentPayOrderId, expireTime);
 
-                if(tId==tradeOrderId){//如果当前为页面传入的订单
+                if (Objects.equals(tId, tradeOrderId)) {//如果当前为页面传入的订单
                     thisPayOrderDO = payOrderMapper.selectById(childPayOrderId);
                 }
             }
@@ -233,60 +227,60 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         // add by Ben 20240314
         // 4. 查询每个sku对应的店铺ID,并传回页面
         List<AppTradeOrderSettlementReqVO.Item> productSkuList = settlementReqVO.getItems();
-        List<Long> productSkuIdList = new ArrayList<Long>();
-        Map<Long,AppTradeOrderSettlementReqVO.Item> itemMap = new HashMap<Long,AppTradeOrderSettlementReqVO.Item>();
-        for(AppTradeOrderSettlementReqVO.Item skuItem : productSkuList){
+        List<Long> productSkuIdList = new ArrayList<>();
+        Map<Long, AppTradeOrderSettlementReqVO.Item> itemMap = new HashMap<>();
+        for (AppTradeOrderSettlementReqVO.Item skuItem : productSkuList) {
             productSkuIdList.add(skuItem.getSkuId());
-            itemMap.put(skuItem.getSkuId(),skuItem);
+            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>>();
+        Map<Long, List<Long>> shopSkuIds = new HashMap<>();
         //key为店铺ID,value为item的Map
-        Map<Long,List<AppTradeOrderSettlementReqVO.Item>> shopSkuItemMap = new HashMap<Long,List<AppTradeOrderSettlementReqVO.Item>>();
+        Map<Long, List<AppTradeOrderSettlementReqVO.Item>> shopSkuItemMap = new HashMap<>();
 
-        for(ProductSkuDO sku:productSkuDOList){//把sku根据店聚合放到map中
+        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);
+            if (itemList == null) {
+                itemList = new ArrayList<>();
+                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);
+            if (shopSkuList == null) {
+                shopSkuList = new ArrayList<>();
+                shopSkuIds.put(shopId, shopSkuList);
             }
             shopSkuList.add(skuId);//把sku根据店聚合放到map中
         }
 
 
         //把店铺id和店铺名称查出来放到map中
-        List<Long> shopIds = new ArrayList<Long>();
+        List<Long> shopIds = new ArrayList<>();
         for (Long shopid : shopSkuIds.keySet()) {
             shopIds.add(shopid);
         }
         List<ShopDO> shopDOList = shopMapper.selectListById(shopIds);
-        Map<Long,String> shopNameMap = new HashMap<Long,String>();//key为店铺id,value为店铺名
+        Map<Long, String> shopNameMap = new HashMap<>();//key为店铺id,value为店铺名
         for (ShopDO shopDO : shopDOList) {
-            shopNameMap.put(shopDO.getId(),shopDO.getName());
+            shopNameMap.put(shopDO.getId(), shopDO.getName());
         }
 
         // 2. 计算价格
-        /**
-         * add by Ben 20240402
-         * 原来下面的代码中是取settlementReqVO.getItems()的所有项计算的,其中Items含不同店铺的商品,现在要把不同店铺的商品分开计算
-         *
+        /*
+          add by Ben 20240402
+          原来下面的代码中是取settlementReqVO.getItems()的所有项计算的,其中Items含不同店铺的商品,现在要把不同店铺的商品分开计算
+
          */
         //保存每个店铺返回页面的 订单信息汇总
-        Map<Long,AppTradeOrderSettlementRespVO> shopRespVOMap = new HashMap<Long,AppTradeOrderSettlementRespVO>();
+        Map<Long, AppTradeOrderSettlementRespVO> shopRespVOMap = new HashMap<>();
         //所有店铺支付总价
         Integer allShopPayPrice = 0;
         //所有店商品不算运费的商品总价
@@ -295,7 +289,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         Integer allShopDeliveryPrice = 0;
 
         //循环计算各个店铺的价格
-        for(Long shopId:shopSkuItemMap.keySet()){
+        for (Long shopId : shopSkuItemMap.keySet()) {
             List<AppTradeOrderSettlementReqVO.Item> items = shopSkuItemMap.get(shopId);
             AppTradeOrderSettlementReqVO shopSettlementReqVO = new AppTradeOrderSettlementReqVO();
             BeanUtils.copyProperties(settlementReqVO, shopSettlementReqVO);
@@ -306,7 +300,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             TradePriceCalculateRespBO shopCalculateRespBO = calculatePrice(userId, shopSettlementReqVO);
             // 3. 拼接返回
             AppTradeOrderSettlementRespVO respVO = TradeOrderConvert.INSTANCE.convert(shopCalculateRespBO, address);
-            shopRespVOMap.put(shopId,respVO);
+            shopRespVOMap.put(shopId, respVO);
 
             //所有店铺支付总价
             allShopPayPrice += shopCalculateRespBO.getPrice().getPayPrice();
@@ -335,7 +329,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         AppTradeOrderSettlementRespVO respVO = TradeOrderConvert.INSTANCE.convert(calculateRespBO, address);
 
         //把重复的收货地址置为空
-        for(Long shopId:shopRespVOMap.keySet()){
+        for (Long shopId : shopRespVOMap.keySet()) {
             AppTradeOrderSettlementRespVO a = shopRespVOMap.get(shopId);
             a.setAddress(null);
         }
@@ -388,7 +382,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     }
 
 
-
     /**
      * add by Ben
      * 计算订单含积分的各项商品价格
@@ -412,18 +405,18 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     }
 
     //把数据库的钱转换为数据库的积分
-    public static BigDecimal money2Integral(BigDecimal money){
+    public static BigDecimal money2Integral(BigDecimal money) {
         return money.multiply(DistriConstants.MONEY2INTEGRAL_BIG_DECIMAL);
     }
 
     //把数据库的钱转换为数据库的积分
-    public static Long money2Integral(Integer money){
-        return Long.valueOf(money*DistriConstants.MONEY2INTEGRAL);
+    public static Long money2Integral(Integer money) {
+        return Long.valueOf(money * DistriConstants.MONEY2INTEGRAL);
     }
 
     //把数据库的积分转换为数据库的钱
-    public static Integer integral2Money(Long integral){
-        Long l = (integral/DistriConstants.MONEY2INTEGRAL);
+    public static Integer integral2Money(Long integral) {
+        Long l = (integral / DistriConstants.MONEY2INTEGRAL);
         return l.intValue();
     }
 
@@ -436,23 +429,23 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         //查询订单提成比例
         QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
         OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
-        /**
+        /*
          * 毛利 = 成本 * 0.38... (推广费用)
          */
         String grossProfitPerc = orderPercentageDO.getGrossProfitPerc();
         float grossProfitPercFloat = Float.parseFloat(grossProfitPerc);
-        if(grossProfitPercFloat>1){
-            throw new RuntimeException("商品毛利值,占利润比例异常,达到"+grossProfitPerc+"!!");
+        if (grossProfitPercFloat > 1) {
+            throw new RuntimeException("商品毛利值,占利润比例异常,达到" + grossProfitPerc + "!!");
         }
 
 
-        /**
+        /*
          * 购物本人自得 百分比
          */
         String grossProfitUserQuotaPerc = orderPercentageDO.getGrossProfitUserQuotaPerc();
         float grossProfitUserQuotaPercFloat = Float.parseFloat(grossProfitUserQuotaPerc);
-        if(grossProfitUserQuotaPercFloat>0.5){
-            throw new RuntimeException("消费本人获得积分,占毛利比例异常,达到"+grossProfitUserQuotaPerc+"!!");
+        if (grossProfitUserQuotaPercFloat > 0.5) {
+            throw new RuntimeException("消费本人获得积分,占毛利比例异常,达到" + grossProfitUserQuotaPerc + "!!");
         }
 
         //校验最大值 end
@@ -462,43 +455,42 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         // 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){
+        List<Long> productSkuIdList = new ArrayList<>();
+        Map<Long, AppTradeOrderSettlementReqVO.Item> itemMap = new HashMap<>();
+        for (AppTradeOrderSettlementReqVO.Item skuItem : productSkuList) {
             productSkuIdList.add(skuItem.getSkuId());
-            itemMap.put(skuItem.getSkuId(),skuItem);
+            itemMap.put(skuItem.getSkuId(), skuItem);
         }
         // 查询每个skuid对应的sku对象
         List<ProductSkuDO> productSkuDOList = productSkuMapper.selectListBySKuId(productSkuIdList);
 
-        Map<Long,Long> shopMerchantMap = new HashMap<Long,Long>();//key是店铺ID,value是商户ID
-        for(ProductSkuDO productSkuDO:productSkuDOList){
-            shopMerchantMap.put(productSkuDO.getShopId(),productSkuDO.getMerchantId());
+        Map<Long, Long> shopMerchantMap = new HashMap<>();//key是店铺ID,value是商户ID
+        for (ProductSkuDO productSkuDO : productSkuDOList) {
+            shopMerchantMap.put(productSkuDO.getShopId(), productSkuDO.getMerchantId());
         }
 
         //key为店铺ID,value为skuid的List
-        Map<Long,List<Long>> shopSkuIds = new HashMap<Long, List<Long>>();
+        Map<Long, List<Long>> shopSkuIds = new HashMap<>();
         //key为店铺ID,value为item的Map
-        Map<Long,List<AppTradeOrderSettlementReqVO.Item>> shopSkuItemMap = new HashMap<Long,List<AppTradeOrderSettlementReqVO.Item>>();
+        Map<Long, List<AppTradeOrderSettlementReqVO.Item>> shopSkuItemMap = new HashMap<>();
 
 
-
-        for(ProductSkuDO sku:productSkuDOList){//把sku根据店聚合放到map中
+        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);
+            if (itemList == null) {
+                itemList = new ArrayList<>();
+                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);
+            if (shopSkuList == null) {
+                shopSkuList = new ArrayList<>();
+                shopSkuIds.put(shopId, shopSkuList);
             }
             shopSkuList.add(skuId);//把sku根据店聚合放到map中
         }
@@ -506,18 +498,18 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
         //add by Ben
         //为键值对,键为店铺ID,值为备注文本
-        Map<Long,String> shopRemarks = createReqVO.getShopRemarks();
-        if(shopRemarks==null){
-            shopRemarks = new HashMap<Long,String>();
+        Map<Long, String> shopRemarks = createReqVO.getShopRemarks();
+        if (shopRemarks == null) {
+            shopRemarks = new HashMap<>();
         }
 
         //消费者在页面录入的,要使用的积分
         Long payPoints = createReqVO.getPayIntegral();
 
-        if(payPoints == null){
-            payPoints = 0l;
-        }else{//把页面传入的,1积分=1元钱的积分,转换为后台保存到数据库的积分值
-            payPoints = payPoints* DistriConstants.INTEGRAL_PAGE2DB;
+        if (payPoints == null) {
+            payPoints = 0L;
+        } else {//把页面传入的,1积分=1元钱的积分,转换为后台保存到数据库的积分值
+            payPoints = payPoints * DistriConstants.INTEGRAL_PAGE2DB;
         }
 
 
@@ -528,7 +520,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         //计算分摊的积分金额
         List<Integer> dividePoints = TradePriceCalculatorHelper.dividePrice(tradePriceCalculateRespBO.getItems(), integral2Money(payPoints));
         //键为skuId,value为单个商品项信息
-        Map<Long, TradePriceCalculateRespBO.OrderItem> itemPayPointsMap = new HashMap<Long, TradePriceCalculateRespBO.OrderItem>();
+        Map<Long, TradePriceCalculateRespBO.OrderItem> itemPayPointsMap = new HashMap<>();
 
         //订单项数组
         List<TradePriceCalculateRespBO.OrderItem> priceOrderItems = tradePriceCalculateRespBO.getItems();
@@ -536,16 +528,16 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             TradePriceCalculateRespBO.OrderItem orderItem = priceOrderItems.get(i);
             Long itemPoint = money2Integral(dividePoints.get(i));//每项商品使用的积分
             orderItem.setPayPoints(itemPoint);
-            itemPayPointsMap.put(orderItem.getSkuId(),orderItem);
+            itemPayPointsMap.put(orderItem.getSkuId(), orderItem);
         }
 
         Integer allShopPayRMB = 0;//所有店铺订单实际支付的金额
 
-        List<Map<String,Object>> orderMapList = new ArrayList<Map<String,Object>>();
+        List<Map<String, Object>> orderMapList = new ArrayList<>();
 
         //循环调用原来的计算订单价格方法,计算价格
         //循环一次生成一间店的订单
-        for(Long shopId:shopSkuItemMap.keySet()){
+        for (Long shopId : shopSkuItemMap.keySet()) {
 
             AppTradeOrderCreateReqVO shopCreateReqVO = new AppTradeOrderCreateReqVO();
 
@@ -570,10 +562,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 //            tradeOrderHandlers.forEach(handler -> handler.beforeOrderCreate(order, orderItems));
 
             // 3. 保存一间店铺的订单
-            Long shopPayPoints = 0l;//一间店铺订单总支付积分
+            Long shopPayPoints = 0L;//一间店铺订单总支付积分
             Integer shopPayPrice = 0;//一间店铺订单总支付价格
 
-            for(TradeOrderItemDO orderItem:orderItems){//一间店铺订单的所有商品项
+            for (TradeOrderItemDO orderItem : orderItems) {//一间店铺订单的所有商品项
 //                orderItem.setOrderId(order.getId());
 
                 //3.5 add by Ben
@@ -581,7 +573,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 Long skuId = orderItem.getSkuId();
                 TradePriceCalculateRespBO.OrderItem orderItemTmp = itemPayPointsMap.get(skuId);
                 orderItem.setPayIntegral(orderItemTmp.getPayPoints()); //本商品使用积分
-                Integer payRmb = orderItem.getPrice()*orderItem.getCount()-integral2Money(orderItemTmp.getPayPoints());//本商品实付人民币
+                Integer payRmb = orderItem.getPrice() * orderItem.getCount() - integral2Money(orderItemTmp.getPayPoints());//本商品实付人民币
                 orderItem.setPayRmb(payRmb);//本商品实付人民币
                 orderItem.setPayPrice(payRmb);//本商品实付人民币
 
@@ -589,9 +581,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 shopPayPrice += payRmb;//一间店铺订单总支付价格
             }
 
-            shopPayPrice+=order.getDeliveryPrice();//店铺支付总金额,加上运费
+            shopPayPrice += order.getDeliveryPrice();//店铺支付总金额,加上运费
 
-            allShopPayRMB +=shopPayPrice;
+            allShopPayRMB += shopPayPrice;
 
             Long merchantId = shopMerchantMap.get(shopId);//商户ID
 
@@ -610,46 +602,46 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             afterCreateTradeOrder(order, orderItems, shopCreateReqVO);
 
 //            Map<>
-            Map<String,Object> orderMap = new HashMap<String,Object>();
-            orderMap.put("order",order);
-            orderMap.put("orderItems",orderItems);
+            Map<String, Object> orderMap = new HashMap<>();
+            orderMap.put("order", order);
+            orderMap.put("orderItems", orderItems);
             orderMapList.add(orderMap);//把订单保存起来,为支付订单做准备
         }
 
         TradeOrderDO virtualOrder = new TradeOrderDO();//为了生成支付订单,创建的虚拟订单,本订单不会保存到数据库
-        TradeOrderDO firstOrder = (TradeOrderDO)(orderMapList.get(0).get("order"));
-        List<TradeOrderItemDO> firstOrderItems = (List<TradeOrderItemDO>)(orderMapList.get(0).get("orderItems"));
+        TradeOrderDO firstOrder = (TradeOrderDO) (orderMapList.get(0).get("order"));
+        List<TradeOrderItemDO> firstOrderItems = (List<TradeOrderItemDO>) (orderMapList.get(0).get("orderItems"));
 
         BeanUtils.copyProperties(firstOrder, virtualOrder);
         virtualOrder.setPayPrice(allShopPayRMB);
         virtualOrder.setPayRmb(allShopPayRMB);
 
         Integer shopCount = shopSkuIds.keySet().size();//订单对应的店铺数目
-        if(shopCount>1) {//如果多店铺拆分订单,则支付订单的商户订单id为0
-            virtualOrder.setId(0l);//为了让payOrder中的tradeOrderId为0;
-        } else if (shopCount==1) {
+        if (shopCount > 1) {//如果多店铺拆分订单,则支付订单的商户订单id为0
+            virtualOrder.setId(0L);//为了让payOrder中的tradeOrderId为0;
+        } else if (shopCount == 1) {
             virtualOrder.setId(firstOrder.getId());//为了指定payOrder中的tradeOrderId;
-        }else{
-            throw new RuntimeException("订单id"+firstOrder.getId()+",对应一间店铺都没");
+        } else {
+            throw new RuntimeException("订单id" + firstOrder.getId() + ",对应一间店铺都没");
         }
 
         // 3. 生成预支付:生成支付订单记录
         Long payOrderId = createPayOrder(virtualOrder, firstOrderItems);
 
-        for(Map<String,Object> m:orderMapList){
-            TradeOrderDO order = (TradeOrderDO)(m.get("order"));
+        for (Map<String, Object> m : orderMapList) {
+            TradeOrderDO order = (TradeOrderDO) (m.get("order"));
             // 更新到交易单上
             tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setPayOrderId(payOrderId));
         }
 
         //如果订单有使用积分,则抵扣用户的积分。add by Ben
-        if(payPoints>0){
-            for(Map<String,Object> m:orderMapList) {
+        if (payPoints > 0) {
+            for (Map<String, Object> m : orderMapList) {
                 TradeOrderDO order = (TradeOrderDO) (m.get("order"));
                 Long tradeOrderId = order.getId();
-                String OrderNum =order.getNo();
+                String OrderNum = order.getNo();
                 Long payIntegral = order.getPayIntegral();//每个订单使用的积分
-                integralService.updateUserIntegral(userId, CaclEnum.ORDER_PAY_INTEGRAL, payIntegral * (-1), 0l, tradeOrderId, OrderNum);
+                integralService.updateUserIntegral(userId, CaclEnum.ORDER_PAY_INTEGRAL, payIntegral * (-1), 0L, tradeOrderId, OrderNum);
             }
         }
 
@@ -723,20 +715,21 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
     /**
      * 把商品的推广费总额,转换为直推人获得的冻结积分
+     *
      * @param promotionExpenses 商品的推广费总额
      * @return 输入推广费,对应的直推人获得的冻结积分
      */
     public static Long promotionExpenses2GrossProfitAncestorQuota(
             Integer promotionExpenses,
-            /**
+            /*
              * 毛利 = 成本 * 0.38... (推广费用)
              */
             String grossProfitPerc,
-            /**
+            /*
              * 推广-推荐人额度 百分比
              */
             String grossProfitAncestorQuotaPerc
-            ){
+    ) {
 
         //转为BigDecimal
         BigDecimal profit = new BigDecimal(String.valueOf(promotionExpenses));
@@ -821,14 +814,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
     /**
      * 创建子支付订单
-     * @param order
-     * @param orderItems
-     * @param parentPayOrderId  父级支付订单id
-     * @param expireTime  支付过期时间
-     * @return
+     *
+     * @param order 订单
+     * @param orderItems 订单详情
+     * @param parentPayOrderId 父级支付订单id
+     * @param expireTime       支付过期时间
+     * @return 支付订单ID
      */
     private Long createChildPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems,
-                                     Long parentPayOrderId,LocalDateTime expireTime) {
+                                     Long parentPayOrderId, LocalDateTime expireTime) {
         // 创建支付单,用于后续的支付
         PayOrderCreateReqDTO payOrderCreateReqDTO = TradeOrderConvert.INSTANCE.convert(
                 order, orderItems, tradeOrderProperties);
@@ -879,15 +873,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         //查询订单提成比例
         QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
         OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
-        /**
+        /*
          * 毛利 = 成本 * 0.38... (推广费用)
          */
         String grossProfitPerc = orderPercentageDO.getGrossProfitPerc();
 
         Integer allTradeOrderTotalPrice = 0;//所有订单的总金额
-        Long allTradeOrderTotalFreezeAmount = 0l;//所有订单用户总的冻结积分
+        Long allTradeOrderTotalFreezeAmount = 0L;//所有订单用户总的冻结积分
 
-        /**
+        /*
          * 购物本人自得 百分比
          */
         String grossProfitUserQuotaPerc = orderPercentageDO.getGrossProfitUserQuotaPerc();
@@ -895,10 +889,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         //add by Ben 根据支付订单id,查询所有 支付订单 对应的 订单
         List<TradeOrderDO> TradeOrderDOList = tradeOrderMapper.selectList("pay_order_id", payOrderId);
 
-        for(TradeOrderDO tradeOrderDO:TradeOrderDOList) {
+        for (TradeOrderDO tradeOrderDO : TradeOrderDOList) {
 
             Long tradeOrderId = tradeOrderDO.getId();
-            allTradeOrderTotalPrice+=tradeOrderDO.getTotalPrice();
+            allTradeOrderTotalPrice += tradeOrderDO.getTotalPrice();
 
 //            System.out.println("#########updateOrderPaid####tradeOrderId:"+tradeOrderId);
 
@@ -943,17 +937,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             }
 
             List<ProductSkuDO> productSkuDOS = productSkuMapper.selectBatchIds(skuList);
-            Map<Long,ProductSkuDO> skuDOMap = new HashMap<Long,ProductSkuDO>();
+            Map<Long, ProductSkuDO> skuDOMap = new HashMap<>();
             for (ProductSkuDO productSkuDO : productSkuDOS) {
-                skuDOMap.put(productSkuDO.getId(),productSkuDO);
+                skuDOMap.put(productSkuDO.getId(), productSkuDO);
             }
 
-            Long totalFreezeAmount = 0l;//用户总的冻结积分
+            Long totalFreezeAmount = 0L;//用户总的冻结积分
             for (TradeOrderItemDO tradeOrderItemDO : TradeOrderItemList) {
                 ProductSkuDO productSkuDO = skuDOMap.get(tradeOrderItemDO.getSkuId());
                 //这类商品的总推广费
-                Integer promotionExpenses = (productSkuDO.getPrice()-productSkuDO.getCostPrice())
-                        *tradeOrderItemDO.getCount();
+                Integer promotionExpenses = (productSkuDO.getPrice() - productSkuDO.getCostPrice())
+                        * tradeOrderItemDO.getCount();
 
                 //把商品项的推广费,转换为这项商品直推人获得的冻结积分
                 Long itemFreezeAmount =
@@ -962,7 +956,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                                 grossProfitUserQuotaPerc//消费者自得额度 百分比
                         );
 
-                totalFreezeAmount+=itemFreezeAmount;
+                totalFreezeAmount += itemFreezeAmount;
 
                 //记录用户在此订单项获得的冻结积分
                 TradeOrderItemDO toid = new TradeOrderItemDO();
@@ -974,10 +968,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             //把商品的推广费总额,转换为直推人获得的冻结积分
 //            Integer freezeAmount = promotionExpenses2GrossProfitAncestorQuota(orderPercentageMapper,totalPromotionExpenses);
 
-            String OrderNum =order.getNo();
-            integralService.updateUserIntegral(tradeOrderDO.getUserId(), CaclEnum.ORDER_PAY_INTEGRAL, 0l,totalFreezeAmount,tradeOrderId,OrderNum);
+            String OrderNum = order.getNo();
+            integralService.updateUserIntegral(tradeOrderDO.getUserId(), CaclEnum.ORDER_PAY_INTEGRAL, 0L, totalFreezeAmount, tradeOrderId, OrderNum);
 
-            allTradeOrderTotalFreezeAmount+=totalFreezeAmount;//用户获得总的待确权冻结积分
+            allTradeOrderTotalFreezeAmount += totalFreezeAmount;//用户获得总的待确权冻结积分
 
             // 发送给微信消息给系统用户待发货消息
             sentWcChatMessage(order);
@@ -1003,13 +997,13 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     //只有支付订单id参数payOrderId是有用的。
     public void updateOrderPaid(Long id1, Long payOrderId) {
 
-        log.error("[TradeOrderUpdateServiceImpl.updateOrderPaid]###微信回调(现在程序什么也没干):[payOrderId({}) ,TradeOrderId({})]"+new Date(),
+        log.error("[TradeOrderUpdateServiceImpl.updateOrderPaid]###微信回调(现在程序什么也没干):[payOrderId({}) ,TradeOrderId({})]" + new Date(),
                 payOrderId, id1);
 
         //updateOrderPaid( payOrderId);
     }
 
-    private void sentWcChatMessage(TradeOrderDO order){
+    private void sentWcChatMessage(TradeOrderDO order) {
         List<String> params = new ArrayList<>();
         DecimalFormat df = new DecimalFormat("0.00");
         String formattedPrice = df.format((double) order.getPayPrice() / 100);
@@ -1032,7 +1026,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         List<Long> adminUsers = adminUserService.getUserIdsByShop(order.getShopId());
         for (Long aUserId : adminUsers) {
             //发送信息
-            wcChatMessageUtils.sendWcChatMessage(order.getUserId(), WcChatMessageTemplateIdEnum.ORDER_NO_DELIVERY2.getTemplateId(),
+            wcChatMessageUtils.sendWcChatMessage(WcChatMessageTemplateIdEnum.ORDER_NO_DELIVERY2.getTemplateId(),
                     params, aUserId, order.getId());
         }
     }
@@ -1247,6 +1241,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
     /**
      * 用户手动取消订单
+     *
      * @param userId 用户编号
      * @param id     订单编号
      */
@@ -1272,14 +1267,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         Long tradeOrderId = order.getId();
         String orderNum = order.getNo();
         //如果订单有使用积分,则退回积分
-        if(payIntegral>0) {
-            integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_USER_REFUND_INTEGRAL, payIntegral, 0l, tradeOrderId, orderNum);
+        if (payIntegral > 0) {
+            integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_USER_REFUND_INTEGRAL, payIntegral, 0L, tradeOrderId, orderNum);
         }
     }
 
     /**
      * 订单超时未支付,自动取消
-     * @return
+     *
+     * @return 数量
      */
     @Override
     public int cancelOrderBySystem() {
@@ -1303,8 +1299,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 String orderNum = order.getNo();
                 Long userId = order.getUserId();
                 //如果订单有使用积分,则退回积分
-                if(payIntegral>0) {
-                    integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL, payIntegral, 0l, tradeOrderId, orderNum);
+                if (payIntegral > 0) {
+                    integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL, payIntegral, 0L, tradeOrderId, orderNum);
                 }
 
                 count++;

+ 8 - 10
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/utils/wechat/WcChatMessageUtils.java

@@ -24,9 +24,7 @@ import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
-import java.util.Arrays;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
 
 import static cn.newfeifan.mall.module.system.constant.SystemConstants.WX_TICK_KEY_APPID;
 import static cn.newfeifan.mall.module.trade.enums.MessageTemplateConstants.AFTER_SALE_NO_CHECK_List;
@@ -97,7 +95,7 @@ public class WcChatMessageUtils {
      * @param userId 接口消息的用户id
      * @param data   模板参数
      */
-    private void sendWxgMessage(Long userId, JsonObject data, String wechatMsgTemplateId, Long systemUserId, Long memberUserId, Long objectId, String userOpenId) {
+    private void sendWxgMessage(Long userId, JsonObject data, String wechatMsgTemplateId, Long systemUserId, Long objectId, String userOpenId) {
         String templateId = getTemplateId(wechatMsgTemplateId).getWechatMsgTemplateId(); // 模板id
         String url = getDoMain(wechatMsgTemplateId, objectId);       // 跳转路径(小程序之外)
         String client_msg_id = UUID.randomUUID().toString();  // 防重入id
@@ -120,7 +118,6 @@ public class WcChatMessageUtils {
                 .openid(userOpenId)
                 .memberUserId(userId)
                 .systemUserId(systemUserId)
-                .memberUserId(memberUserId)
                 .wechatMsgTemplateId(Long.valueOf(wechatMsgTemplateId))
                 .wechatMsgTemplateParams(message.toString())
                 .objectId(objectId)
@@ -161,13 +158,12 @@ public class WcChatMessageUtils {
     /**
      * 发送微信信息
      *
-     * @param userId       用户id
      * @param templateId   自定义消息模板id
      * @param params       消息参数
      * @param systemUserId 系统用户id
      * @param objectId     对象id
      */
-    public void sendWcChatMessage(Long userId, String templateId, List<String> params, Long systemUserId, Long objectId) {
+    public void sendWcChatMessage(String templateId, List<String> params, Long systemUserId, Long objectId) {
         WechatMsgTemplateDO template = getTemplateId(templateId);
         String messageTemplateParameters = template.getMessageTemplateParameters();
 
@@ -189,18 +185,20 @@ public class WcChatMessageUtils {
         }
 
         // 获取系统用户绑定的会员用户集
+        Map<String, Long> openMap = new HashMap<>();
         List<MemberUserDO> memberUserDOS = getMemberUserBySystemUserId(systemUserId);
         for (MemberUserDO memberUserDO : memberUserDOS) {
             userOpenId = getOpenId(memberUserDO.getId());
 
             //如果用户没有绑定微信,则不发送消息
             if (userOpenId == null) {
-                return;
+                continue;
             }
 
-            // 发送微信消息
-            sendWxgMessage(userId, templateData, templateId, systemUserId, memberUserDO.getId(), objectId, userOpenId);
+            openMap.put(userOpenId, memberUserDO.getId());
         }
+
+        openMap.forEach((k, v) -> sendWxgMessage(v, templateData, templateId, systemUserId, objectId, k));
     }
 
     /**