Browse Source

支付优化,允许负成本线上支付

zhijiezhao 2 years ago
parent
commit
3bf5f88d1e

+ 2 - 0
src/main/java/com/caimei365/order/mapper/OrderCommonMapper.java

@@ -175,5 +175,7 @@ public interface OrderCommonMapper {
     Integer findPayB2BRecord(Integer shopOrderId);
 
     Integer findMaxStock(Integer productId);
+
+    String findOnlinePayWays(Integer shopOrderId);
 }
 

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

@@ -13,6 +13,10 @@ import java.io.Serializable;
 @Data
 public class OrderShopPo implements Serializable {
     private static final long serialVersionUID = 1L;
+    /**
+     * 线上支付渠道,收银台确定支付渠道1微信2支付宝3个人网银4企业网银
+     */
+    private String onlinePayWays;
     /**
      * 虚拟字段,不包含店铺满减的子订单应付
      */

+ 9 - 6
src/main/java/com/caimei365/order/service/impl/PayOrderServiceImpl.java

@@ -758,13 +758,16 @@ public class PayOrderServiceImpl implements PayOrderService {
         }
         // 返回数据
         // 佣金<50不允许走企业网银,企业网银最多支付5次;0不能企业网银,1可以
-        int B2BpayFlag = 0;
-        Integer payNum = orderCommonMapper.findPayB2BRecord(shopOrderId);
-        if (null != shop.getBrokerage() && shop.getBrokerage() > 50 && payNum <= 5) {
-            B2BpayFlag = 1;
-        }
+//        int B2BpayFlag = 0;
+//        Integer payNum = orderCommonMapper.findPayB2BRecord(shopOrderId);
+//        if (null != shop.getBrokerage() && shop.getBrokerage() > 50 && payNum <= 5) {
+//            B2BpayFlag = 1;
+//        }
         Map<String, Object> map = new HashMap<>();
-        map.put("B2BpayFlag", B2BpayFlag);
+        if(onlinePay!=1){
+            map.put("onlinePayWays",orderCommonMapper.findOnlinePayWays(shopOrderId));
+        }
+//        map.put("B2BpayFlag", B2BpayFlag);
         map.put("userName", userName);
         map.put("shopOrder", shop);
         map.put("discernReceipt", discernReceiptList);

+ 37 - 5
src/main/java/com/caimei365/order/service/impl/SubmitServiceImpl.java

@@ -1166,11 +1166,27 @@ public class SubmitServiceImpl implements SubmitService {
                     }
                     //有优惠金额,最高手续费=支付金额*0.65%>10取0.65,不大于取10(合利宝最高0.65%)
                     double realPay = shopOrderList.get(i).getRealPay();
-                    double charge = MathUtil.mul(realPay, 0.0065, 2).doubleValue() > 10 ? MathUtil.mul(realPay, 0.0065, 2).doubleValue() : 10;
-                    //佣金>最高手续费可以线上,否则线下
+                    //佣金
                     double bro = MathUtil.sub(realPay, shopOrderList.get(i).getShouldPayShopAmount()).doubleValue();
-                    if (bro < charge) {
+                    //成本>实付不能线上
+                    if (bro < 0) {
                         onlinePay.set(false);
+                    } else {
+                        double WXCharge = MathUtil.mul(realPay, 0.0065, 2).doubleValue();
+                        double AliCharge = MathUtil.mul(realPay, 0.0025, 2).doubleValue();
+                        double B2CCharge = MathUtil.mul(realPay, 0.002, 2).doubleValue();
+                        //佣金和手续费比较,佣金>手续费则可以走当前支付渠道
+                        //支持子订单佣金小于最小手续费时,也能进行线上支付,此时不限制支付方式(佣金大于最大手续费或小于最小手续费支持全渠道付款)
+                        String payWays = "";
+                        payWays += bro > WXCharge ? "1" : "";
+                        payWays += bro > AliCharge ? ",2" : "";
+                        payWays += bro > B2CCharge ? ",3" : "";
+                        payWays += bro > 10 ? ",4" : "";
+                        //小于所有的情况下线下补手续费,开放所有渠道
+                        if ("".equals(payWays)) {
+                            payWays = "1,2,3,4";
+                        }
+                        shopOrderList.get(i).setOnlinePayWays(payWays);
                     }
                 }
             } else {
@@ -1180,12 +1196,28 @@ public class SubmitServiceImpl implements SubmitService {
                     double realPay = so.getNeedPayAmount();
                     so.setRealPay(realPay);
                     so.setEachDiscount(0d);
-                    double charge = MathUtil.mul(realPay, 0.0065, 2).doubleValue() > 10 ? MathUtil.mul(realPay, 0.0065, 2).doubleValue() : 10;
                     double bro = so.getBrokerage();
                     so.setRealPay(realPay);
                     so.setEachDiscount(0d);
-                    if (bro < charge) {
+                    //成本>实付不能线上
+                    if (bro < 0) {
                         onlinePay.set(false);
+                    } else {
+                        double WXCharge = MathUtil.mul(realPay, 0.0065, 2).doubleValue();
+                        double AliCharge = MathUtil.mul(realPay, 0.0025, 2).doubleValue();
+                        double B2CCharge = MathUtil.mul(realPay, 0.002, 2).doubleValue();
+                        //佣金和手续费比较,佣金>手续费则可以走当前支付渠道
+                        //支持子订单佣金小于最小手续费时,也能进行线上支付,此时不限制支付方式(佣金大于最大手续费或小于最小手续费支持全渠道付款)
+                        String payWays = "";
+                        payWays += bro > WXCharge ? "1" : "";
+                        payWays += bro > AliCharge ? ",2" : "";
+                        payWays += bro > B2CCharge ? ",3" : "";
+                        payWays += bro > 10 ? ",4" : "";
+                        //小于所有的情况下线下补手续费,开放所有渠道
+                        if ("".equals(payWays)) {
+                            payWays = "1,2,3,4";
+                        }
+                        so.setOnlinePayWays(payWays);
                     }
                 });
             }

