zhijiezhao 4 місяців тому
батько
коміт
a5e7b70052

+ 2 - 0
src/main/java/com/caimei/modules/order/dao/NewOrderDao.java

@@ -377,4 +377,6 @@ public interface NewOrderDao extends CrudDao<NewOrder> {
     List<CmSettleVo> findSplitAccounts(String shopOrderId);
 
     void updateOrderPayStatus(Integer orderId);
+
+    CmSplitParams findSplitParams(String shopOrderId);
 }

+ 68 - 0
src/main/java/com/caimei/modules/order/entity/CmSplitParams.java

@@ -0,0 +1,68 @@
+package com.caimei.modules.order.entity;
+
+import lombok.Data;
+
+@Data
+public class CmSplitParams {
+    private Integer shopOrderId;
+    private Integer clubId;
+    /**
+     * 服务商id
+     */
+    private Integer providerId;
+    /**
+     * 供应商分帐号
+     */
+    private String shopSplitCode;
+
+    private String cmSplitCode = Constant.CUSTOMERNUM2;
+    /**
+     * 服务商分帐号
+     */
+    private String providerSplitCode;
+    private String clubName;
+    /**
+     * 协销名称
+     */
+    private String spName;
+    /**
+     * 服务商名称
+     */
+    private String cpName;
+    /**
+     * 订单应收
+     */
+    private Double needPayAmount;
+
+
+    /****** 非数据库字段 ********/
+
+
+    /** 分账参数类型
+     *  1.服务商
+     *  2.非服务商
+     */
+    private Integer splitType;
+    /**
+     * 供应商收款手续费
+     */
+    private Double shopCommission;
+    /**
+     * 供应商分账手续费
+     */
+    private Double shopSplitCommission;
+    /**
+     * 供应商分账金额
+     */
+    private Double shopSplitAccount;
+    /**
+     * 采美分账金额
+     */
+    private Double cmSplitAccount;
+    /**
+     * 服务商分账金额
+     */
+    private Double providerSplitAccount;
+
+
+}

+ 86 - 2
src/main/java/com/caimei/modules/order/service/SplitAccountService.java

@@ -46,8 +46,8 @@ public class SplitAccountService extends BaseService {
     private CmReportingClubMapper cmReportingClubMapper;
 
     /**
-     *  !!!!注意:分帐时合利宝收费规则为谁分收谁0.1%手续费,这里是供应商承担的,如果要采美,服务商承担各自的费用,要提前计算好!!!
-     *
+     * !!!!注意:分帐时合利宝收费规则为谁分收谁0.1%手续费,这里是供应商承担的,如果要采美,服务商承担各自的费用,要提前计算好!!!
+     * <p>
      * 当前版本分帐逻辑变更,前台传入分帐帐号及金额,直接分帐
      * splits : "E123456,10;E123456,20;E123456,30"
      *
@@ -616,4 +616,88 @@ public class SplitAccountService extends BaseService {
         }
     }
 
+    /**
+     * 根据订单情况给予分账信息提示,返回分帐号;对应分账金额
+     * 1.非服务商模式(供应商+采美分账 /徳玛莉)
+     * 2.服务商模式(供应商+采美+服务商分账 /锦波)
+     *
+     * @param shopOrderId
+     */
+    public CmSplitParams getSplitParams(String shopOrderId) {
+        CmSplitParams params = newOrderDao.findSplitParams(shopOrderId);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String currentTime = format.format(calendar.getTime());
+        List<OrderReceiptRelationPo> orderRelations = newOrderDao.getUndividedPaidReceipt(currentTime, shopOrderId);
+        if (null != params.getProviderId()) {
+            // 服务商
+            params.setSplitType(1);
+        } else {
+            // 非服务商
+            params.setSplitType(2);
+        }
+        getProcedureFee(params, orderRelations);
+        return params;
+    }
+
+    private void getProcedureFee(CmSplitParams params, List<OrderReceiptRelationPo> orderRelations) {
+        /** 总收款手续费
+         *  如存在多次收款,则存在多次手续费,当前业务一般不会出现
+         */
+        AtomicReference<Double> totalReceiveCommission = new AtomicReference<>(0d);
+        orderRelations.forEach(o -> {
+            double splitAmount = o.getAssociateAmount();
+            // 收款手续费
+            double receiveCommission;
+            if (12 == o.getPayType()) {
+                receiveCommission = 10.00;
+            } else if (17 == o.getPayType()) {
+                //b2c 0.2%
+                receiveCommission = MathUtil.mul(splitAmount, 0.002, 2).doubleValue();
+                //b2c最低手续费0.1
+                if (receiveCommission < 0.1) {
+                    receiveCommission = 0.1;
+                }
+            } else if (13 == o.getPayType() || 15 == o.getPayType()) {
+                //微信0.65%
+                receiveCommission = MathUtil.mul(splitAmount, 0.0065, 2).doubleValue();
+            } else if (29 == o.getPayType()) {
+                receiveCommission = MathUtil.mul(splitAmount, 0.003, 2).doubleValue();
+                if (receiveCommission < 0.1) {
+                    receiveCommission = 0.1;
+                }
+            } else if (30 == o.getPayType()) {
+                receiveCommission = MathUtil.mul(splitAmount, 0.006, 2).doubleValue();
+                if (receiveCommission < 0.1) {
+                    receiveCommission = 0.1;
+                }
+            } else {
+                //手续费 支付宝0.25%
+                receiveCommission = MathUtil.mul(splitAmount, 0.0025, 2).doubleValue();
+            }
+            if (MathUtil.compare(receiveCommission, 0.01) <= 0) {
+                receiveCommission = 0.01;
+            }
+            // 收款手续费
+            totalReceiveCommission.set(MathUtil.add(receiveCommission,totalReceiveCommission.get()).doubleValue());
+        });
+        /** todo 当前服务商模式默认 91%供应商,1%采美,8%服务商,后续应该后台加入分配比例,取值自动计算,或者使用商品编辑中的比例分账,在分账页手选服务商分帐号
+         *  todo 当前形式仅支持单商品子订单,未考虑子订单多商品
+         *  这里用订单实付 - 手续费 - 分账金额 * 0.1% - 采美佣金 - 服务商佣金= 供应商结算
+         */
+        Double cmSplitAccount = MathUtil.mul(params.getNeedPayAmount(), 0.01, 2).doubleValue();
+        Double providerSplitAccount = MathUtil.mul(params.getNeedPayAmount(), 0.08, 2).doubleValue();
+        /** 分账手续费 shopSplitCommission **/
+        Double shopSplitCommission = MathUtil.mul(MathUtil.add(cmSplitAccount, providerSplitAccount), 0.001, 2).doubleValue();
+        BigDecimal totalSplit = MathUtil.add(cmSplitAccount, providerSplitAccount);
+        BigDecimal totalCommission = MathUtil.add(totalReceiveCommission.get(), shopSplitCommission);
+        Double shopSplitAccount = MathUtil.sub(params.getNeedPayAmount(), MathUtil.add(totalSplit, totalCommission)).doubleValue();
+
+        params.setCmSplitAccount(cmSplitAccount);
+        params.setProviderSplitAccount(providerSplitAccount);
+        params.setShopSplitAccount(shopSplitAccount);
+        params.setShopCommission(totalReceiveCommission.get());
+        params.setShopSplitCommission(shopSplitCommission);
+    }
 }

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

