zhijiezhao il y a 1 mois
Parent
commit
3bb39c1cad

+ 27 - 0
src/main/java/com/caimei365/order/components/HeliPayUtil.java

@@ -52,6 +52,8 @@ public class HeliPayUtil {
     private String couponUnionPay;
     @Value("${pay.quick-url}")
     private String quickPayUrl;
+    @Value("${pay.large-url}")
+    private String largePayUrl;
     @Value("${pay.quick-un-url}")
     private String quickUnOrderUrl;
     @Value("${wx.mcare-app-id}")
@@ -425,4 +427,29 @@ public class HeliPayUtil {
         firstQuickPayVo.setP20_orderIp(headers.getFirst("X-CLIENT-IP"));
         firstQuickPayVo.setSignatureType("SM3WITHSM2");
     }
+
+    public void setLargePayValue(HeliDto heliDto, LargePayVo largePayVo, HttpHeaders headers) {
+        String curDateStr = (new SimpleDateFormat("yyyyMMddHHmmss")).format(new Date());
+        String substring = curDateStr.substring(curDateStr.length() - 4);
+        String environment = "";
+        if (secondHandUrl.contains("18002")) {
+            environment = "DEV";
+        } else if (secondHandUrl.contains("core-b")) {
+            environment = "BETA";
+        }
+        OrderVo order = orderCommonMapper.getOrderByShopOrderId(heliDto.getShopOrderId());
+        String orderId = order.getOrderNo() + "T" + substring + environment;
+
+        largePayVo.setP1_bizType("CreateLargePaymentOrder");
+        largePayVo.setP2_customerNumber(payOrderMapper.getSplitCodeByShopOrderId(heliDto.getShopOrderId()));
+        largePayVo.setP3_userId("U" + heliDto.getUserId());
+        largePayVo.setP4_orderId(orderId);
+        largePayVo.setP5_timestamp(curDateStr);
+        largePayVo.setP6_orderAmount(heliDto.getPayAmount());
+        largePayVo.setP7_serverCallbackUrl(largePayUrl);
+        largePayVo.setP8_remark(heliDto.getOrderId() + "_" + heliDto.getShopOrderId());
+        largePayVo.setP9_goodsName("采美订单");
+        largePayVo.setP10_accountType("PROVISIONACCOUNT");
+        largePayVo.setSignatureType("SM3WITHSM2");
+    }
 }

+ 3 - 1
src/main/java/com/caimei365/order/constant/Constant.java

