KKSU
2024-09-10 f52cfc92db48d9a215d7f728ce4000de1cdd6ae2
src/main/java/cc/mrbird/febs/pay/service/impl/NBYHServiceImpl.java
@@ -1,25 +1,25 @@
package cc.mrbird.febs.pay.service.impl;
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.entity.MallMemberBank;
import cc.mrbird.febs.mall.entity.MallMemberWithdraw;
import cc.mrbird.febs.mall.entity.MallMemberWithdrawMsg;
import cc.mrbird.febs.mall.mapper.MallMemberBankMapper;
import cc.mrbird.febs.mall.mapper.MallMemberWithdrawMapper;
import cc.mrbird.febs.mall.mapper.MallMemberWithdrawMsgMapper;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.pay.model.NBYHResponse;
import cc.mrbird.febs.pay.service.NBYHService;
import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.*;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URL;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
@@ -27,6 +27,7 @@
@Slf4j
@Service
@RequiredArgsConstructor
public class NBYHServiceImpl implements NBYHService {
    /**
     * 登录报文原文
@@ -35,10 +36,12 @@
    /**
     * 转账报文原文
     */
    private static final String ACCOUNT_MESSAGE_SEARCH = "<opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><ZHHA>${ZHHA}</ZHHA></ReqParam></opReq>";
    private static final String TRADE_MESSAGE_SEARCH = "<opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><JYXH>${serialNoOld}</JYXH></ReqParam></opReq>";
    private static final String TRADE_MESSAGE_SINGLE = "<opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><FKZH>${FKZH}</FKZH><SKZH>${SKZH}</SKZH><SKHM>${SKHM}</SKHM><JYJE>${JYJE}</JYJE><YOTU>${YOTU}</YOTU></ReqParam></opReq>";
//    private static final String TRADE_MESSAGE_SINGLE = "<opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><FKZH>82260120102022631</FKZH><SKZH>78040122000059277</SKZH><SKHM>792311957</SKHM><JYJE>0.01</JYJE><YOTU>银企接口测试</YOTU></ReqParam></opReq>";
    private static final String TRADE_MESSAGE = "<opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><FKZH>${FKZH}</FKZH><SKZH>${SKZH}</SKZH><SKHM>${SKHM}</SKHM><SKYH>${SKYH}</SKYH><SKSH>${SKSH}</SKSH><SKSI>${SKSI}</SKSI><JYJE>${JYJE}</JYJE><YOTU>${YOTU}</YOTU><SKHH>${SKHH}</SKHH></ReqParam></opReq>";
//    private static final String TRADE_MESSAGE = "<opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><FKZH>${FKZH}</FKZH><SKZH>${SKZH}</SKZH><SKHM>${SKHM}</SKHM><SKYH>${SKYH}</SKYH><SKSH>${SKSH}</SKSH><SKSI>${SKSI}</SKSI><JYJE>${JYJE}</JYJE><YOTU>${YOTU}</YOTU><SKHH>${SKHH}</SKHH></ReqParam></opReq>";
    private static final String TRADE_MESSAGE = "<opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><FKZH>${FKZH}</FKZH><SKZH>${SKZH}</SKZH><SKHM>${SKHM}</SKHM><SKYH>${SKYH}</SKYH><SKSH>${SKSH}</SKSH><SKSI>${SKSI}</SKSI><JYJE>${JYJE}</JYJE><YOTU>${YOTU}</YOTU></ReqParam></opReq>";
//   private static final String TRADE_MESSAGE = "<opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><FKZH>82260120102022631</FKZH><SKZH>6228481060643871117</SKZH><SKHM>王苏平</SKHM><SKYH>中国农业银行舟山市定海支行营业中心</SKYH><SKSH>浙江省</SKSH><SKSI>舟山市</SKSI><JYJE>0.01</JYJE><BIZH>01</BIZH><ZZLX>02</ZZLX><ZZLB>0</ZZLB><YOTU>银企接口测试</YOTU><SKHH>103342040518</SKHH></ReqParam></opReq>";
    /**
     *
@@ -107,11 +110,15 @@
    /**
     * 接收报文url
     */
    private static final String URL = "http://127.0.0.1:9080/directlink/httpAccess";
//    private static final String URL = "http://127.0.0.1:9080/directlink/httpAccess";
    private static final String URL = "http://n5z7ej.natappfree.cc/directlink/httpAccess";
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    /**
     * 签名ip
     */
    private static final String VERIFY_IP = "127.0.0.1";
//    private static final String VERIFY_IP = "127.0.0.1";
    private static final String VERIFY_IP = "server.natappfree.cc";
    /**
     * 付款账号
     */
@@ -119,14 +126,15 @@
    /**
     * 签名端口
     */
    private static final int VERIFY_PORT = 8010;
    private static final int VERIFY_PORT = 39296;
//    private static final int VERIFY_PORT = 8010;
    /**
     * cookies
     */
    private static String cookies = null;
    /**
     * sessionId
     * sessionIdhttp://1d6d-220-168-79-89.ngrok.io
     */
    private static String sessionId = "-1";
    /**
@@ -148,10 +156,16 @@
    public static void main(String[] args) {
        try {
            InetAddress addr = InetAddress.getByName(VERIFY_IP);
            Socket socket = new Socket(addr, VERIFY_PORT);
            System.out.println("发送登录请求:"+addr);
            System.out.println("发送登录请求:"+socket.getKeepAlive());
//         System.out.println("发送登录请求:");
//         test.executeServerHttpService("srv001_signOn");
//            System.out.println("\n发送转账结果查询请求:");
//            executeServerHttpService("srv008_transferResultInfoQuery","转账结果查询","2023032910585227466");
//         System.out.println("\n发送跨行转账请求:");
//         test.executeServerHttpService("srv007_singleOuterTransfer","跨行转账",null);
//         System.out.println("\n发送行内转账请求:");
@@ -162,15 +176,15 @@
    }
    @Autowired
    @Resource
    private MallMemberWithdrawMapper mallMemberWithdrawMapper;
    @Autowired
    @Resource
    private MallMemberWithdrawMsgMapper mallMemberWithdrawMsgMapper;
    @Autowired
    @Resource
    private MallMemberBankMapper mallMemberBankMapper;
    @Override
    public boolean tradeSinge(Long id) {
    public NBYHResponse tradeSinge(Long id) {
        /**
         * <?xml version="1.0" encoding="UTF-8"?>
         *     <NBCBEBankData>
@@ -193,12 +207,19 @@
         *         <signData>MIIEzQYKKoEcz1UGAQQCAqCCBL0wggS5AgEBMQ4wDAYIKoEcz1UBgxEFADCB+AYKKoEcz1UGAQQCAaCB6QSB5jxvcFJlcT48c2VyaWFsTm8+VzIwMjMwNDI0MTcxMzQ0MDUwODY8L3NlcmlhbE5vPjxyZXFUaW1lPjIwMjMwNDI0MTc0MDE2PC9yZXFUaW1lPjxSZXFQYXJhbT48RktaSD44MjI2MDEyMDEwMjAyMjYzMTwvRktaSD48U0taSD43ODA0MDEyMjAwMDA1OTI3NzwvU0taSD48U0tITT43OTIzMTE5NTc8L1NLSE0+PEpZSkU+MS4wMDwvSllKRT48WU9UVT7Q0MTa16rVyzwvWU9UVT48L1JlcVBhcmFtPjwvb3BSZXE+oIIC0TCCAs0wggJxoAMCAQICBRBVc1EWMAwGCCqBHM9VAYN1BQAwXDELMAkGA1UEBhMCQ04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwSQ0ZDQSBURVNUIFNNMiBPQ0ExMB4XDTIzMDMwOTAyNTUzM1oXDTI1MDMwOTAyNTUzM1owcjELMAkGA1UEBhMCQ04xDDAKBgNVBAoMA0JPQzETMBEGA1UECwwKQ0ZDQVRlY2hURTEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMjElMCMGA1UEAwwcQ0ZDQVRlY2hURUB0ZXN0cWl5ZUBaMTExMTFAMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABPHX9dm+K8G4WGe2uAHWZKI0aJgmHQfcTyK6jxKvEC5ADcptfpbe2u0cgSwBXFsyAuXY/6wq2vm1wyzmKqGCikGjggEGMIIBAjAfBgNVHSMEGDAWgBRr/hjaj0I6prhtsy6Igzo0osEw4TAMBgNVHRMBAf8EAjAAMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDQ3MDc2LmNybDAOBgNVHQ8BAf8EBAMCBsAwHQYDVR0OBBYEFEr8/JLNuSXaME4XwdfG4VbI1nppMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAMBggqgRzPVQGDdQUAA0gAMEUCIDO8ojBrfnfn1xqHqLovnTRUmSfwmKBPHSCjIf7DBQUzAiEAnGcbKMqUfYj+35WqRfZrb9u34IcgYg0sOc9l/TKHol0xgdMwgdACAQEwZTBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTECBRBVc1EWMAwGCCqBHM9VAYMRBQAwDQYJKoEcz1UBgi0BBQAERzBFAiEAhXpldulA3eL7gbu97bo7BFKDf+AJk2OUoNcU88pbb3ICIEwlp1PJ43Lj2frEIBp9HKiyaX/wQBDOasfOk5Kk39KC</signData>
         *     </NBCBEBankData>
         */
        NBYHResponse nbyhResponse = new NBYHResponse();
        boolean flag = false;
        MallMemberWithdraw mallMemberWithdraw = mallMemberWithdrawMapper.selectById(id);
        MallMemberBank mallMemberBank = mallMemberBankMapper.selectById(mallMemberWithdraw.getWtihdrawTypeId());
        try {
            String requestDataForWithDraw = getRequestDataForWithDraw("srv006_singleInnerTransfer", "行内转账", mallMemberWithdraw, mallMemberBank);
            String responseStr = executeServerHttpService(requestDataForWithDraw);
            errorMessage = responseStr.substring(responseStr.indexOf("<errorMsg>") + 10,
                    responseStr.indexOf("</errorMsg>"));
            String SBYYStr = responseStr.substring(responseStr.indexOf("<SBYY>") + 6,
                    responseStr.indexOf("</SBYY>"));
            nbyhResponse.setMsg(errorMessage+SBYYStr);
            boolean b = parseReturnValueForTrade(responseStr);
            if(b){
                //插入一条记录
@@ -217,17 +238,28 @@
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
        nbyhResponse.setFlag(flag);
        return nbyhResponse;
    }
    @Override
    public boolean tradeSingeOuterTransfer(Long id) {
    public NBYHResponse tradeSingeOuterTransfer(Long id) {
        NBYHResponse nbyhResponse = new NBYHResponse();
        boolean flag = false;
        MallMemberWithdraw mallMemberWithdraw = mallMemberWithdrawMapper.selectById(id);
        MallMemberBank mallMemberBank = mallMemberBankMapper.selectById(mallMemberWithdraw.getWtihdrawTypeId());
        try {
            String requestDataForWithDraw = getRequestDataForWithDraw("srv007_singleOuterTransfer", "跨行汇款", mallMemberWithdraw, mallMemberBank);
            String responseStr = executeServerHttpService(requestDataForWithDraw);
            errorMessage = responseStr.substring(responseStr.indexOf("<errorMsg>") + 10,
                    responseStr.indexOf("</errorMsg>"));
            String SBYYStr = responseStr.substring(responseStr.indexOf("<SBYY>") + 6,
                    responseStr.indexOf("</SBYY>"));
            nbyhResponse.setMsg(errorMessage+SBYYStr);
            boolean b = parseReturnValueForTrade(responseStr);
            if(b){
                //插入一条记录
@@ -246,36 +278,99 @@
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
        nbyhResponse.setFlag(flag);
        return nbyhResponse;
    }
    @Override
    public void transferResultInfoQuery(Long id) {
    public NBYHResponse transferResultInfoQuery(Long id) {
        /**
         * <?xml version="1.0" encoding="UTF-8"?>
         *     <NBCBEBankData>
         *         <sessionId>-1</sessionId>
         *         <serviceId>srv008_transferResultInfoQuery</serviceId>
         *         <customerId>0000005332</customerId>
         *         <softwareId>002</softwareId>
         *         <functionId>srv008</functionId>
         *         <functionName>转账结果查询</functionName>
         *         <opReq>
         *             <serialNo>W2023042417134405087</serialNo>
         *             <reqTime>20230424180506</reqTime>
         *             <ReqParam>
         *                 <JYXH>W2023042417134405087</JYXH>
         *             </ReqParam>
         *         </opReq>
         *         <signData>MIIEdwYKKoEcz1UGAQQCAqCCBGcwggRjAgEBMQ4wDAYIKoEcz1UBgxEFADCBoQYKKoEcz1UGAQQCAaCBkgSBjzxvcFJlcT48c2VyaWFsTm8+VzIwMjMwNDI0MTcxMzQ0MDUwODc8L3NlcmlhbE5vPjxyZXFUaW1lPjIwMjMwNDI0MTgwNTA2PC9yZXFUaW1lPjxSZXFQYXJhbT48SllYSD5XMjAyMzA0MjQxNzEzNDQwNTA4NzwvSllYSD48L1JlcVBhcmFtPjwvb3BSZXE+oIIC0TCCAs0wggJxoAMCAQICBRBVc1EWMAwGCCqBHM9VAYN1BQAwXDELMAkGA1UEBhMCQ04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwSQ0ZDQSBURVNUIFNNMiBPQ0ExMB4XDTIzMDMwOTAyNTUzM1oXDTI1MDMwOTAyNTUzM1owcjELMAkGA1UEBhMCQ04xDDAKBgNVBAoMA0JPQzETMBEGA1UECwwKQ0ZDQVRlY2hURTEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMjElMCMGA1UEAwwcQ0ZDQVRlY2hURUB0ZXN0cWl5ZUBaMTExMTFAMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABPHX9dm+K8G4WGe2uAHWZKI0aJgmHQfcTyK6jxKvEC5ADcptfpbe2u0cgSwBXFsyAuXY/6wq2vm1wyzmKqGCikGjggEGMIIBAjAfBgNVHSMEGDAWgBRr/hjaj0I6prhtsy6Igzo0osEw4TAMBgNVHRMBAf8EAjAAMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDQ3MDc2LmNybDAOBgNVHQ8BAf8EBAMCBsAwHQYDVR0OBBYEFEr8/JLNuSXaME4XwdfG4VbI1nppMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAMBggqgRzPVQGDdQUAA0gAMEUCIDO8ojBrfnfn1xqHqLovnTRUmSfwmKBPHSCjIf7DBQUzAiEAnGcbKMqUfYj+35WqRfZrb9u34IcgYg0sOc9l/TKHol0xgdQwgdECAQEwZTBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTECBRBVc1EWMAwGCCqBHM9VAYMRBQAwDQYJKoEcz1UBgi0BBQAESDBGAiEAohIVn9P6WRg+ZdOzqgqKs38tRhG13f3jv1EEp9CQn+0CIQC//I83nEjczU5TgF273KCuCILgzUodySc3osMUyuEiGw==</signData>
         *     </NBCBEBankData>
         */
        NBYHResponse nbyhResponse = new NBYHResponse();
        boolean flag = false;
        MallMemberWithdrawMsg mallMemberWithdrawMsg = mallMemberWithdrawMapper.selectMsgByWithdrawNo(id);
//        if(ObjectUtil.isEmpty(mallMemberWithdrawMsg)){
//            return;
//        if(ObjectUtil.isNotEmpty(mallMemberWithdrawMsg)){
//            Integer status = mallMemberWithdrawMsg.getStatus();
//            if(1 == status){
//                nbyhResponse.setFlag(flag);
//                return nbyhResponse;
//            }
//        }
//        Integer status = mallMemberWithdrawMsg.getStatus();
//        if(1 == status){
//            return;
//        }
//        MallMemberWithdraw mallMemberWithdraw = mallMemberWithdrawMapper.selectById(mallMemberWithdrawMsg.getWithdrawId());
        MallMemberWithdraw mallMemberWithdraw = mallMemberWithdrawMapper.selectById(304L);
        MallMemberWithdraw mallMemberWithdraw = mallMemberWithdrawMapper.selectById(id);
        MallMemberBank mallMemberBank = mallMemberBankMapper.selectById(mallMemberWithdraw.getWtihdrawTypeId());
        try {
            String requestDataForWithDraw = getRequestDataForWithDraw("srv008_transferResultInfoQuery", "转账结果查询", mallMemberWithdraw, mallMemberBank);
            String responseStr = executeServerHttpService(requestDataForWithDraw);
            errorMessage = responseStr.substring(responseStr.indexOf("<errorMsg>") + 10,
                    responseStr.indexOf("</errorMsg>"));
            String SBYYStr = responseStr.substring(responseStr.indexOf("<SBYY>") + 6,
                    responseStr.indexOf("</SBYY>"));
            nbyhResponse.setMsg(errorMessage+SBYYStr);
            boolean b = parseReturnValue(responseStr);
            if(b){
                mallMemberWithdrawMsg.setStatus(1);
                mallMemberWithdrawMsgMapper.updateById(mallMemberWithdrawMsg);
                if(ObjectUtil.isNotEmpty(mallMemberWithdrawMsg)){
                    mallMemberWithdrawMsg.setStatus(1);
                    mallMemberWithdrawMsgMapper.updateById(mallMemberWithdrawMsg);
                }
                flag = true;
            }
            return;
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        nbyhResponse.setFlag(flag);
        return nbyhResponse;
    }
    @Override
    public boolean accountInfoQuery(Long id) {
        boolean flag = false;
        MallMemberWithdraw mallMemberWithdraw = mallMemberWithdrawMapper.selectById(id);
        try {
            String requestDataForWithDraw = getRequestDataForWithDraw("srv003_singleAccountInfoQuery", "账户余额及基本信息查询", mallMemberWithdraw, null);
            String responseStr = executeServerHttpService(requestDataForWithDraw);
            String stateStr = responseStr.substring(responseStr.indexOf("<state>") + 7,
                    responseStr.indexOf("</state>"));
            String KYERStr = responseStr.substring(responseStr.indexOf("<KYER>") + 6,
                    responseStr.indexOf("</KYER>"));
            BigDecimal amount = BigDecimal.ZERO;
            if(mallMemberWithdraw.getRemark().equals("凭证提现")){
                amount = mallMemberWithdraw.getAmount().setScale(2, BigDecimal.ROUND_DOWN);
            }else{
                amount = mallMemberWithdraw.getAmount().subtract(mallMemberWithdraw.getAmountFee()).setScale(2, BigDecimal.ROUND_DOWN);
            }
            if(stateStr.equals("0") && new BigDecimal(KYERStr).compareTo(amount) >= 0){
                flag = true;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
    /**
@@ -284,10 +379,19 @@
     * @throws Exception
     */
    @SuppressWarnings("rawtypes")
    public static String executeServerHttpService(String requestData) throws Exception {
    public String executeServerHttpService(String requestData) throws Exception {
//    public static void executeServerHttpService(String serviceId, String serviceName, String serialNo,String requestData) throws Exception {
        // 处理交易的url
        java.net.URL url = new URL(URL);
        DataDictionaryCustom urlDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.BANK_TRANS_URL.getType(),
                DataDictionaryEnum.BANK_TRANS_URL.getCode()
        );
        StringBuffer urlSb = new StringBuffer();
        urlSb.append("http://");
        urlSb.append(urlDic.getValue());
        urlSb.append("/directlink/httpAccess");
        java.net.URL url = new URL(urlSb.toString());
//        java.net.URL url = new URL(URL);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        if (cookies != null) {
            // 如果已登录,设置coikie
@@ -340,80 +444,80 @@
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static String getRequestData(String serviceId, String serviceName, String serialNo)
            throws FileNotFoundException, IOException {
        StringBuffer buf = new StringBuffer();
        // 报文编码格式utf-8
        buf.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><NBCBEBankData>");
        buf.append("<sessionId>");
        buf.append(sessionId);
        buf.append("</sessionId>");
        buf.append("<serviceId>");
        buf.append(serviceId);
        buf.append("</serviceId>");
        String reqData = "";
        if (serviceId.equals("srv001_signOn")) {
            reqData = SIGN_MESSAGE;
        } else if (serviceId.equals("srv006_singleInnerTransfer")) {
            reqData = TRADE_MESSAGE_SINGLE;
            /**
             * <opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><FKZH>82260120102022631</FKZH><SKZH>78040122000059277</SKZH><SKHM>792311957</SKHM><JYJE>0.01</JYJE><YOTU>银企接口测试</YOTU></ReqParam></opReq>
             * <opReq>
             *     <serialNo>${serialNo}</serialNo>
             *     <reqTime>${reqTime}</reqTime>
             *     <ReqParam>
             *         <FKZH>${FKZH}</FKZH>
             *         <SKZH>${SKZH}</SKZH>
             *         <SKHM>${SKHM}</SKHM>
             *         <JYJE>${JYJE}</JYJE>
             *         <YOTU>${YOTU}</YOTU>
             *     </ReqParam>
             * </opReq>
             */
            reqData = reqData.replaceFirst("\\$\\{FKZH\\}", serialNo);
            reqData = reqData.replaceFirst("\\$\\{SKZH\\}", serialNo);
            reqData = reqData.replaceFirst("\\$\\{SKHM\\}", serialNo);
            reqData = reqData.replaceFirst("\\$\\{JYJE\\}", serialNo);
            reqData = reqData.replaceFirst("\\$\\{YOTU\\}", serialNo);
        }else if (serviceId.equals("srv007_singleOuterTransfer")) {
            reqData = TRADE_MESSAGE;
        }else if (serviceId.equals("srv008_transferResultInfoQuery")) {
            reqData = TRADE_MESSAGE_SEARCH;
            //原订单流水号
            reqData = reqData.replaceFirst("\\$\\{serialNoOld\\}", serialNo);
        }
//      String serialNo = String.valueOf(Math.round(Math.random() * 10000))
//            + System.currentTimeMillis();
        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String reqTime = sdf.format(date);
        reqData = reqData.replaceFirst("\\$\\{serialNo\\}", serialNo);
        reqData = reqData.replaceFirst("\\$\\{reqTime\\}", reqTime);
        String signData = null;
        try {
            signData = signData(reqData);
            signData = getNodeValue(signData, "signed_data");
        } catch (Exception e) {
            e.printStackTrace();
        }
        buf.append("<customerId>");
        buf.append(customerId);
        buf.append("</customerId>");
        buf.append("<softwareId>");
        buf.append(softwareId);
        buf.append("</softwareId>");
        buf.append("<functionId>");
        buf.append(serviceId.substring(0, 6));
        buf.append("</functionId>");
        buf.append("<functionName>");
        buf.append(serviceName);
        buf.append("</functionName>");
        buf.append(reqData + "<signData>" + signData
                + "</signData></NBCBEBankData>");
        return buf.toString();
    }
//    public static String getRequestData(String serviceId, String serviceName, String serialNo)
//            throws FileNotFoundException, IOException {
//        StringBuffer buf = new StringBuffer();
//        // 报文编码格式utf-8
//        buf.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><NBCBEBankData>");
//        buf.append("<sessionId>");
//        buf.append(sessionId);
//        buf.append("</sessionId>");
//        buf.append("<serviceId>");
//        buf.append(serviceId);
//        buf.append("</serviceId>");
//        String reqData = "";
//        if (serviceId.equals("srv001_signOn")) {
//            reqData = SIGN_MESSAGE;
//        } else if (serviceId.equals("srv006_singleInnerTransfer")) {
//            reqData = TRADE_MESSAGE_SINGLE;
//            /**
//             * <opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><FKZH>82260120102022631</FKZH><SKZH>78040122000059277</SKZH><SKHM>792311957</SKHM><JYJE>0.01</JYJE><YOTU>银企接口测试</YOTU></ReqParam></opReq>
//             * <opReq>
//             *     <serialNo>${serialNo}</serialNo>
//             *     <reqTime>${reqTime}</reqTime>
//             *     <ReqParam>
//             *         <FKZH>${FKZH}</FKZH>
//             *         <SKZH>${SKZH}</SKZH>
//             *         <SKHM>${SKHM}</SKHM>
//             *         <JYJE>${JYJE}</JYJE>
//             *         <YOTU>${YOTU}</YOTU>
//             *     </ReqParam>
//             * </opReq>
//             */
//            reqData = reqData.replaceFirst("\\$\\{FKZH\\}", serialNo);
//            reqData = reqData.replaceFirst("\\$\\{SKZH\\}", serialNo);
//            reqData = reqData.replaceFirst("\\$\\{SKHM\\}", serialNo);
//            reqData = reqData.replaceFirst("\\$\\{JYJE\\}", serialNo);
//            reqData = reqData.replaceFirst("\\$\\{YOTU\\}", serialNo);
//        }else if (serviceId.equals("srv007_singleOuterTransfer")) {
//            reqData = TRADE_MESSAGE;
//        }else if (serviceId.equals("srv008_transferResultInfoQuery")) {
//            reqData = TRADE_MESSAGE_SEARCH;
//            //原订单流水号
//            reqData = reqData.replaceFirst("\\$\\{serialNoOld\\}", serialNo);
//        }
////      String serialNo = String.valueOf(Math.round(Math.random() * 10000))
////            + System.currentTimeMillis();
//        Calendar calendar = Calendar.getInstance();
//        Date date = calendar.getTime();
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//
//        String reqTime = sdf.format(date);
//        reqData = reqData.replaceFirst("\\$\\{serialNo\\}", serialNo);
//        reqData = reqData.replaceFirst("\\$\\{reqTime\\}", reqTime);
//        String signData = null;
//        try {
//            signData = signData(reqData);
//            signData = getNodeValue(signData, "signed_data");
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        buf.append("<customerId>");
//        buf.append(customerId);
//        buf.append("</customerId>");
//        buf.append("<softwareId>");
//        buf.append(softwareId);
//        buf.append("</softwareId>");
//        buf.append("<functionId>");
//        buf.append(serviceId.substring(0, 6));
//        buf.append("</functionId>");
//        buf.append("<functionName>");
//        buf.append(serviceName);
//        buf.append("</functionName>");
//        buf.append(reqData + "<signData>" + signData
//                + "</signData></NBCBEBankData>");
//        return buf.toString();
//    }
    /**
     * 组装完整的报文
     *
@@ -422,7 +526,7 @@
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static String getRequestDataForWithDraw(String serviceId, String serviceName,MallMemberWithdraw mallMemberWithdraw,MallMemberBank mallMemberBank)
    public String getRequestDataForWithDraw(String serviceId, String serviceName,MallMemberWithdraw mallMemberWithdraw,MallMemberBank mallMemberBank)
            throws FileNotFoundException, IOException {
        StringBuffer buf = new StringBuffer();
        // 报文编码格式utf-8
@@ -434,6 +538,18 @@
        buf.append(serviceId);
        buf.append("</serviceId>");
        String reqData = "";
        DataDictionaryCustom fkzhDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.BANK_TRANS_FKZH.getType(),
                DataDictionaryEnum.BANK_TRANS_FKZH.getCode()
        );
        DataDictionaryCustom customerIdDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.BANK_TRANS_customerId.getType(),
                DataDictionaryEnum.BANK_TRANS_customerId.getCode()
        );
        DataDictionaryCustom softwareIdDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.BANK_TRANS_softwareId.getType(),
                DataDictionaryEnum.BANK_TRANS_softwareId.getCode()
        );
        if (serviceId.equals("srv001_signOn")) {
            reqData = SIGN_MESSAGE;
        } else if (serviceId.equals("srv006_singleInnerTransfer")) {
@@ -453,7 +569,7 @@
             * </opReq>
             * *
             */
            reqData = reqData.replaceFirst("\\$\\{FKZH\\}", FKZH);
            reqData = reqData.replaceFirst("\\$\\{FKZH\\}", fkzhDic.getValue());
            reqData = reqData.replaceFirst("\\$\\{SKZH\\}", mallMemberBank.getBankNo());
            reqData = reqData.replaceFirst("\\$\\{SKHM\\}", mallMemberBank.getName());
            if(mallMemberWithdraw.getRemark().equals("凭证提现")){
@@ -488,7 +604,7 @@
             */
            reqData = TRADE_MESSAGE;
            reqData = reqData.replaceFirst("\\$\\{FKZH\\}", FKZH);
            reqData = reqData.replaceFirst("\\$\\{FKZH\\}", fkzhDic.getValue());
            reqData = reqData.replaceFirst("\\$\\{SKZH\\}", mallMemberBank.getBankNo());
            reqData = reqData.replaceFirst("\\$\\{SKHM\\}", mallMemberBank.getName());
            reqData = reqData.replaceFirst("\\$\\{SKYH\\}", mallMemberBank.getBankName()+mallMemberBank.getSubbranchName());
@@ -502,11 +618,25 @@
                        mallMemberWithdraw.getAmount().subtract(mallMemberWithdraw.getAmountFee()).setScale(2, BigDecimal.ROUND_DOWN).toString());
            }
            reqData = reqData.replaceFirst("\\$\\{YOTU\\}", "跨行汇款");
            reqData = reqData.replaceFirst("\\$\\{SKHH\\}", mallMemberBank.getSkhh());
//            reqData = reqData.replaceFirst("\\$\\{SKHH\\}", mallMemberBank.getSkhh());
        }else if (serviceId.equals("srv008_transferResultInfoQuery")) {
            reqData = TRADE_MESSAGE_SEARCH;
            //原订单流水号
            reqData = reqData.replaceFirst("\\$\\{serialNoOld\\}", mallMemberWithdraw.getWithdrawNo());
        }else if (serviceId.equals("srv003_singleAccountInfoQuery")) {
            reqData = ACCOUNT_MESSAGE_SEARCH;
            /**
             * <opReq>
             *       <serialNo>${serialNo}</serialNo>
             *       <reqTime>${reqTime}</reqTime>
             *       <ReqParam>
             *          <ZHHA>${ZHHA}</ZHHA>
             *       </ReqParam>
             *    </opReq>
             * <opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><ZHHA>${ZHHA}</ZHHA></ReqParam></opReq>
             */
            //原订单流水号
            reqData = reqData.replaceFirst("\\$\\{ZHHA\\}", fkzhDic.getValue());
        }
//      String serialNo = String.valueOf(Math.round(Math.random() * 10000))
//            + System.currentTimeMillis();
@@ -525,10 +655,10 @@
            e.printStackTrace();
        }
        buf.append("<customerId>");
        buf.append(customerId);
        buf.append(customerIdDic.getValue());
        buf.append("</customerId>");
        buf.append("<softwareId>");
        buf.append(softwareId);
        buf.append(softwareIdDic.getValue());
        buf.append("</softwareId>");
        buf.append("<functionId>");
        buf.append(serviceId.substring(0, 6));
@@ -555,7 +685,7 @@
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String signData(String orignalData)
    public String signData(String orignalData)
            throws UnsupportedEncodingException {
        InetAddress addr = null;
        Socket socket = null;
@@ -567,9 +697,19 @@
                + "<origin_data_len>" + orignalData.getBytes("GBK").length
                + "</origin_data_len>\n" + "<origin_data>" + orignalData
                + "</origin_data>\n" + "</msg_body>\n" + "</msg>";
        DataDictionaryCustom VERIFY_IPDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.BANK_TRANS_VERIFY_IP.getType(),
                DataDictionaryEnum.BANK_TRANS_VERIFY_IP.getCode()
        );DataDictionaryCustom VERIFY_PORT_Dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.BANK_TRANS_VERIFY_PORT.getType(),
                DataDictionaryEnum.BANK_TRANS_VERIFY_PORT.getCode()
        );
        try {
            addr = InetAddress.getByName(VERIFY_IP);
            socket = new Socket(addr, VERIFY_PORT);
            addr = InetAddress.getByName(VERIFY_IPDic.getValue());
            socket = new Socket(addr, Integer.parseInt(VERIFY_PORT_Dic.getValue()));
//            InetAddress localHost = addr.getLocalHost();
//            socket = new Socket(localHost, VERIFY_PORT);
            // 发送
            BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(
                    socket.getOutputStream(),"GBK"));