@@ -783,6 +783,12 @@ public class CmPayShopController extends BaseController {
         return "redirect:" + Global.getAdminPath() + "/shopOrder/splitList";
     }
 
+    @RequestMapping("new/splitParams")
+    @ResponseBody
+    public CmSplitParams splitParams(String shopOrderId) {
+        CmSplitParams splitParams = splitAccountService.getSplitParams(shopOrderId);
+        return splitParams;
+    }
     @RequestMapping("new/splitEdit")
     @ResponseBody
     public Map<String, Object> splitEdit(String shopOrderId, String splits) {

+ 16 - 0
src/main/resources/mappings/modules/order/OrderMapper.xml

@@ -2108,6 +2108,22 @@
         and payStatus = 1
         and settleStatus = 0
     </select>
+    <select id="findSplitParams" resultType="com.caimei.modules.order.entity.CmSplitParams">
+        SELECT cso.shopOrderId,
+               cso.splitCode AS shopSplitCode,
+               cso.clubId,
+               sp.providerId,
+               cp.splitCode AS providerSplitCode,
+               c.name AS clubName,
+               sp.name AS spName,
+               cp.name AS cpName,
+               cso.needPayAmount
+        FROM cm_shop_order cso
+        LEFT JOIN club c ON cso.clubId = c.clubId
+        LEFT JOIN serviceprovider sp ON c.spId = sp.serviceProviderId
+        LEFT JOIN cm_providers cp ON sp.providerId = cp.id
+        WHERE cso.shopOrderId = #{shopOrderId}
+    </select>
 
     <insert id="addCmOrder" parameterType="com.caimei.modules.order.entity.NewOrder" useGeneratedKeys="true" keyProperty="orderID">
         insert into cm_order

+ 23 - 2
src/main/webapp/WEB-INF/views/modules/order/cmSplitAccountList.jsp

@@ -549,7 +549,8 @@
 <%--子订单分账弹窗--%>
 <div class="mask revise-popup" id="sub-revise-popup">
     <div class="revise-popup-content" style="width: 540px;">
-        <h4>分账提示</h4>
+        <h3>分账提示</h3>
+        <h6 style="color: red">提供默认值仅供参考,核对后确认</h6>
         <div class="tab-content">
             <%--            <div>--%>
             <%--                <div style="display: inline-block">--%>
@@ -588,7 +589,7 @@
                 </div>
 
             </div>
-            <div>
+            <div id="serviceSplit">
                 <div style="display: inline-block">
                     <p>
                         <span>服务商分账号:<input type="text" id="div-service-accounts"></span>
@@ -922,6 +923,26 @@
                 alertx('请至少选择一个订单');
                 return false;
             }
+            $.ajax({
+                url: "${ctx}/order/cmPayShop/new/splitParams",
+                data: {'shopOrderId': shoporderId},
+                type: "POST",
+                success: function (data) {
+                    // console.log("--------->" + JSON.stringify(data, null, 2));
+                    $('#div-caimei-accounts').val(data.cmSplitCode);
+                    $('#div-shop-accounts').val(data.shopSplitCode);
+                    // 服务商
+                    if (data.splitType == 1) {
+                        $('#div-service-accounts').val(data.providerSplitCode);
+                        $('#div-shop-money').val(data.shopSplitAccount);
+                        $('#div-caimei-money').val(data.cmSplitAccount);
+                        $('#div-service-money').val(data.providerSplitAccount);
+                    } else {
+                        // 非服务商
+                        $("#serviceSplit").hide();
+                    }
+                }
+            });
             $('#sub-revise-popup').show();
             btnToGrey1();
             <%--window.location.href = '${ctx}/order/cmPayShop/new/splitEdit' + params;--%>