@@ -34,7 +34,9 @@ public class Constant {
      * 快捷支付地址
      */
     public static final String REQUEST_URL_QUICKPAY = "http://quickpay.trx.helipay.com/trx/quickPayApi/interface.action";
-
+    /**
+     * 大额转账地址
+     */
     public static final String REQUEST_URL_BIGPAY = "https://pay.trx.helipay.com/trx/largePaymentApi/interface.action";
 
 

+ 22 - 0
src/main/java/com/caimei365/order/controller/HeliPayApi.java

@@ -42,6 +42,19 @@ public class HeliPayApi {
     private final HeliPayService heliPayService;
     private final PayOrderService payOrderService;
 
+    @ApiOperation("大额转账支付")
+    @PostMapping("/large/pay")
+    public ResponseJson LargePay(HeliDto heliDto, @RequestHeader HttpHeaders headers) {
+        if (StringUtils.isBlank(heliDto.getPayType())) {
+            return ResponseJson.error("支付类型不能为空!", null);
+        }
+        if (null == heliDto.getShopOrderId()) {
+            return ResponseJson.error("子订单Id不能为空!", null);
+        }
+        return heliPayService.largePay(heliDto, headers);
+    }
+
+
     @ApiOperation("快捷支付解绑银行卡")
     @ApiImplicitParam(required = true, name = "cardId", value = "银行卡绑定表Id")
     @GetMapping("/quick/unbound/card")
@@ -424,6 +437,15 @@ public class HeliPayApi {
         return heliPayService.quickPayCallback(res);
     }
 
+    @ApiOperation("大额转账异步通知回调")
+    @PostMapping("/large/callback")
+    public String largePayCallback(LargePayCallbackVo res) {
+        if (res == null) {
+            return "回调参数失败";
+        }
+        return heliPayService.largePayCallback(res);
+    }
+
     @ApiOperation("网银支付异步通知回调")
     @PostMapping("/union/callback")
     public String unionCallback(UnionResVo res) throws IntrospectionException, InvocationTargetException, IllegalAccessException {

+ 75 - 11
src/main/java/com/caimei365/order/mapper/PayOrderMapper.java

@@ -23,18 +23,22 @@ public interface PayOrderMapper {
 
     /**
      * 供应商分帐账号
+     *
      * @param shopId
      * @return
      */
     String getShopCode(@Param("shopId") Integer shopId);
+
     /**
      * 查询审核中的退款退货数量
+     *
      * @param orderId 订单Id
      */
     int getRefundCount(Integer orderId);
 
     /**
      * 查询审核中的退款退货数量
+     *
      * @param shopOrderId
      * @return
      */
@@ -42,66 +46,85 @@ public interface PayOrderMapper {
 
     /**
      * 主订单下子订单收款状态
+     *
      * @param orderId
      * @return
      */
     List<Integer> getReceiptStatus(Integer orderId);
+
     /**
      * 更新订单状态
+     *
      * @param order 主订单
      */
     void updateOrderStatus(OrderVo order);
 
     /**
      * 更新子订单状态
+     *
      * @param shopOrderVo 子订单
      */
     void updateShopOrderStatus(ShopOrderVo shopOrderVo);
+
     /**
      * 根据用户Id更新余额
-     * @param userMoney      用户余额
+     *
+     * @param userMoney     用户余额
      * @param ableUserMoney 用户可用余额
-     * @param userId 用户Id
+     * @param userId        用户Id
      */
-    void updateMoneyByUserId(Double userMoney, Double ableUserMoney,Integer userId);
+    void updateMoneyByUserId(Double userMoney, Double ableUserMoney, Integer userId);
+
+    void updateAbleMoney(Double ableUserMoney, Integer userId);
 
-    void updateAbleMoney( Double ableUserMoney,Integer userId);
     /**
      * 订单支付链接
+     *
      * @param shopOrderId 订单Id
-     * @param amount  本次待付款金额
+     * @param amount      本次待付款金额
      */
     OrderPayLinkVo getOrderPayLink(Integer shopOrderId, Double amount);
+
     /**
      * svip支付链接
-     * @param vipRecordId   会员购买记录Id
-     * @param amount  本次待付款金额
+     *
+     * @param vipRecordId 会员购买记录Id
+     * @param amount      本次待付款金额
      */
     OrderPayLinkVo getVipPayLink(Integer vipRecordId, Double amount);
+
     /**
      * 支付链接
-     * @param linkLogo  链接标识
+     *
+     * @param linkLogo 链接标识
      */
     OrderPayLinkVo getPayLinkByLinkLogo(String linkLogo);
+
     /**
      * 新增支付链接
      */
     void insertOrderPayLink(OrderPayLinkVo orderPayLink);
+
     /**
      * 更新支付链接
      */
     void updateOrderPayLink(OrderPayLinkVo orderPayLink);
+
     /**
      * 修改支付链接状态
      */
     void updateOrderPayLinkStatus(OrderPayLinkVo orderPayLink);
+
     /**
      * 订单促销Id
+     *
      * @param orderId 订单Id
      */
     Integer getOrderPromotionsId(Integer orderId);
+
     /**
      * 付款次数
+     *
      * @param shopOrderId 订单Id
      */
     Integer getDbPaySuccessCounter(Integer shopOrderId);
@@ -115,96 +138,124 @@ public interface PayOrderMapper {
      * 保存分账详情
      */
     void insertSplitAccount(SplitAccountPo splitAccount);
+
     /**
      * 更新二手详情
      */
     void updateSeconHandDetail(Integer productId, String payType, double payAmount, String payFormData);
+
     /**
      * 修改分账付款状态
      */
     void updateSplitAccountByPay(String mbOrderId);
+
     /**
      * 修改收款分账状态
      */
     void updateBySplitStatus(String mbOrderId);
+
     /**
      * 查询分账给子商户号
      */
     List<SplitAccountPo> getSplitAccountList(String mbOrderId);
+
     /**
      * 查询已付供应商金额
      */
     Double getPaidShopAmount(Integer shopOrderId);
+
     /**
      * 修改子订单付款状态及付款金额
      */
     void updateShopOrderByPayStatus(Integer shopOrderId, Double paidShop, Integer payStatus);
+
     /**
      * 修改主订单付款状态
      */
     void updateOrderByPayStatus(Integer orderId, Integer payStatus);
+
     /**
      * 保存付款单表
      */
     void insertPayShop(PayShopPo payShop);
+
     /**
      * 保存付供应商记录
      */
     void insertPayShopRecord(PayShopRecordPo shopRecord);
+
     /**
      * 查询未分账已支付收款
      */
     List<OrderReceiptRelationPo> getUndividedPaidReceipt(String currentTime);
+
     /**
      * 查询已支付金额
+     *
      * @param orderProductId 订单商品Id
      */
     Double getOrderProductPaidAmount(Integer orderProductId);
+
     /**
      * 查询子商户商编
+     *
      * @param shopId 供应商Id
      */
     String getShopCommercialCode(Integer shopId);
+
     /**
      * 查询已支付运费
      */
     Double getPaidShipping(Integer orderId, Integer shopId);
+
     /**
      * 获取会员套餐价格
+     *
      * @param id 会员套餐Id
      */
     Double getVipPackagePriceById(Integer id);
+
     /**
      * 获取会员套餐月份
+     *
      * @param id 会员套餐Id
      */
     Integer getVipPackageDurationById(Integer id);
+
     /**
      * 获取会员套餐记录
+     *
      * @param id
      */
     VipRecordBo getVipPackageRecord(Integer id);
+
     /**
      * 获取会员信息
+     *
      * @param userId
      */
     UserVipPo getUserVipInfo(Integer userId);
+
     /**
      * 新增会员信息
      */
     void insertUserVipInfo(UserVipPo userVip);
+
     /**
      * 更新会员信息
      */
     void updateUserVipInfo(UserVipPo userVip);
+
     /**
      * 更新会员支付历史记录
      */
     void updateVipPackageRecord(VipRecordBo record);
 
     List<BankCodeVo> findBankCode();
+
     /**
      * 查询认证通会员开通历史记录
+     *
      * @param authVipRecordId
      * @return
      */
@@ -212,6 +263,7 @@ public interface PayOrderMapper {
 
     /**
      * 查询认证通会员套餐价格
+     *
      * @param packageId
      * @return
      */
@@ -219,6 +271,7 @@ public interface PayOrderMapper {
 
     /**
      * 查询认证通会员信息
+     *
      * @param userId
      * @return
      */
@@ -226,6 +279,7 @@ public interface PayOrderMapper {
 
     /**
      * 查询认证通会员套餐信息
+     *
      * @param vipId
      * @return
      */
@@ -235,10 +289,12 @@ public interface PayOrderMapper {
      * 更新认证通会员信息
      */
     void updateAuthVipInfo(UserVipPo authVip);
+
     /**
      * 新增认证通会员信息
      */
     void insertAuthVipInfo(UserVipPo authVip);
+
     /**
      * 更新认证通会员支付历史记录
      */
@@ -246,8 +302,9 @@ public interface PayOrderMapper {
 
     /**
      * 认证通会员支付链接
-     * @param recordId   会员购买记录Id
-     * @param amount  本次待付款金额
+     *
+     * @param recordId 会员购买记录Id
+     * @param amount   本次待付款金额
      */
     OrderPayLinkVo getAuthVipPayLink(@Param("recordId") int recordId, @Param("amount") Double amount);
 
@@ -293,7 +350,7 @@ public interface PayOrderMapper {
 
     void insertBindId(String bindId, String customerNumber, String userId, Integer infoId);
 
-    List<QuickBankVo> findQuickBank(Integer cardType,String initial);
+    List<QuickBankVo> findQuickBank(Integer cardType, String initial);
 
     QuickInfoVo getQuickInfoById(Integer cardId);
 
@@ -314,4 +371,11 @@ public interface PayOrderMapper {
     Integer findCouponRecord(Integer userId, Integer couponId);
 
     Integer findUserPermission(Integer userId);
+
+    void insertLargePayInfo(@Param("userId") Integer userId, @Param("shopOrderId") Integer shopOrderId,
+                            @Param("bankNumber") String bankNumber, @Param("receiverName") String receiverName, @Param("bankName") String bankName);
+
+    LargePayBankInfo findLargePayInfo(Integer shopOrderId);
+
+    void updateLargePayAccount(@Param("payerAccountName") String payerAccountName, @Param("shopOrderId") Integer shopOrderId);
 }

+ 1 - 1
src/main/java/com/caimei365/order/model/dto/HeliDto.java

@@ -50,7 +50,7 @@ public class HeliDto implements Serializable {
     private String userType;
 
 
-    @ApiModelProperty("支付类型 微信:WXEWM  支付宝:ZFBEWM 公众号:GZH 小程序:XCX 银联:YL 快捷:QUICK")
+    @ApiModelProperty("支付类型 微信:WXEWM  支付宝:ZFBEWM 公众号:GZH 小程序:XCX 银联:YL 快捷:QUICK 大额:LARGE")
     private String payType;
 
     /**

+ 15 - 9
src/main/java/com/caimei365/order/model/enums/BizType.java

@@ -8,16 +8,22 @@ public enum BizType {
     // 企业网银  return "12";
     // 个人网银 "17";
 
-
-    B2B("B2B", "", "", "12"),//企业网银
-    B2C("B2C", "", "", "17"),//个人
-    XCX("XCX", "AppPayApplet", "APPLET", "15"),//小程序
-    GZH("GZH", "AppPayPublic", "PUBLIC", "13"),//公众号
-    ZFBEWM("ZFBEWM", "AppPay", "SCAN", "14"),//支付宝二维码
+    //企业网银
+    B2B("B2B", "", "", "12"),
+    //个人
+    B2C("B2C", "", "", "17"),
+    //小程序
+    XCX("XCX", "AppPayApplet", "APPLET", "15"),
+    //公众号
+    GZH("GZH", "AppPayPublic", "PUBLIC", "13"),
+    //支付宝二维码
+    ZFBEWM("ZFBEWM", "AppPay", "SCAN", "14"),
     //pc二维码跟公众号一样13
-    WXEWM("WXEWM", "AppPay", "SCAN", "13"),//微信二维码
-    QUICK("QUICK", "QuickPayFirstPayPreOrder", "", "29")//快捷支付
-    ;
+    WXEWM("WXEWM", "AppPay", "SCAN", "13"),
+    //快捷支付
+    QUICK("QUICK", "QuickPayFirstPayPreOrder", "", "29"),
+    //大额转账
+    LARGE("LARGE", "CreateLargePaymentOrder", "", "36");
 
     BizType(String type, String p1, String p4, String num) {
         this.type = type;

+ 17 - 0
src/main/java/com/caimei365/order/model/vo/LargePayBankInfo.java

@@ -0,0 +1,17 @@
+package com.caimei365.order.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class LargePayBankInfo implements Serializable {
+
+    private Integer id;
+    private Integer shopOrderId;
+    private Integer userId;
+    private Integer payStatus;
+    private String bankNumber;
+    private String receiverName;
+    private String bankName;
+}

+ 29 - 0
src/main/java/com/caimei365/order/model/vo/LargePayCallbackVo.java

@@ -0,0 +1,29 @@
+package com.caimei365.order.model.vo;
+
+import com.caimei365.order.annotation.SignExclude;
+import lombok.Data;
+
+@Data
+public class LargePayCallbackVo {
+
+    private String rt1_bizType;
+    private String rt2_retCode;
+    private String rt3_retMsg;
+    private String rt4_customerNumber;
+    private String rt5_orderId;
+    private String rt6_orderAmount;
+    private String rt7_createDate;
+    private String rt8_completeDate;
+    private String rt9_orderStatus;
+    private String rt10_serialNumber;
+    private String rt11_payerAccountName;
+    private String rt12_payerAccountNo;
+    private String rt13_largePaymentNo;
+    private String rt14_remark;
+
+
+    @SignExclude
+    private String sign;
+    @SignExclude
+    private String signatureType;
+}

+ 35 - 0
src/main/java/com/caimei365/order/model/vo/LargePayResVo.java

@@ -0,0 +1,35 @@
+package com.caimei365.order.model.vo;
+
+
+import com.caimei365.order.annotation.SignExclude;
+import lombok.Data;
+
+@Data
+public class LargePayResVo {
+
+    private String rt1_bizType;
+
+    private String rt2_retCode;
+
+    private String rt3_retMsg;
+
+    private String rt4_customerNumber;
+
+    private String rt5_orderId;
+
+    private String rt6_serialNumber;
+
+    private String rt7_orderAmount;
+
+    private String rt8_userId;
+
+    private String rt9_largePaymentNo;
+    private String rt10_receiverName;
+    private String rt11_bankName;
+    private String rt12_remark;
+
+    @SignExclude
+    private String signatureType;
+    @SignExclude
+    private String sign;
+}

+ 56 - 0
src/main/java/com/caimei365/order/model/vo/LargePayVo.java

@@ -0,0 +1,56 @@
+package com.caimei365.order.model.vo;
+
+import com.caimei365.order.annotation.FieldEncrypt;
+import com.caimei365.order.annotation.SignExclude;
+import lombok.Data;
+
+@Data
+public class LargePayVo {
+
+    private String P1_bizType;
+
+    private String P2_customerNumber;
+
+    private String P3_userId;
+
+    private String P4_orderId;
+
+    private String P5_timestamp;
+
+    private String P6_orderAmount;
+
+    private String P7_serverCallbackUrl;
+
+    private String P8_remark;
+
+    private String P9_goodsName;
+
+    /**
+     * 当前与合利宝合作模式为备付金账户,当前必传PROVISIONACCOUNT,否则为默认电子账户报错
+     */
+    @SignExclude
+    private String P10_accountType;
+    /**
+     * 当银行卡是信用卡时必输
+     * 信用卡有效期 月
+     */
+    @SignExclude
+    private String P11_period;
+    @SignExclude
+    private String P12_periodUnit;
+    @SignExclude
+    private String P13_payerAccountName;
+    @SignExclude
+    private String P14_payerAccountNo;
+    @SignExclude
+    private String tuitionFee;
+    @SignExclude
+    private String presetSplitAmount;
+    @SignExclude
+    private String ruleJson;
+    @SignExclude
+    private String signatureType;
+    @SignExclude
+    @FieldEncrypt
+    private String encryptionKey;
+}

+ 4 - 5
src/main/java/com/caimei365/order/service/HeliPayService.java

@@ -4,16 +4,11 @@ import com.alibaba.fastjson.JSONObject;
 import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.dto.BankListDto;
 import com.caimei365.order.model.dto.HeliDto;
-import com.caimei365.order.model.dto.PayDto;
 import com.caimei365.order.model.vo.*;
 import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpRequest;
 
-import javax.servlet.http.HttpServletRequest;
 import java.beans.IntrospectionException;
 import java.lang.reflect.InvocationTargetException;
-import java.security.NoSuchAlgorithmException;
-import java.security.spec.InvalidKeySpecException;
 import java.util.List;
 import java.util.Map;
 
@@ -75,4 +70,8 @@ public interface HeliPayService {
     ResponseJson<List<QuickBankVo>> unCodeInfos();
 
     String refundSplittingCallback(AccountResVo data);
+
+    ResponseJson largePay(HeliDto heliDto, HttpHeaders headers);
+
+    String largePayCallback(LargePayCallbackVo res);
 }

+ 1 - 1
src/main/java/com/caimei365/order/service/impl/HeliPayNonOrderServiceImpl.java

@@ -320,7 +320,7 @@ public class HeliPayNonOrderServiceImpl implements HeliPayNonOrderService {
         splitAccount.setShopId(1252);
         splitAccount.setProductType(4);
         splitAccount.setType(2);
-        splitAccount.setSplitAccount(99.75);
+        splitAccount.setSplitAccount(0.99d);
         splitAccount.setMbOrderId(orderResponseVo.getRt6_serialNumber());
         splitAccount.setOrderRequestNo(orderResponseVo.getRt5_orderId());
         splitAccount.setPayStatus(0);

+ 70 - 5
src/main/java/com/caimei365/order/service/impl/HeliPayServiceImpl.java

@@ -28,6 +28,7 @@ import com.caimei365.order.utils.helipay.MyBeanUtils;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.util.concurrent.AtomicDouble;
 import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpStatus;
 import org.springframework.beans.BeanUtils;
@@ -46,8 +47,6 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
-import okhttp3.*;
-
 import static com.caimei365.order.constant.Constant.*;
 
 /**
@@ -64,6 +63,7 @@ public class HeliPayServiceImpl implements HeliPayService {
             .connectTimeout(3, TimeUnit.SECONDS)
             .readTimeout(20, TimeUnit.SECONDS)
             .build();
+
     @Resource
     private OrderCommonMapper orderCommonMapper;
     @Resource
@@ -266,7 +266,7 @@ public class HeliPayServiceImpl implements HeliPayService {
             payType = split[1];
             //2位置子订单id
             shopOrderId = Integer.valueOf(split[2]);
-        } else {
+        } else if (2 == status) {
             QuickPayConfirmPayResponseVo res = (QuickPayConfirmPayResponseVo) o;
             orderRequestNo = res.getRt5_orderId();
             mbOrderId = res.getRt6_serialNumber();
@@ -284,6 +284,17 @@ public class HeliPayServiceImpl implements HeliPayService {
             // 快捷支付借记卡支付29,快捷支付贷记卡支付30
             payType = 1 == bankType ? "29" : "30";
             payOrderMapper.insertBindId(res.getRt10_bindId(), res.getRt4_customerNumber(), userId, infoId);
+        } else {
+            // status = 3,大额转账
+            LargePayCallbackVo res = (LargePayCallbackVo) o;
+            orderRequestNo = res.getRt5_orderId();
+            mbOrderId = res.getRt10_serialNumber();
+            amount = Double.valueOf(res.getRt6_orderAmount());
+            payType = "36";
+            String[] s = res.getRt14_remark().split("_");
+            orderId = Integer.valueOf(s[0]);
+            shopOrderId = Integer.valueOf(s[1]);
+            payOrderMapper.updateLargePayAccount(res.getRt11_payerAccountName(), shopOrderId);
         }
         // 订单信息
         OrderVo order = orderCommonMapper.getOrderByOrderId(orderId);
@@ -719,7 +730,8 @@ public class HeliPayServiceImpl implements HeliPayService {
 //                    //收款账户商编  填写splitBillRules时候不填写MerchantNo,Amount并且即使填写这两个参数不生效!!
 ////                    accountPayOrderExt.setInMerchantNo(splitMoneyVo.getName());
 //                    accountPayOrderExt.setOrderType(AccountPayOrderType.TRANSFER);
-////                    accountPayOrderExt.setAmount(splitMoneyVo.getSplitMoney());
+
+    /// /                    accountPayOrderExt.setAmount(splitMoneyVo.getSplitMoney());
 //                    accountPayOrderExt.setServerCallbackUrl(callUrl);
 //                    accountPayOrderExt.setGoodsName("分账");
 //
@@ -767,7 +779,6 @@ public class HeliPayServiceImpl implements HeliPayService {
 //            }
 //        }
 //    }
-
     @Override
     public String delayedSplittingCallback(AccountResVo data) {
         log.info("延时分账异步回调参数-------------------》 " + data.toString());
@@ -1805,6 +1816,60 @@ public class HeliPayServiceImpl implements HeliPayService {
         return "SUCCESS";
     }
 
+
+    @Override
+    public ResponseJson largePay(HeliDto heliDto, HttpHeaders headers) {
+        LargePayVo largePayVo = new LargePayVo();
+        heliPayUtil.setLargePayValue(heliDto, largePayVo, headers);
+        if (Double.parseDouble(largePayVo.getP6_orderAmount()) <= 10) {
+            return ResponseJson.error("订单支付金额不能小于最低手续费!");
+        }
+        try {
+            Map reqestMap = MessageHandle.getReqestMap(largePayVo);
+            Map<String, Object> resultMap = HttpClientService.getHttpResp(reqestMap, REQUEST_URL_BIGPAY);
+            log.info("大额转账响应结果:" + resultMap);
+
+            if ((Integer) resultMap.get("statusCode") != org.apache.commons.httpclient.HttpStatus.SC_OK) {
+                return ResponseJson.error("请求失败");
+            }
+            String resultMsg = (String) resultMap.get("response");
+            LargePayResVo responseVo = JSONObject.parseObject(resultMsg, LargePayResVo.class);
+            if (!MessageHandle.checkSign(responseVo)) {
+                return ResponseJson.error("验签失败");
+            }
+            if (!"0000".equals(responseVo.getRt2_retCode())) {
+                log.info("请求失败");
+                return ResponseJson.error("请求失败");
+            } else {
+                /**
+                 * 请求成功,存储本次请求账户,禁止同订单重复提交引发接口风控
+                 */
+                payOrderMapper.insertLargePayInfo(heliDto.getUserId(), heliDto.getShopOrderId(), responseVo.getRt9_largePaymentNo(), responseVo.getRt10_receiverName(), responseVo.getRt11_bankName());
+                return ResponseJson.success(responseVo);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Override
+    public String largePayCallback(LargePayCallbackVo res) {
+        try {
+            if (MessageHandle.checkSign(res)) {
+                if ("SUCCESS".equals(res.getRt9_orderStatus())) {
+                    log.info("大额转账付款成功============================> res:" + res);
+                    checkOrderStatus(res, 3);
+                    return "SUCCESS";
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
     public static <T> T postForm(Map<String, String> params, String url, String sign, Class<T> clazz) {
         FormBody.Builder builder = new FormBody.Builder();
         for (Map.Entry<String, String> entry : params.entrySet()) {

+ 2 - 0
src/main/java/com/caimei365/order/service/impl/PayOrderServiceImpl.java

@@ -753,6 +753,7 @@ public class PayOrderServiceImpl implements PayOrderService {
             map.put("onlinePayWays", "1,2,3,4,5");
         }
         String aliPayFlag = orderCommonMapper.findAliPayFlag(shop.getSplitCode(), shop.getShopId());
+        LargePayBankInfo bankInfo = payOrderMapper.findLargePayInfo(shopOrderId);
         map.put("userName", userName);
         map.put("shopOrder", shop);
         map.put("discernReceipt", discernReceiptList);
@@ -760,6 +761,7 @@ public class PayOrderServiceImpl implements PayOrderService {
         map.put("onlinePay", onlinePay);
         map.put("weChatFlag", weChatFlag);
         map.put("aliPayFlag", aliPayFlag);
+        map.put("bankInfo", bankInfo);
         return ResponseJson.success(map);
     }
 

+ 14 - 0
src/main/resources/mapper/PayOrderMapper.xml

@@ -132,6 +132,10 @@
         from DUAL
         where NOT EXISTS(SELECT id FROM cm_quickpay_bindcardinfo WHERE quickBindId = #{bindId})
     </insert>
+    <insert id="insertLargePayInfo">
+        insert into cm_largepay_bankinfo(shopOrderId, userId, payStatus, bankNumber, receiverName, bankName, addTime)
+            value (#{shopOrderId}, #{userId}, 1, #{bankNumber}, #{receiverName}, #{bankName}, now())
+    </insert>
     <update id="updateUserVipInfo">
         UPDATE cm_svip_user
         set userId=#{userId},
@@ -269,6 +273,11 @@
             updateTime = now()
         where shopOrderId = #{shopOrderId}
     </update>
+    <update id="updateLargePayAccount">
+        update cm_largepay_bankinfo
+        set payerAccountName = #{payerAccountName}
+        where shopOrderId = #{shopOrderId}
+    </update>
     <select id="getPayOnLineSwitch" resultType="java.lang.Integer">
         SELECT STATUS
         FROM cm_pay_online_switch
@@ -651,4 +660,9 @@
         from user
         where userID = #{userId}
     </select>
+    <select id="findLargePayInfo" resultType="com.caimei365.order.model.vo.LargePayBankInfo">
+        select id, shopOrderId, userId, payStatus, bankNumber, receiverName, bankName
+        from cm_largepay_bankinfo
+        where shopOrderId = #{shopOrderId}
+    </select>
 </mapper>