Browse Source

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

zhijiezhao 2 năm trước cách đây
mục cha
commit
b2f532021f

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

@@ -266,4 +266,6 @@ public interface NewOrderDao extends CrudDao<NewOrder> {
     Integer findSplitCount(Integer orderID);
 
     List<SplitAccountPo> getSplitRecord(Integer orderID);
+
+    Integer getSplitTime(Integer shopOrderId);
 }

+ 9 - 1
src/main/java/com/caimei/modules/order/entity/NewShopOrder.java

@@ -115,7 +115,7 @@ public class NewShopOrder extends DataEntity<NewShopOrder> {
     private List<NewOrderProduct> snOrderProducts;//需要使用sn码的订单产品列表
     private Boolean defaultStatus;  //控制填写的默认状态(运费订单,部分收款订单 默认不能操作,)
     private CmPromotion shopPromotion;  //子订单对应的店铺促销活动
-
+    private String onlinePayWays; //线上支付渠道,收银台确定支付渠道1微信2支付宝3个人网银4企业网银
     //--------------- 付款列表展示数据 ------------
     private String paying;// 是否处于给供应商状态中   0不是的,  1是的
     private String refunding;// 是否处于供应商退款状态中   0不是的,  1是的
@@ -157,6 +157,14 @@ public class NewShopOrder extends DataEntity<NewShopOrder> {
 
     private boolean payShopOtherFee = true; //是否可以付第三方申请
 
+    public String getOnlinePayWays() {
+        return onlinePayWays;
+    }
+
+    public void setOnlinePayWays(String onlinePayWays) {
+        this.onlinePayWays = onlinePayWays;
+    }
+
     public String getRebateFee() {
         return rebateFee;
     }

+ 36 - 4
src/main/java/com/caimei/modules/order/service/NewOrderService.java

@@ -696,8 +696,24 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
                             double charge = MathUtil.mul(realPay, 0.0065, 2).doubleValue() > 10 ? MathUtil.mul(realPay, 0.0065, 2).doubleValue() : 10;
                             //佣金>最高手续费可以线上,否则线下
                             double bro = MathUtil.sub(realPay, shopOrder.getShouldPayShopAmount()).doubleValue();
-                            if (bro < charge) {
-                                onlinePay = false;
+                            if (bro < 0) {
+                                onlinePay=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";
+                                }
+                                shopOrder.setOnlinePayWays(payWays);
                             }
                         }
                     } else {
@@ -711,8 +727,24 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
                             double bro = shopOrder.getBrokerage();
                             shopOrder.setRealPay(realPay);
                             shopOrder.setEachDiscount(0d);
-                            if (bro < charge) {
-                                onlinePay = false;
+                            if (bro < 0) {
+                                onlinePay=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";
+                                }
+                                shopOrder.setOnlinePayWays(payWays);
                             }
                         }
                     }

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

@@ -34,7 +34,9 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
+import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
@@ -613,6 +615,29 @@ public class CmPayShopController extends BaseController {
         return res;
     }
 
+    @RequestMapping("settleTime")
+    @ResponseBody
+    public Map<String, Object> settleTime(@RequestParam("shopOrderId")Integer shopOrderId) {
+        Map<String, Object> map = new HashMap<>();
+        Calendar instance = Calendar.getInstance();
+        int flag=0;
+        int weekIdx = instance.get(Calendar.DAY_OF_WEEK) - 1;
+        String format = new SimpleDateFormat("HH:mm:ss").format(new Date());
+        Integer substring = Integer.valueOf(format.substring(0, 2));
+        //当前时间周五下午到周日都返回1不能结算,其他时间看够不够24小时
+        if((5==weekIdx&&substring>14)||6==weekIdx||7==weekIdx){
+            flag=1;
+        }else{
+            Integer val=newOrderDao.getSplitTime(shopOrderId);
+            if(val<0){
+                flag=1;
+            }
+        }
+        map.put("flag", flag);
+        map.put("msg", "添加成功");
+        return map;
+    }
+
     /**
      * 发起付款申请  去付款单页面
      *

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

@@ -1430,6 +1430,10 @@
         from cm_split_account
         where orderId = #{orderId}
     </select>
+    <select id="getSplitTime" resultType="java.lang.Integer">
+        SELECT COUNT(*) FROM cm_split_account WHERE shopOrderId=#{shopOrderId}
+        AND DATE_ADD(splitTime,INTERVAL 1 DAY) <![CDATA[  <  ]]> now()
+    </select>
     <insert id="insertSplitAccount">
         INSERT INTO cm_split_account (orderId, productId, orderProductId, shopId, couponRecordId, vipRecordId,
                                       authVipRecordId, type, subUserNo, splitAccount,

+ 1 - 1
src/main/webapp/WEB-INF/views/modules/order/cmPayShopList.jsp

@@ -379,7 +379,7 @@
                                 已付款
                             </c:if>
                             <c:if test="${s.paying ne '1' && s.payStatus ne '3' }">
-                                <input type="checkbox" ${s.status eq 7 || (s.onlineFlag>0 && s.splitCode ne 'E1807059160') ?'disabled':''}
+                                <input type="checkbox" ${s.status eq 7 ?'disabled':''}
                                        data-shoporderid="${s.shopOrderID}" data-shopid="${s.shopID}" data-isPayShopOtherFee="${s.payShopOtherFee}"/>
                             </c:if>
                         </c:if>

+ 18 - 2
src/main/webapp/WEB-INF/views/modules/order/cmSettlementList.jsp

@@ -820,10 +820,11 @@
         });
 
         $('#apply').on('click', function () {
+            var shopOrderId='';
             var checked = $('.pay-wrapper input[type=checkbox]:checked'), params = '?';
             for (var i = 0; i < checked.length; i++) {
-                var shoporderId = $(checked[i]).attr('data-shoporderid');
-                params += ('&shopOrderIDs=' + shoporderId);
+                shopOrderId = $(checked[i]).attr('data-shoporderid');
+                params += ('&shopOrderIDs=' + shopOrderId);
             }
             if (checked.length < 1 || params == '?') {
                 alertx('请至少选择一个订单');
@@ -833,6 +834,21 @@
                 alertx('每次只能选择一个子订单进行结算申请');
                 return false;
             }
+            var flag=0;
+            debugger;
+            $.ajax({
+                url: "${ctx}/order/cmPayShop/settleTime",
+                data: {"shopOrderId":shopOrderId},
+                type: "POST",
+                async: false,
+                success: function(data){
+                    flag=data.flag;
+                }
+            });
+            if(flag===1){
+                alertx('该子订单暂未到结算时间,请于T+1后的工作日再申请结算(T指子订单分账时间)');
+                return false;
+            }
             window.location.href = '${ctx}/order/cmPayShop/settleEdit' + params;
         });