Просмотр исходного кода

adapay 支付改成延迟分账模式

周箭河 4 лет назад
Родитель
Сommit
d7392fc210

+ 6 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -351,6 +351,10 @@ public class PayServiceImpl implements PayService {
             if (i == routeScaleDtos.size() && !feeFlag) {
                 routeScaleDto.setFeeFlag("Y");
             }
+            //ADAPAY 采用延迟分账模式,手续费各自承担
+            if (routeScaleDto.getPayType().equals(PaymentChannelEnum.ADAPAY)) {
+                routeScaleDto.setFeeFlag("Y");
+            }
 
             StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
             studentPaymentRouteOrder.setOrderNo(orderNo);
@@ -474,9 +478,9 @@ public class PayServiceImpl implements PayService {
         for (Map.Entry<String, List<RouteScaleDto>> groupRouteScaleDtos : routeScaleDtosMap.entrySet()) {
             RouteScaleDto routeScaleDto = null;
             for (RouteScaleDto scaleDto : groupRouteScaleDtos.getValue()) {
-                if(routeScaleDto == null){
+                if (routeScaleDto == null) {
                     routeScaleDto = scaleDto;
-                }else {
+                } else {
                     routeScaleDto.setAmount(routeScaleDto.getAmount().add(scaleDto.getAmount()));
                     routeScaleDto.setBalance(routeScaleDto.getBalance().add(scaleDto.getBalance()));
                 }

+ 33 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -2,12 +2,14 @@ package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
@@ -15,7 +17,9 @@ import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.thirdparty.yqpay.RsqMsg;
@@ -62,6 +66,10 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private SubjectChangeService subjectChangeService;
     @Autowired
     private DegreeRegistrationService degreeRegistrationService;
+    @Autowired
+    private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
 
     @Override
     public BaseDAO<Long, StudentPaymentOrder> getDAO() {
@@ -186,7 +194,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             }
 
             if (status.equals("succeeded") ||
-                    (status.equals("failed") && payingOrder.getCreateTime().before(DateUtil.addMinutes(new Date(),-35)))) {
+                    (status.equals("failed") && payingOrder.getCreateTime().before(DateUtil.addMinutes(new Date(), -35)))) {
                 try {
                     updateOrder(rpMap); //更新订单
                 } catch (Exception e) {
@@ -237,6 +245,29 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         }
         order.setPaymentBusinessChannel(rpMap.get("channelType"));
 
+        if (status.equals(DealStatusEnum.SUCCESS) && order.getPaymentChannel().equals("ADAPAY")
+                && !rpMap.containsKey("simulation")) {
+            List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(order.getOrderNo());
+            for (StudentPaymentRouteOrder routeOrder : routeOrders) {
+                Map<String, Object> divMember = new HashMap<>();
+                divMember.put("member_id", routeOrder.getMerNo());//分佣账户
+                divMember.put("amount", routeOrder.getRouteAmount().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
+                divMember.put("fee_flag", "Y");
+                if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
+                    divMember.put("member_id", 0);
+                }
+                List<Map<String, Object>> divMembers = new ArrayList<>();
+                divMembers.add(divMember);
+
+                Map<String, Object> confirm = new HashMap<>();
+                confirm.put("payment_id", order.getTransNo());
+                confirm.put("order_no", idGeneratorService.generatorId("payment"));
+                confirm.put("confirm_amt", routeOrder.getRouteAmount());
+                confirm.put("div_members", divMembers);
+                Payment.createConfirm(confirm);
+            }
+        }
+
         callOrderCallBack(order);
     }
 
@@ -417,6 +448,6 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     public List<StudentPaymentOrder> getUserOrderByType(Integer userId, OrderTypeEnum type, DealStatusEnum status) {
-       return studentPaymentOrderDao.getUserOrderByType(userId,type,status);
+        return studentPaymentOrderDao.getUserOrderByType(userId, type, status);
     }
 }

+ 23 - 20
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -138,18 +138,18 @@ public class StudentOrderController extends BaseController {
             VipBuyResultDto vipBuyResultInfo = vipGroupService.findVipBuyResultInfo(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
             orderDetail.put("detail", vipBuyResultInfo);
         } else if (orderByOrderNo.getGroupType().equals(GroupType.SPORADIC)) {
-            if(Objects.nonNull(orderByOrderNo.getMusicGroupId())){
+            if (Objects.nonNull(orderByOrderNo.getMusicGroupId())) {
                 SporadicChargeInfo info = sporadicChargeInfoService.get(Integer.valueOf(orderByOrderNo.getMusicGroupId()));
                 orderDetail.put("detail", info);
             }
             if (orderByOrderNo.getType().equals(OrderTypeEnum.DOUBLE_ELEVEN2020)) {
                 LuckDrawCount luckDrawCount = luckDrawCountService.get(orderByOrderNo.getUserId().longValue());
-                orderDetail.put("drawTimes", luckDrawCount==null? 0: luckDrawCount.getAvailableCount());
-            }else if(OrderTypeEnum.DEGREE_REGISTRATION.equals(orderByOrderNo.getType())){
+                orderDetail.put("drawTimes", luckDrawCount == null ? 0 : luckDrawCount.getAvailableCount());
+            } else if (OrderTypeEnum.DEGREE_REGISTRATION.equals(orderByOrderNo.getType())) {
                 DegreeRegistration degreeRegistration = degreeRegistrationDao.get(orderByOrderNo.getClassGroupId());
                 orderDetail.put("degree", degreeRegistration);
                 List<StudentPaymentOrderDetail> studentPaymentOrderDetails = studentPaymentOrderDetailService.getOrderDetail(orderByOrderNo.getId());
-                if(!CollectionUtils.isEmpty(studentPaymentOrderDetails)){
+                if (!CollectionUtils.isEmpty(studentPaymentOrderDetails)) {
                     orderDetail.put("additionCourseInfo", studentPaymentOrderDetails.get(0).getGoodsIdList());
                 }
             }
@@ -241,22 +241,24 @@ public class StudentOrderController extends BaseController {
         paymentParams.put("goods_title", orderSubject);
         paymentParams.put("goods_desc", orderBody);
         paymentParams.put("time_expire", timeExpire);
-
-        List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(orderNo);
-        List<Map<String, Object>> divMembers = new ArrayList<>();
-        for (StudentPaymentRouteOrder routeOrder : routeOrders) {
-            Map<String, Object> divMember = new HashMap<>();
-            divMember.put("member_id", routeOrder.getMerNo());//分佣账户
-            divMember.put("amount", routeOrder.getRouteAmount().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
-            divMember.put("fee_flag", routeOrder.getFeeFlag());
-            if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
-                divMember.put("member_id", 0);
-            }
-            divMembers.add(divMember);
-        }
-        if (divMembers.size() > 0) {
-            paymentParams.put("div_members", JSON.toJSONString(divMembers));
-        }
+        paymentParams.put("pay_mode", "delay");
+
+        //延时分账时不需要
+//        List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(orderNo);
+//        List<Map<String, Object>> divMembers = new ArrayList<>();
+//        for (StudentPaymentRouteOrder routeOrder : routeOrders) {
+//            Map<String, Object> divMember = new HashMap<>();
+//            divMember.put("member_id", routeOrder.getMerNo());//分佣账户
+//            divMember.put("amount", routeOrder.getRouteAmount().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
+//            divMember.put("fee_flag", routeOrder.getFeeFlag());
+//            if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
+//                divMember.put("member_id", 0);
+//            }
+//            divMembers.add(divMember);
+//        }
+//        if (divMembers.size() > 0) {
+//            paymentParams.put("div_members", JSON.toJSONString(divMembers));
+//        }
 
         Map<String, Object> expendParams = new HashMap<>(5);
 
@@ -327,6 +329,7 @@ public class StudentOrderController extends BaseController {
             rpMap.put("merOrderNo", payingOrder.getOrderNo());
             rpMap.put("orderNo", payingOrder.getOrderNo());
             rpMap.put("channelType", "1");
+            rpMap.put("simulation", "1");
 
             String channelType = rpMap.get("channelType").equals("1") ? "WXPay" : (rpMap.get("channelType").equals("2") ? "Alipay" : "quickPay");
             rpMap.put("channelType", channelType);

+ 24 - 19
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java

@@ -32,6 +32,24 @@ public class Payment {
         return payment;
     }
 
+
+    /**
+     * 创建确认对象
+     *
+     * @return 查询的支付对象
+     * @throws Exception 异常
+     */
+    public static Map<String, Object> createConfirm(Map<String, Object> confirm) throws Exception {
+        confirm = com.huifu.adapay.model.Payment.createConfirm(confirm);
+
+        String error_code = (String) confirm.get("error_code");
+        if (null != error_code) {
+            String errorMsg = (String) confirm.get("error_msg");
+            throw new ThirdpartyException(errorMsg);
+        }
+        return confirm;
+    }
+
     /**
      * 关闭一个支付交易
      *
@@ -40,32 +58,19 @@ public class Payment {
      * @throws Exception 异常
      */
     public static Map<String, Object> closePayment(String paymentId) throws Exception {
-        System.out.println("=======close payment begin=======");
-        //关闭支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id11
-        //调用sdk方法,关闭支付,得到支付对象
         Map<String, Object> payment = new HashMap<>();
         Map<String, Object> paymentParams = new HashMap<>(10);
         paymentParams.put("payment_id", paymentId);
-        try {
-            paymentParams.put("payment_id", paymentId);
-            paymentParams.put("reason", "reason");
-            paymentParams.put("expend", "expend");
-            paymentParams.put("notify_url", "notify_url");
-            System.out.println("关单请求参数:" + JSON.toJSONString(paymentId));
-            payment = com.huifu.adapay.model.Payment.close(paymentParams);
-        } catch (ThirdpartyException e) {
-            e.printStackTrace();
-        }
-
+        paymentParams.put("reason", "reason");
+        paymentParams.put("expend", "expend");
+        paymentParams.put("notify_url", "notify_url");
+        payment = com.huifu.adapay.model.Payment.close(paymentParams);
 
         String error_code = (String) payment.get("error_code");
         if (null != error_code) {
-            System.out.println("关单返回参数:" + JSON.toJSONString(payment));
-            String error_msg = (String) payment.get("error_msg");
-            System.out.println("error_code:" + error_code + "............." + error_msg);
+            String errorMsg = (String) payment.get("error_msg");
+            throw new ThirdpartyException(errorMsg);
         }
-
-
         return payment;
     }