浏览代码

超级会员支付-分账

chao 3 年之前
父节点
当前提交
802a14d396

+ 4 - 0
src/main/java/com/caimei365/order/model/po/SplitAccountPo.java

@@ -32,6 +32,10 @@ public class SplitAccountPo implements Serializable {
      * 供应商id
      */
     private Integer shopId;
+    /**
+     * 超级会员套餐id
+     */
+    private Integer vipPackageId;
     /**
      * 分账类型:1公账-专票,2私账-无票,3公账-普票,4供应商子商户
      */

+ 62 - 64
src/main/java/com/caimei365/order/service/impl/PayNonOrderServiceImpl.java

@@ -175,27 +175,7 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
             // 时间戳
             long time = System.currentTimeMillis() / 1000;
             // 用户IP地址
-            String userIp = headers.getFirst("X-CLIENT-IP");
-            JSONObject json = new JSONObject();
-            json.put("merAccount", PayUtil.merAccount);
-            json.put("merNo", PayUtil.merNo);
-            json.put("time", time);
-            //支付金额
-            json.put("amount", payParam.getPayAmount());
-            json.put("payWay", payParam.getPayWay());
-            json.put("payType", payParam.getPayType());
-            json.put("userIp", userIp);
-            json.put("returnUrl", payParam.getReturnUrl());
-            json.put("notifyUrl", payParam.getNotifyUrl());
-            if (StringUtils.isNotBlank(payParam.getBankCode())) {
-                json.put("bankCode", payParam.getBankCode());
-            }
-            if (StringUtils.isNotBlank(payParam.getUserType())) {
-                json.put("userType", payParam.getUserType());
-            }
-            if (StringUtils.isNotBlank(payParam.getOpenId())) {
-                json.put("openId", payParam.getOpenId());
-            }
+            JSONObject json = getPayJsonObject(payParam, headers, time);
             String environment = "";
             if (payParam.getNotifyUrl().contains("18002")) {
                 environment = "DEV";
@@ -299,6 +279,34 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
         return "SUCCESS";
     }
 
+    /**
+     * 设置支付基础参数
+     */
+    private JSONObject getPayJsonObject(PayParamBo payParam, HttpHeaders headers, long time) {
+        // 用户IP地址
+        String userIp = headers.getFirst("X-CLIENT-IP");
+        JSONObject json = new JSONObject();
+        json.put("merAccount", PayUtil.merAccount);
+        json.put("merNo", PayUtil.merNo);
+        json.put("time", time);
+        //支付金额
+        json.put("amount", payParam.getPayAmount());
+        json.put("payWay", payParam.getPayWay());
+        json.put("payType", payParam.getPayType());
+        json.put("userIp", userIp);
+        json.put("returnUrl", payParam.getReturnUrl());
+        json.put("notifyUrl", payParam.getNotifyUrl());
+        if (StringUtils.isNotBlank(payParam.getBankCode())) {
+            json.put("bankCode", payParam.getBankCode());
+        }
+        if (StringUtils.isNotBlank(payParam.getUserType())) {
+            json.put("userType", payParam.getUserType());
+        }
+        if (StringUtils.isNotBlank(payParam.getOpenId())) {
+            json.put("openId", payParam.getOpenId());
+        }
+        return json;
+    }
     /**
      * 升级超级会员-微信线上支付
      *
@@ -393,28 +401,9 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
         try {
             // 时间戳
             long time = System.currentTimeMillis() / 1000;
-            // 用户IP地址
-            String userIp = headers.getFirst("X-CLIENT-IP");
-            JSONObject json = new JSONObject();
-            json.put("merAccount", PayUtil.merAccount);
-            json.put("merNo", PayUtil.merNo);
-            json.put("time", time);
-            //支付金额
-            json.put("amount", payParam.getPayAmount());
-            json.put("payWay", payParam.getPayWay());
-            json.put("payType", payParam.getPayType());
-            json.put("userIp", userIp);
-            json.put("returnUrl", payParam.getReturnUrl());
-            json.put("notifyUrl", payParam.getNotifyUrl());
-            if (StringUtils.isNotBlank(payParam.getBankCode())) {
-                json.put("bankCode", payParam.getBankCode());
-            }
-            if (StringUtils.isNotBlank(payParam.getUserType())) {
-                json.put("userType", payParam.getUserType());
-            }
-            if (StringUtils.isNotBlank(payParam.getOpenId())) {
-                json.put("openId", payParam.getOpenId());
-            }
+            // 设置支付基础参数
+            JSONObject json = getPayJsonObject(payParam, headers, time);
+            // 支付环境
             String environment = "";
             if (payParam.getNotifyUrl().contains("18002")) {
                 environment = "DEV";
@@ -429,11 +418,13 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
             json.put("product", product);
             String attach = payParam.getProductId() + "," + payParam.getPayType();
             json.put("attach", attach);
-            // 升级超级会员默认
+            // 升级超级会员默认
             List<Map<String, String>> list = new ArrayList<>();
             Map<String, String> map = new HashMap<>(3);
-            map.put("subUserNo", PayUtil.privateAccountNo);
+            map.put("subUserNo", PayUtil.publicAccountNo);
+            // 1按比例分账
             map.put("splitBillType", "1");
+            // 1比例值总额
             map.put("splitBillValue", "1");
             list.add(map);
             String splitBillDetail = JSONObject.toJSONString(list);
@@ -454,25 +445,32 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
             log.info("第三方支付失败>>>>>>>msg:" + msg);
             return ResponseJson.error(msg, null);
         }
-//        // 保存二手发布分账参数
-//        SplitAccountPo splitAccount = new SplitAccountPo();
-//        splitAccount.setOrderId(payParam.getOrderId());
-//        splitAccount.setProductId(payParam.getProductId());
-//        // 二手交易供应商
-//        splitAccount.setShopId(1252);
-//        splitAccount.setProductType(4);
-//        splitAccount.setType(2);
-//        if ("UNIONPAY".equals(payParam.getPayWay())) {
-//            splitAccount.setSplitAccount(92.00);
-//        } else {
-//            splitAccount.setSplitAccount(99.62);
-//        }
-//        JSONObject data = result.getJSONObject("data");
-//        splitAccount.setMbOrderId(data.getString("mbOrderId"));
-//        splitAccount.setOrderRequestNo(data.getString("orderId"));
-//        splitAccount.setPayStatus(0);
-//        // 保存分账详情
-//        payOrderMapper.insertSplitAccount(splitAccount);
+        // 保存升级超级会员分账参数
+        JSONObject data = result.getJSONObject("data");
+        SplitAccountPo splitAccount = new SplitAccountPo();
+        splitAccount.setVipPackageId(payParam.getVipId());
+        // 超级会员 公账-专票
+        splitAccount.setType(1);
+        // 待分账总金额
+        double splitAmount = MathUtil.div(payParam.getPayAmount(), 100).doubleValue();
+        // 总手续费
+        double procedureFee;
+        if ("UNIONPAY".equals(payParam.getPayWay())) {
+            procedureFee = 8.00;
+        } else {
+            //手续费
+            procedureFee = MathUtil.mul(splitAmount, 0.0038, 2).doubleValue();
+            if (MathUtil.compare(procedureFee, 0) == 0) {
+                procedureFee = 0.01;
+            }
+        }
+        splitAmount = MathUtil.sub(splitAmount, procedureFee).doubleValue();
+        splitAccount.setSplitAccount(splitAmount);
+        splitAccount.setMbOrderId(data.getString("mbOrderId"));
+        splitAccount.setOrderRequestNo(data.getString("orderId"));
+        splitAccount.setPayStatus(0);
+        // 保存分账详情
+        payOrderMapper.insertSplitAccount(splitAccount);
 
         return ResponseJson.success(result);
     }