+ 5 - 0
src/main/resources/mapper/OrderCommonMapper.xml

@@ -741,4 +741,9 @@
         ORDER BY stock DESC
         LIMIT 1
     </select>
+    <select id="findOnlinePayWays" resultType="java.lang.String">
+        select onlinePayWays
+        from cm_shop_order
+        where shopOrderID = #{shopOrderId}
+    </select>
 </mapper>

+ 2 - 2
src/main/resources/mapper/SubmitMapper.xml

@@ -29,14 +29,14 @@
     </insert>
     <insert id="insertShopOrder" keyColumn="shopOrderID" keyProperty="shopOrderId"
             parameterType="com.caimei365.order.model.po.OrderShopPo" useGeneratedKeys="true">
-        INSERT INTO cm_shop_order (shopOrderNo, orderID, orderNo, shopID, note, userID, clubID, orderType,
+        INSERT INTO cm_shop_order (onlinePayWays, shopOrderNo, orderID, orderNo, shopID, note, userID, clubID, orderType,
                                    spID, orderPromotionsId, promotionFullReduction, svipShopReduction, brokerage,
                                    canRefundAmount, itemCount,
                                    totalAmount, productAmount, needPayAmount, shopProductAmount, shopPostFee,
                                    shopTaxFee,
                                    shouldPayShopAmount, orderTime, orderSubmitType, splitFlag, payStatus,
                                    payedShopAmount, splitCode, realPay, eachDiscount, receiptStatus)
-        VALUES (#{shopOrderNo}, #{orderId}, #{orderNo}, #{shopId}, #{note}, #{userId}, #{clubId}, #{orderType},
+        VALUES (#{onlinePayWays}, #{shopOrderNo}, #{orderId}, #{orderNo}, #{shopId}, #{note}, #{userId}, #{clubId}, #{orderType},
                 #{spId}, #{orderPromotionsId}, #{promotionFullReduction}, #{svipShopReduction}, #{brokerage},
                 #{canRefundAmount}, #{itemCount},
                 #{totalAmount}, #{productAmount}, #{needPayAmount}, #{shopProductAmount}, #{shopPostFee}, #{shopTaxFee},