zhijiezhao há 2 anos atrás
pai
commit
f880bdcaf2

+ 19 - 4
src/main/java/com/caimei/modules/order/service/SplitAccountService.java

@@ -79,6 +79,7 @@ public class SplitAccountService extends BaseService {
                 HashMap<String, BigDecimal> sbm = new HashMap<>();
                 for (SplitAccountPo splitAccountPo : splitBillDetail) {
                     String subUserNo = splitAccountPo.getSubUserNo();
+                    // 计算当前商户号总分账金额
                     if (sbm.containsKey(subUserNo)) {
                         BigDecimal v = MathUtil.add(sbm.get(subUserNo), splitAccountPo.getSplitAccount());
                         sbm.put(subUserNo, v);
@@ -89,6 +90,7 @@ public class SplitAccountService extends BaseService {
                     if (subUserNo.equals(shopOrder.getSplitCode())) {
                         splitAccountPo.setMbOrderId(orderRelation.getMbOrderId());
                         splitAccountPo.setOrderRequestNo(orderRelation.getOrderRequestNo());
+                        // 供应商自己收款,此部分金额留在自己商户号,作为成本分账
                         splitAccountPo.setPayStatus(1);
                         // 保存分账详情
                         newOrderDao.insertSplitAccount(splitAccountPo);
@@ -96,7 +98,11 @@ public class SplitAccountService extends BaseService {
                 }
                 ArrayList<AccountPayOrder.AccountPayOrderExt.SplitBillRule> splitBillRules = new ArrayList<>();
                 sbm.forEach((key, value) -> {
-                    // 不是自己的splitcode分走,是自己的不动
+                    /**
+                     *   不是自己的splitcode分走,是自己的不动
+                     *   把成本之外的金额加入splitRule分账参数,延续上面逻辑,供应商自己的成本由自己的商户号收款,
+                     *   自己成本部分不需要加入分账参数,仅需在else中做业务表参数处理
+                     */
                     if (!key.equals(shopOrder.getSplitCode())) {
                         //佣金
                         AccountPayOrder.AccountPayOrderExt.SplitBillRule splitBillRule = new AccountPayOrder.AccountPayOrderExt.SplitBillRule();
@@ -182,6 +188,10 @@ public class SplitAccountService extends BaseService {
                         }
                     }
                 });
+                /**
+                 *  在上述else代码逻辑中已完成成本的业务表参数处理,在分账详情中排除成本,剩余佣金部分在分账结束收到
+                 *  成功返回码时处理(成本不参与分账)
+                 */
                 splitBillDetail.removeIf(s -> s.getSubUserNo().equals(shopOrder.getSplitCode()));
                 if (null != splitBillRules && splitBillRules.size() > 0) {
                     //第三方分账接口
@@ -198,9 +208,9 @@ public class SplitAccountService extends BaseService {
                         accountPayOrder.setP5_customerNumber(shopOrder.getSplitCode());
                         AccountPayOrder.AccountPayOrderExt accountPayOrderExt = new AccountPayOrder.AccountPayOrderExt();
                         //收款账户商编  填写splitBillRules时候不填写MerchantNo,Amount并且即使填写这两个参数不生效!!
-//                    accountPayOrderExt.setInMerchantNo(splitMoneyVo.getName());
+                        //accountPayOrderExt.setInMerchantNo(splitMoneyVo.getName());
+                        //accountPayOrderExt.setAmount(splitMoneyVo.getSplitMoney());
                         accountPayOrderExt.setOrderType(AccountPayOrderType.TRANSFER);
-//                    accountPayOrderExt.setAmount(splitMoneyVo.getSplitMoney());
                         accountPayOrderExt.setServerCallbackUrl(Constant.prodSplit);
                         accountPayOrderExt.setGoodsName("分账");
                         if (null != splitBillRules && splitBillRules.size() > 0) {
@@ -314,10 +324,15 @@ public class SplitAccountService extends BaseService {
                 //成本+税费
                 costPrice = MathUtil.add(costPrice, payableTax).doubleValue();
             }
+            /**
+             * todo
+             * 出于兼容性考虑,且多次支付手续费不同,分账方式为循环每次支付记录,
+             * 当前业务满足子订单支付完成才进行分账,可以循环子订单统计支付金额,
+             * 进行一次性分账,在当前模式下如果用户分多次支付,精度损失问题较为常见。
+             */
             // 判断是否支付过
             Double paidAmount = newOrderDao.getOrderProductPaidAmount(orderProduct.getOrderProductId());
             // 支付过金额大于0
-            //有已付
             if (null != paidAmount && MathUtil.compare(paidAmount, 0) > 0) {
                 //已付>0,成本-已付
                 costPrice = MathUtil.sub(costPrice, paidAmount).doubleValue();

+ 0 - 2
src/main/java/com/caimei/modules/order/web/CmPayShopController.java

@@ -828,8 +828,6 @@ public class CmPayShopController extends BaseController {
             addMessage(redirectAttributes, "此订单已结算完毕!");
             return "redirect:" + Global.getAdminPath() + "/shopOrder/settlement";
         }
-        if (settleSum >= shouldPayShopAmount) {
-        }
         Integer SDJSS = (Integer) redisService.get("SDJSS");
         //验锁
         if (null != SDJSS && SDJSS > 0) {