江苏银行业务对接,现金管理平台,银企直联

注:如果没有与银行合作,银行是不会提供开发文档与测试账号的,请确保合作后看以下内容,否则看了也没用,因为重要的详细信息都在银行提供的文档中,我写的只是实际开发的代码;

查询银行到账信息代码示例:

介绍:此业务我是用时间定时器做的,每30秒获取银行到账的明细,并存入数据库;

开发前请认真阅读银行给的开发文档,按文档要求安装和配置前置机;

我们只需要把请求发送给前置机,由前置机与银行交互然后返回我们,前置机装在我们公司本地局域网中,所以数据可不加密,前置机会加密与银行交互;

获取到银行账信息的数据有两种情况,一种是数据量很小 2K以内的数据银行会以拼接url的方式返回;如果数据超出2k需要自己发送下载文件的请求,请求完毕后需要关闭文件,所有我们需要解析两种数据,具体详细银行会有对接文档参考;

1.配置文件:

conf/MortgageBankofjiangsucainfo.properties

#-------------------------江苏银行配置表------银行业务 编码GBK-------http://cron.qqe2.com/-------http://www.shnydb.com/-----
#xxxx公司银行账号
ACNO = 32280xxxxxxxxxx

#账号对应的户名
ACNAME = xxxxxxxxxx

#交易码 ;查询账户明细(200xxx交易)
TR_CODE_QUERY = 200xxx

#交易码 ;对外支付(300xxx交易)
TR_CODE_PAY = 300xxx

#渠道标识
CHANNEL = 5 

#文件标识 0-报文,1-文件
FILE_FLAG = 0

#前置机IP
FRONT_END_PROCESSOR_IP = 192.168.x.xxx

#前置机交易端口
DEAL_PROT = 10xxx

#前置机文件端口
FILE_PROT = 20xxx

#日期模板
DATETEMPLATE = yyyyMMdd

#时间模板
TIMETEMPLATE = HHmmss

#币种 (人民币)
CUR_CODE = 01

#收款户名 测试付款用
REV_ACNAME = xxx

#定时获取到账信息;
JIANGSUBANK_GETACCOUNTINFO_TIME = 0/120 * * * * ?

#每间隔 N 时间获取一次数据,这里的时间与定时器 JIANGSUBANK_GETACCOUNTINFO_TIME 的时间保持一致(单位秒)
JIANGSUBANK_GETACCOUNTINFO_RUNTIME = 120

#未防止获取的数据丢失,每天晚上 23点50分 定时 触发一次获取当天所有银行到账数据;晚上23:58分执行 * 58 23 * * ?
All_A_DAY_JIANGSUBANK_GETACCOUNTINFO_TIME = * 58 23 * * ?

SpringMVC.xml加载配置文件

<bean id="prop" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
	<property name="locations">
 		<!--<array>-->
 			<value>classpath:conf/MortgageBankofjiangsucainfo.properties</value>
 		<!--</array>-->
 	</property>

com.tcwl.vsmp.mortgage.common.MortgageBankofjiangsucainfoConstant.java

package com.tcwl.vsmp.mortgage.common;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 江苏银行业务常量定义类
 *
 * 银行业务 编码GBK
 */
@Component
public class MortgageBankofjiangsucainfoConstant {

    /*public static*/
/*======================银行=======================*/
    /**
     * 请求头
     * @throws Exception
     */

    // tr_code	交易码	;查询账户明细 200110 MortgageBankofjiangsucainfoConstant.TR_CODE_QUERY
    public static String TR_CODE_QUERY ;

    //交易码 ;对外支付(300001交易) MortgageBankofjiangsucainfoConstant.TR_CODE_PAY
    public static String TR_CODE_PAY;

    //cms_corp_no	现金管理客户号	 企业不需要赋值,由银企前置机进行赋值。 MortgageBankofjiangsucainfoConstant.CMS_CORP_NO
    public static String CMS_CORP_NO = "";

    //user_no	用户号	企业不需要赋值,由银企前置机进行赋值。MortgageBankofjiangsucainfoConstant.USER_NO
    public static String USER_NO = "";

    //org_code	机构号	企业不需要赋值,由银企前置机进行赋值。MortgageBankofjiangsucainfoConstant.ORG_CODE
    public static String ORG_CODE = "";

    //serial_no	交易流水号	送空,由现金管理系统产生 MortgageBankofjiangsucainfoConstant.SERIAL_NO
    public static String SERIAL_NO = "";

    //req_no	请求号	企业ERP的流水号 MortgageBankofjiangsucainfoConstant.REQ_NO
    public static String REQ_NO = "";

    //channel	渠道标识	ERP送‘5’  MortgageBankofjiangsucainfoConstant.CHANNEL
    public static String CHANNEL ;

    //sign	签名标识 0-报文未签名 ;  1-报文已签名;  企业送空,由银企前置进行传送. MortgageBankofjiangsucainfoConstant.SIGN
    public static String SIGN = "";

    //file_flag	文件标识0-报文1-文件 MortgageBankofjiangsucainfoConstant.FILE_FLAG
    public static String FILE_FLAG;

    //reserved	保留字段
    public static String RESERVED = "";

    /**
     * 请求体
     * @throws Exception
     */

    //坦程自己公司账号 MortgageBankofjiangsucainfoConstant.ACNO
    public static String ACNO;

    //自己公司账号对应的户名 MortgageBankofjiangsucainfoConstant.ACNAME
    public static String ACNAME ;

    //cur_code	币种	 01 -人民币 MortgageBankofjiangsucainfoConstant.CUR_CODE
    public static String CUR_CODE ;


    /**
     * 请求IP地址
     */
    //前置机ip  MortgageBankofjiangsucainfoConstant.FRONT_END_PROCESSOR_IP
    public static String FRONT_END_PROCESSOR_IP;

    //前置机交易端口prot  MortgageBankofjiangsucainfoConstant.DEAL_PROT
    public static String  DEAL_PROT ;


    //前置机文件端口prot  MortgageBankofjiangsucainfoConstant.FILE_PROT
    public static String  FILE_PROT;

    //日期模板  MortgageBankofjiangsucainfoConstant.DATETEMPLATE
    public static String DATETEMPLATE ;

    //时间模板  MortgageBankofjiangsucainfoConstant.TIME_TEMPLATE
    public static String TIME_TEMPLATE ;

    /* ============================操作状态================================================*/
    //操作状态【非金鑫获取的数据,由自己写入】 0为未操作,1为操作,数据库默认为0,MortgageBankofjiangsucainfoConstant.STSTUS_NO
    public static Integer STSTUS_NO = 0;
    public static Integer STSTUS_YES = 1;

    @Value("#{prop.TR_CODE_QUERY}")
    public void setTrCodeQuery(String trCodeQuery) {
        TR_CODE_QUERY = trCodeQuery;
    }

    @Value("#{prop.TR_CODE_PAY}")
    public void setTrCodePay(String trCodePay) {
        TR_CODE_PAY = trCodePay;
    }

    public void setCmsCorpNo(String cmsCorpNo) {
        CMS_CORP_NO = cmsCorpNo;
    }

    public void setUserNo(String userNo) {
        USER_NO = userNo;
    }

    public void setOrgCode(String orgCode) {
        ORG_CODE = orgCode;
    }

    public void setSerialNo(String serialNo) {
        SERIAL_NO = serialNo;
    }

    public  void setReqNo(String reqNo) {
        REQ_NO = reqNo;
    }

    @Value("#{prop.CHANNEL}")
    public  void setCHANNEL(String CHANNEL) {
        MortgageBankofjiangsucainfoConstant.CHANNEL = CHANNEL;
    }

    public  void setSIGN(String SIGN) {
        MortgageBankofjiangsucainfoConstant.SIGN = SIGN;
    }

    @Value("#{prop.FILE_FLAG}")
    public void setFileFlag(String fileFlag) {
        FILE_FLAG = fileFlag;
    }

    public  void setRESERVED(String RESERVED) {
        MortgageBankofjiangsucainfoConstant.RESERVED = RESERVED;
    }

    @Value("#{prop.ACNO}")
    public  void setACNO(String ACNO) {
        MortgageBankofjiangsucainfoConstant.ACNO = ACNO;
    }

    @Value("#{prop.CUR_CODE}")
    public  void setCurCode(String curCode) {
        CUR_CODE = curCode;
    }

    //自己公司账号对应的户名
    @Value("#{prop.ACNAME}")
    public  void setAcName(String acName) {
        ACNAME = acName;
    }

    @Value("#{prop.FRONT_END_PROCESSOR_IP}")
    public void setFrontEndProcessorIp(String frontEndProcessorIp) {
        FRONT_END_PROCESSOR_IP = frontEndProcessorIp;
    }

    @Value("#{prop.DEAL_PROT}")
    public void setDealProt(String dealProt) {
        DEAL_PROT = dealProt;
    }

    @Value("#{prop.FILE_PROT}")
    public void setFilePort(String filePort) {
        FILE_PROT = filePort;
    }

    @Value("#{prop.DATETEMPLATE}")
    public  void setDATETEMPLATE(String DATETEMPLATE) {
        MortgageBankofjiangsucainfoConstant.DATETEMPLATE = DATETEMPLATE;
    }
    @Value("#{prop.TIMETEMPLATE}")
    public void setTimeTemplate(String timeTemplate) {
        TIME_TEMPLATE = timeTemplate;
    }


}

2.工具类

发送工具

com.tcwl.vsmp.weizhang.util.HttpClientUtil.java

package com.tcwl.vsmp.weizhang.util;

import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;

import com.tcwl.vsmp.weizhang.vo.KeyValueObject;

/**
 * <p>Title: TSP</p>
 * <p>Description: 本类用于对外http请求工具类</p>
 * <p>Copyright: Copyright (c) 2011 Wuxi Tan Cheng IOT Technology Co., Ltd.</p>
 *
 * @author lizhijian
 * @version 1.0
 * <p>2014-3-4</p>
 * @since 1.6.0
 */
public class HttpClientUtil
{

 

    /**
     *
     * @author:            苏凯
     * @Title:             httpPostWithXml
     * @Description:      江苏银行 发送请求 2018-10-24
     * @param:             @return   String 类型,string是请求接口返回的报文信息拼接的字符串
     * @return:            String
     * @throws MalformedURLException,IOException
     *
     */
    public static  BufferedReader httpPostWithXml(String requestBody1,String url,String requestHeader) {
        String urlStr = "";
        String line = "";
        StringBuffer resultSting = new StringBuffer();
        BufferedReader br = null;
        try {
            //urlStr,写在了配置文件中,直接进行获取

            //声明URL
            URL url1 = new URL(url);
            //1.创建链接
            URLConnection con = url1.openConnection();
            //2.封装报文传输进行传输
            String xmlInfo = requestBody1;
            byte[] xmlData = xmlInfo.getBytes("GBK");
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setUseCaches(false);
            con.setRequestProperty("Pragma:", "no-cache");
            con.setRequestProperty("Cache-Control", "no-cache");
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// requestHeader
            con.setRequestProperty("Content-length",String.valueOf(xmlData.length));
            OutputStreamWriter out = new OutputStreamWriter(
                    con.getOutputStream());
            System.out.println(">>>>>>>>>>接口地址为urlStr=" + urlStr);
            System.out.println(">>>>>>>>>>传入的报文xmlInfo=" + xmlInfo);
            out.write(new String(xmlInfo.getBytes("GBK")));
  /* out.write(new String(xmlInfo.getBytes("GBK")));*/
            out.flush();
            out.close();
            //3.获取返回报文
            br = new BufferedReader(new InputStreamReader(
                    con.getInputStream(),"gbk"));
            /*br = new BufferedReader(new InputStreamReader(
                    con.getInputStream(),"ISO-8859-1"));*/

            //对返回值报文进行打印
           /* for (line = br.readLine(); line != null; line = br.readLine()) {
                //对返回的报文进行结果判断<RspCode>0000</RspCode>
                System.out.println(">>>>>>>>>>>>>>>>>>>返回的结果报文内容为:---------"+line);
                //对返回的报文进行拼接,然后返回给业务层,在业务层进行判断
                resultSting.append(line);
            }*/
            System.out.println(">>>>>>>>>>>>>>>>>>>返回的结果报文内容为resultSting.toString():---------"+resultSting.toString());
            return br;
            /*return resultSting.toString();*/
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return br;
    }


    /**
     *
     * @author:            苏凯
     * @Title:             httpPostWithXml
     * @Description:      江苏银行获取返回文件的大小
     * @param:             String sizeUrl
     * @return:            BufferedReader
     * @throws MalformedURLException,IOException
     * http://127.0.0.1:20010/?00SIZE FILENAME
     *
     */
    public static BufferedReader getFileSizeForJiangSu(String sizeUrl) throws Exception {
        //声明URL
        URL url1 = new URL(sizeUrl);
        //1.创建链接
        URLConnection con = url1.openConnection();
        BufferedReader br = new BufferedReader(new InputStreamReader(
                con.getInputStream(), "gbk"));
        return br;

    }
    /**
     *
     * @author:            苏凯
     * @Title:             httpPostWithXml
     * @Description:      江苏银行获取返回文件的数据
     * @param:             String sizeUrl
     * @return:            BufferedReader
     * @throws MalformedURLException,IOException
     * http://127.0.0.1:20010/?00GET FILENAME 0 FILELENGTH
     *
     */
    public static   BufferedReader getFileForJiangSu(String fileUrl) throws Exception {
        URL url2 = new URL(fileUrl);
        //1.创建链接
        URLConnection conn = url2.openConnection();
        // 发送POST请求必须设置如下两行
                           /*conn.setDoOutput(true);
                            conn.setDoInput(true);*/
        BufferedReader br = new BufferedReader(new InputStreamReader(
                conn.getInputStream(), "gbk"));
        return br;

    }

    /**
     *
     * @author:            苏凯
     * @Title:             httpPostWithXml
     * @Description:      江苏银行关闭文件;每次下载结束必须关闭,否则偏移量往后偏移1(文件字节大小加1)
     * @param:             String sizeUrl
     * @return:            BufferedReader
     * @throws MalformedURLException,IOException
     * http://127.0.0.1:20010/?00QUIT
     * 2018-10-26
     */
    public static   BufferedReader offFileForJiangSu(String offFileUrl) throws Exception {
        URL url = new URL(offFileUrl);
        //1.创建链接
        URLConnection conn31 = url.openConnection();
        conn31.setDoOutput(true);
        conn31.setDoInput(true);
        //遍历参数,对返回值报文进行打印
        String lineT13;
        BufferedReader br = new BufferedReader(new InputStreamReader(
                conn31.getInputStream(), "gbk"));
        return br;

    }
 
}
如果这行报错就把这行注释了
 con.setRequestProperty("Pragma:", "no-cache");
【java.lang.IllegalArgumentException: Illegal character(s) in message header field: Pragma:】

XmlAndString互转工具:

com.tcwl.vsmp.mortgage.utils.XmlAndString.java

package com.tcwl.vsmp.mortgage.utils;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;


/**
 * xml,String互转
 * 苏凯
 * 2018-10-24
 */
public class XmlAndString {
    /**
     *
     * @param document
     *            Document对象(读xml生成的)
     * @return String字符串
     * @throws Throwable
     */
    public String xmlToString(Document document) throws Throwable {
        TransformerFactory ft = TransformerFactory.newInstance();
        Transformer ff = ft.newTransformer();
        ff.setOutputProperty("encoding", "GB2312");
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ff.transform(new DOMSource(document), new StreamResult(bos));
        return bos.toString();
    }

    /**
     * xml形状的str串
     * @param
     * @return Document 对象
     */
    public Document StringTOXml(String str) {

        StringBuilder sXML = new StringBuilder();
        sXML.append(str);
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        Document doc = null;
        try {
           /*InputStream is = new ByteArrayInputStream(sXML.toString().getBytes("utf-8"));*/
           /* InputStream is = new ByteArrayInputStream(sXML.toString().getBytes());*/
            InputStream is = new ByteArrayInputStream(sXML.toString().getBytes("GBK"));
            System.out.println("is==null"+is==null);
            doc = dbf.newDocumentBuilder().parse(is);
            is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return doc;
    }

    /**
     *
     * @param document
     * @return 某个节点的值 前提是需要知道xml格式,知道需要取的节点相对根节点所在位置
     */
    public String getNodeValue(Document document, String nodePaht) {
        XPathFactory xpfactory = XPathFactory.newInstance();
        XPath path = xpfactory.newXPath();
        String servInitrBrch = "";
        try {
            servInitrBrch = path.evaluate(nodePaht, document);
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        return servInitrBrch;
    }

    /**
     *
     * @param document
     * @param nodePath
     *            需要修改的节点相对根节点所在位置
     * @param vodeValue
     *            替换的值
     */
    public void setNodeValue(Document document, String nodePath, String vodeValue) {
        XPathFactory xpfactory = XPathFactory.newInstance();
        XPath path = xpfactory.newXPath();
        Node node = null;
        ;
        try {
            node = (Node) path.evaluate(nodePath, document, XPathConstants.NODE);
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        node.setTextContent(vodeValue);
    }

    public static void main(String[] args) throws Throwable {
        // 读取xml文件,生成document对象
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        // 文件的位置在工作空间的根目录(位置随意,只要写对就ok)
        Document document = builder.parse(new File("a.xml"));

        XmlAndString t = new XmlAndString();
        // XML————》String
        String str = t.xmlToString(document);
        System.out.println("str:" + str);
        // String ————》XML
        Document doc = t.StringTOXml(str);
        String nodePath = "/transaction/header/msg/sndMbrCd";
        // getNodeValue
        String nodeValue = t.getNodeValue(doc, nodePath);
        System.out.println("修改前nodeValue:" + nodeValue);
        // setNodeValue
        t.setNodeValue(doc, nodePath, nodeValue + "hello");
        System.out.println("修改后nodeValue:" + t.getNodeValue(doc, nodePath));
    }

}
编码查询,utf-8 与 GBK 编码互转工具:

com.tcwl.vsmp.mortgage.utils.EncodeQueryAndTransition,java

package com.tcwl.vsmp.mortgage.utils;
/**
 * 编码查询,utf-8 与 GBK 编码互转
 * 苏凯
 * 2018-10-24
 */
import java.io.UnsupportedEncodingException;

/**
 * 编码查询与转换
 */
public class EncodeQueryAndTransition {

    //编码转换
    /**
     * gbk转utf-8
     * @param gbk
     * @return
     * @throws UnsupportedEncodingException
     */
    public static byte[] gbk2UtfByte(String gbk)throws UnsupportedEncodingException {
    char[]c= gbk.toCharArray();
    byte[]fullByte=new byte[3*c.length];
    for(int i=0;i<c.length;i++){
        String binary=Integer.toBinaryString(c[i]);
        StringBuffer sb=new StringBuffer();
        int len=16-binary.length();
        //前面补零
        for(int j=0;j<len;j++){
            sb.append("0");
        }
        sb.append(binary);
       //增加位,达到到24位3个字节
        sb.insert(0,"1110");
        sb.insert(8,"10");
        sb.insert(16,"10");
        fullByte[i*3]=Integer.valueOf(sb.substring(0,8),2).byteValue();//二进制字符串创建整型
        fullByte[i*3+1]=Integer.valueOf(sb.substring(8,16),2).byteValue();
        fullByte[i*3+2]=Integer.valueOf(sb.substring(16,24),2).byteValue();
    }
        //模拟UTF-8编码的网站显示
    System.out.println(new String(fullByte,"UTF-8"));

    return fullByte;
}

    /**
     * utf-8 转GBK
     * @param gbkStr
     * @return
     */
    public static byte[] getUTF8BytesFromGBKString(String gbkStr) {
        int n = gbkStr.length();
        byte[] utfBytes = new byte[3 * n];
        int k = 0;
        for (int i = 0; i<n;i++){
            int m=gbkStr.charAt(i);
            if(m<128&&m>=0){
                utfBytes[k++]=(byte)m;
                continue;
            }
            utfBytes[k++]=(byte)(0xe0|(m>>12));
            utfBytes[k++]=(byte)(0x80|((m>>6)&0x3f));
            utfBytes[k++]=(byte)(0x80|(m&0x3f));
        }
        if(k<utfBytes.length){
            byte[]tmp=new byte[k];
            System.arraycopy(utfBytes,0,tmp,0,k);
            return tmp;
        }
        return utfBytes;
    }


/**
 * 编码查询
 */

public static String getEncoding(String str) {
    String encode = "GB2312";
    try {
        if (str.equals(new String(str.getBytes(encode), encode))) {      //判断是不是GB2312
            String s = encode;
            return s;      //是的话,返回“GB2312“,以下代码同理
        }
    } catch (Exception exception) {
    }
    encode = "ISO-8859-1";
    try {
        if (str.equals(new String(str.getBytes(encode), encode))) {      //判断是不是ISO-8859-1
            String s1 = encode;
            return s1;
        }
    } catch (Exception exception1) {
    }
    encode = "UTF-8";
    try {
        if (str.equals(new String(str.getBytes(encode), encode))) {   //判断是不是UTF-8
            String s2 = encode;
            return s2;
        }
    } catch (Exception exception2) {
    }
    encode = "GBK";
    try {
        if (str.equals(new String(str.getBytes(encode), encode))) {      //判断是不是GBK
            String s3 = encode;
            return s3;
        }
    } catch (Exception exception3) {
    }
    return "";        //如果都不是,说明输入的内容不属于常见的编码格式。
}
}

3.创建数据库表和类

mortgage_bankofjiangsucainfo 表:

CREATE TABLE `tanchengwulian`.`Untitled`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '江苏银行账户到账查询信息 ',
  `serial_no` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '平台流水号(C20)',
  `acno` varchar(35) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '账号(C35)',
  `cur_code` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '货币码(C2)',
  `tr_acdt` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '交易日期(C8)',
  `tr_time` varchar(6) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '交易时间交易日期(C6)',
  `host_serial_no` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '主机流水号(C20)',
  `tr_bankno` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '交易行号(C12)',
  `acname` varchar(70) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '户名(C70)',
  `opp_acno` varchar(35) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '对方账号(C35)',
  `opp_cur_code` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '对方货币码(C2)',
  `opp_acname` varchar(70) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '对方账号户名(C70)',
  `opp_bankname` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '对方账号开户行(C60)',
  `opp_bankno` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '对方行号(C12)',
  `tr_type` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '交易类别(C1)\r\n1-自身收付款\r\n2-资金归集\r\n3-结息\r\n4-收费\r\n5-资金池划拨户结息或清息\r\n',
  `csh_dra_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '钞汇标志(C1)',
  `bank_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '他行标志(C1)',
  `area_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '同城异地标志(C1)',
  `tr_from` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '交易来源(C1)',
  `trans_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '发生额标志(C1)',
  `old_serial_no` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '被冲销流水号(C12)',
  `old_acdt` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '原交易日期(C8)',
  `cash_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '现转标志(C1)',
  `crdr_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '借贷标志(C1)',
  `balance` decimal(16, 2) DEFAULT NULL COMMENT '余额(N16.2)',
  `freeze_amt` decimal(16, 2) UNSIGNED ZEROFILL DEFAULT NULL COMMENT '冻结金额(N16.2)',
  `cert_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '凭证种类(C20)',
  `cert_batchno` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '凭证批次号(C20)',
  `cert_no` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '凭证号码(C20)',
  `tr_code` varchar(6) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '交易码(C6)',
  `user_no` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '柜员号(C10)',
  `sub_no` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '传票号(C20)',
  `purpose` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '摘要(C30)【订单编号,用这个去loan_table中与bugGood_order_no字段匹配获取交易类型buyGoods_Id】',
  `postscript` varchar(70) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '附言(C60)',
  `tr_timestamp` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '交易时间戳',
  `reserved1` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '备注字段一(C60)',
  `reserved2` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '备注字段二(C60)',
  `tr_bankname` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '交易行名(C70)',
  `bank_no` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '支付系统联行行号(C20)',
  `bankname` varchar(70) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '支付系统联行行名(C70)',
  `printcount` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '回单打印次数(C8)',
  `payamt` decimal(16, 2) DEFAULT NULL COMMENT '借出金额(N16,2)',
  `Rcvamt` decimal(16, 2) DEFAULT NULL COMMENT '借入金额(N16,2)',
  `amt` decimal(16, 2) DEFAULT NULL COMMENT '交易金额(N16.2)',
  `fee_amt` decimal(16, 2) DEFAULT NULL COMMENT '手续费(N16.2)',
  `last_bal` decimal(16, 2) DEFAULT NULL COMMENT '上笔余额(N16.2)',
  `ststus` int(3) DEFAULT 0 COMMENT '0为未操作,1为操作,数据库默认为0,【非金鑫获取的数据,由自己写入】',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `serial_no_key`(`serial_no`) USING BTREE COMMENT '平台流水号(C20)  必须唯一,不然影响呈现运行'
) ENGINE = InnoDB AUTO_INCREMENT = 713 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

实体类:

com.tcwl.vsmp.mortgage.po.MortgageBankofjiangsucainfo.java

package com.tcwl.vsmp.mortgage.po;

import java.math.BigDecimal;

/**
 * 江苏银行账户到账查询信息
 * 苏凯
 * 2018-10-22
 *
 * http://cron.qqe2.com/
 */

public class MortgageBankofjiangsucainfo {
    private Long id;
  /* ============返回参数头head(数据库无对应表和字段)===========================================*/
    //交易码
    private String tr_code_head;
    //现金管理客户号
    private String cms_corp_no_head;
    //请求号 企业ERP的流水号,原样返回
    private String req_no_head;
    //交易时间 格式hhmmss
    private String tr_time_head;
    //交易日期 格式YYYYMMDD
    private String tr_acdt_head;
    //成功标识;  0-	表示成功 ;  1-	表示通讯机超时 ; 8-  表示主机结果未知 ;其它-交易失败
    private String succ_flag_head;
    //返回信息
    private String ret_info_head;
    //返回码 0000表示成功,正常返回
    private String ret_code_head;
    //返回附加信息
    private String ext_info_head;
    //保留字段
    private String reserved_head;
    //文件标识 传送0-报文,1-文件,或为空
    private String file_flag_head;
    //机构号 公共返回,企业可不用
    private String org_code_head;
    //
    private String total_head;
   // 交易流水号 由现金管理系统产生的流水号
   private String serial_no_head;

  /* ============返回参数身体body (数据库无对应表和字段)==========================================*/
   //记录条数;视记录数而定
    private String record_num_body;
    // 字段数; 视域数而定
    private String field_num_body;
    //数据域 节点<2K,如果file_flag为1则无该节点
    private String serial_record_body;
    //文件名 如果file_flag为0则无该节点
    private String file_name_body;

   /* ===========返回参数body中的 serial_record ; serial_record_body数据域(数据库有对应表和字段) ====================*/
   //平台流水号(C20)
    private String serial_no;
    //账号(C35)
    private String acno;
    //货币码(C2)
    private String cur_code;
    //交易日期(C8)
    private String tr_acdt;
    //交易时间交易日期(C6)
    private String tr_time;
    //主机流水号(C20)
    private String host_serial_no;
    //交易行号(C12)
    private String tr_bankno;
    //户名(C70)
    private String acname;
    //对方账号(C35)
    private String opp_acno;
    //对方货币码(C2)
    private String opp_cur_code;
    //对方账号户名(C70)
    private String opp_acname;
    //对方账号开户行(C60)
    private String opp_bankname;
    //对方行号(C12)
    private String opp_bankno;
    //交易类别(C1)
    private String tr_type;
    //钞汇标志(C1)
    private String csh_dra_flag;
    //他行标志(C1)
    private String bank_flag;
    //同城异地标志(C1)
    private String area_flag;
    //交易来源(C1)
    private String tr_from;
    //发生额标志(C1)
    private String trans_flag;
    //被冲销流水号(C12)
    private String old_serial_no;
    //原交易日期(C8)
    private String old_acdt;
    //现转标志(C1)
    private String cash_flag;
    //借贷标志(C1)
    private String crdr_flag;
    //余额(N16.2)
    private BigDecimal balance;
    //冻结金额(N16.2)
    private BigDecimal freeze_amt;
    //凭证种类(C20)
    private String cert_type;
    //凭证批次号(C20)
    private String cert_batchno;
    //凭证号码(C20)
    private String cert_no;
    //交易码(C6)
    private String tr_code;
    //柜员号(C10)
    private String user_no;
    //传票号(C20)
    private String sub_no;
    //摘要(C30)【订单编号,用这个表MortgageBankofjiangsucainfo的这个purpose去loan_table中与bugGood_order_no字段匹配获取交易类型buyGoods_Id】
    private String purpose;
    //附言(C60)
    private String postscript;
    //交易时间戳
    private String tr_timestamp;
    //备注字段一(C60)
    private String reserved1;
    //备注字段二(C60)
    private String reserved2;
    //交易行名(C70)
    private String tr_bankname;
    //支付系统联行行号(C20)
    private String bank_no;
    //支付系统联行行名(C70)
    private String bankname;
    //回单打印次数(C8)
    private String printcount;
    //借出金额(N16,2)
    private BigDecimal payamt;
    //借入金额(N16,2)
    private BigDecimal rcvamt;
    //交易金额(N16.2)
    private BigDecimal amt;
    //手续费(N16.2)
    private BigDecimal fee_amt;
    //上笔余额(N16.2)
    private BigDecimal last_bal;

    //操作状态 ;0为未操作,1为操作,数据库默认为0,【非金鑫获取的数据,由自己写入】
    private Integer ststus;

    public Long getId() {
        return id;
    }


    public void setId(Long id) {
        this.id = id;
    }

    public String getSerial_no() {
        return serial_no;
    }

    public void setSerial_no(String serial_no) {
        this.serial_no = serial_no == null ? null : serial_no.trim();
    }

    public String getAcno() {
        return acno;
    }

    public void setAcno(String acno) {
        this.acno = acno == null ? null : acno.trim();
    }

    public String getCur_code() {
        return cur_code;
    }

    public void setCur_code(String cur_code) {
        this.cur_code = cur_code == null ? null : cur_code.trim();
    }

    public String getTr_acdt() {
        return tr_acdt;
    }

    public void setTr_acdt(String tr_acdt) {
        this.tr_acdt = tr_acdt == null ? null : tr_acdt.trim();
    }

    public String getTr_time() {
        return tr_time;
    }

    public void setTr_time(String tr_time) {
        this.tr_time = tr_time == null ? null : tr_time.trim();
    }

    public String getHost_serial_no() {
        return host_serial_no;
    }

    public void setHost_serial_no(String host_serial_no) {
        this.host_serial_no = host_serial_no == null ? null : host_serial_no.trim();
    }

    public String getTr_bankno() {
        return tr_bankno;
    }

    public void setTr_bankno(String tr_bankno) {
        this.tr_bankno = tr_bankno == null ? null : tr_bankno.trim();
    }

    public String getAcname() {
        return acname;
    }

    public void setAcname(String acname) {
        this.acname = acname == null ? null : acname.trim();
    }

    public String getOpp_acno() {
        return opp_acno;
    }

    public void setOpp_acno(String opp_acno) {
        this.opp_acno = opp_acno == null ? null : opp_acno.trim();
    }

    public String getOpp_cur_code() {
        return opp_cur_code;
    }

    public void setOpp_cur_code(String opp_cur_code) {
        this.opp_cur_code = opp_cur_code == null ? null : opp_cur_code.trim();
    }

    public String getOpp_acname() {
        return opp_acname;
    }

    public void setOpp_acname(String opp_acname) {
        this.opp_acname = opp_acname == null ? null : opp_acname.trim();
    }

    public String getOpp_bankname() {
        return opp_bankname;
    }

    public void setOpp_bankname(String opp_bankname) {
        this.opp_bankname = opp_bankname == null ? null : opp_bankname.trim();
    }

    public String getOpp_bankno() {
        return opp_bankno;
    }

    public void setOpp_bankno(String opp_bankno) {
        this.opp_bankno = opp_bankno == null ? null : opp_bankno.trim();
    }

    public String getTr_type() {
        return tr_type;
    }

    public void setTr_type(String tr_type) {
        this.tr_type = tr_type == null ? null : tr_type.trim();
    }

    public String getCsh_dra_flag() {
        return csh_dra_flag;
    }

    public void setCsh_dra_flag(String csh_dra_flag) {
        this.csh_dra_flag = csh_dra_flag == null ? null : csh_dra_flag.trim();
    }

    public String getBank_flag() {
        return bank_flag;
    }

    public void setBank_flag(String bank_flag) {
        this.bank_flag = bank_flag == null ? null : bank_flag.trim();
    }

    public String getArea_flag() {
        return area_flag;
    }

    public void setArea_flag(String area_flag) {
        this.area_flag = area_flag == null ? null : area_flag.trim();
    }

    public String getTr_from() {
        return tr_from;
    }

    public void setTr_from(String tr_from) {
        this.tr_from = tr_from == null ? null : tr_from.trim();
    }

    public String getTrans_flag() {
        return trans_flag;
    }

    public void setTrans_flag(String trans_flag) {
        this.trans_flag = trans_flag == null ? null : trans_flag.trim();
    }

    public String getOld_serial_no() {
        return old_serial_no;
    }

    public void setOld_serial_no(String old_serial_no) {
        this.old_serial_no = old_serial_no == null ? null : old_serial_no.trim();
    }

    public String getOld_acdt() {
        return old_acdt;
    }

    public void setOld_acdt(String old_acdt) {
        this.old_acdt = old_acdt == null ? null : old_acdt.trim();
    }

    public String getCash_flag() {
        return cash_flag;
    }

    public void setCash_flag(String cash_flag) {
        this.cash_flag = cash_flag == null ? null : cash_flag.trim();
    }

    public String getCrdr_flag() {
        return crdr_flag;
    }

    public void setCrdr_flag(String crdr_flag) {
        this.crdr_flag = crdr_flag == null ? null : crdr_flag.trim();
    }

    public BigDecimal getBalance() {
        return balance;
    }

    public void setBalance(BigDecimal balance) {
        this.balance = balance;
    }

    public BigDecimal getFreeze_amt() {
        return freeze_amt;
    }

    public void setFreeze_amt(BigDecimal freeze_amt) {
        this.freeze_amt = freeze_amt;
    }

    public String getCert_type() {
        return cert_type;
    }

    public void setCert_type(String cert_type) {
        this.cert_type = cert_type == null ? null : cert_type.trim();
    }

    public String getCert_batchno() {
        return cert_batchno;
    }

    public void setCert_batchno(String cert_batchno) {
        this.cert_batchno = cert_batchno == null ? null : cert_batchno.trim();
    }

    public String getCert_no() {
        return cert_no;
    }

    public void setCert_no(String cert_no) {
        this.cert_no = cert_no == null ? null : cert_no.trim();
    }

    public String getTr_code() {
        return tr_code;
    }

    public void setTr_code(String tr_code) {
        this.tr_code = tr_code == null ? null : tr_code.trim();
    }

    public String getUser_no() {
        return user_no;
    }

    public void setUser_no(String user_no) {
        this.user_no = user_no == null ? null : user_no.trim();
    }

    public String getSub_no() {
        return sub_no;
    }

    public void setSub_no(String sub_no) {
        this.sub_no = sub_no == null ? null : sub_no.trim();
    }

    public String getPurpose() {
        return purpose;
    }

    public void setPurpose(String purpose) {
        this.purpose = purpose == null ? null : purpose.trim();
    }

    public String getPostscript() {
        return postscript;
    }

    public void setPostscript(String postscript) {
        this.postscript = postscript == null ? null : postscript.trim();
    }

    public String getTr_timestamp() {
        return tr_timestamp;
    }

    public void setTr_timestamp(String tr_timestamp) {
        this.tr_timestamp = tr_timestamp == null ? null : tr_timestamp.trim();
    }

    public String getReserved1() {
        return reserved1;
    }

    public void setReserved1(String reserved1) {
        this.reserved1 = reserved1 == null ? null : reserved1.trim();
    }

    public String getReserved2() {
        return reserved2;
    }

    public void setReserved2(String reserved2) {
        this.reserved2 = reserved2 == null ? null : reserved2.trim();
    }

    public String getTr_bankname() {
        return tr_bankname;
    }

    public void setTr_bankname(String tr_bankname) {
        this.tr_bankname = tr_bankname == null ? null : tr_bankname.trim();
    }

    public String getBank_no() {
        return bank_no;
    }

    public void setBank_no(String bank_no) {
        this.bank_no = bank_no == null ? null : bank_no.trim();
    }

    public String getBankname() {
        return bankname;
    }

    public void setBankname(String bankname) {
        this.bankname = bankname == null ? null : bankname.trim();
    }

    public String getPrintcount() {
        return printcount;
    }

    public void setPrintcount(String printcount) {
        this.printcount = printcount == null ? null : printcount.trim();
    }

    public BigDecimal getPayamt() {
        return payamt;
    }

    public void setPayamt(BigDecimal payamt) {
        this.payamt = payamt;
    }

    public BigDecimal getRcvamt() {
        return rcvamt;
    }

    public void setRcvamt(BigDecimal rcvamt) {
        this.rcvamt = rcvamt;
    }

    public BigDecimal getAmt() {
        return amt;
    }

    public void setAmt(BigDecimal amt) {
        this.amt = amt;
    }

    public BigDecimal getFee_amt() {
        return fee_amt;
    }

    public void setFee_amt(BigDecimal fee_amt) {
        this.fee_amt = fee_amt;
    }

    public BigDecimal getLast_bal() {
        return last_bal;
    }

    public void setLast_bal(BigDecimal last_bal) {
        this.last_bal = last_bal;
    }

    public String getTr_code_head() {
        return tr_code_head;
    }

    public void setTr_code_head(String tr_code_head) {
        this.tr_code_head = tr_code_head;
    }

    public String getCms_corp_no_head() {
        return cms_corp_no_head;
    }

    public void setCms_corp_no_head(String cms_corp_no_head) {
        this.cms_corp_no_head = cms_corp_no_head;
    }

    public String getReq_no_head() {
        return req_no_head;
    }

    public void setReq_no_head(String req_no_head) {
        this.req_no_head = req_no_head;
    }

    public String getTr_time_head() {
        return tr_time_head;
    }

    public void setTr_time_head(String tr_time_head) {
        this.tr_time_head = tr_time_head;
    }

    public String getTr_acdt_head() {
        return tr_acdt_head;
    }

    public void setTr_acdt_head(String tr_acdt_head) {
        this.tr_acdt_head = tr_acdt_head;
    }

    public String getSucc_flag_head() {
        return succ_flag_head;
    }

    public void setSucc_flag_head(String succ_flag_head) {
        this.succ_flag_head = succ_flag_head;
    }

    public String getRet_info_head() {
        return ret_info_head;
    }

    public void setRet_info_head(String ret_info_head) {
        this.ret_info_head = ret_info_head;
    }

    public String getRet_code_head() {
        return ret_code_head;
    }

    public void setRet_code_head(String ret_code_head) {
        this.ret_code_head = ret_code_head;
    }

    public String getExt_info_head() {
        return ext_info_head;
    }

    public void setExt_info_head(String ext_info_head) {
        this.ext_info_head = ext_info_head;
    }

    public String getReserved_head() {
        return reserved_head;
    }

    public void setReserved_head(String reserved_head) {
        this.reserved_head = reserved_head;
    }

    public String getFile_flag_head() {
        return file_flag_head;
    }

    public void setFile_flag_head(String file_flag_head) {
        this.file_flag_head = file_flag_head;
    }

    public String getOrg_code_head() {
        return org_code_head;
    }

    public void setOrg_code_head(String org_code_head) {
        this.org_code_head = org_code_head;
    }

    public String getTotal_head() {
        return total_head;
    }

    public void setTotal_head(String total_head) {
        this.total_head = total_head;
    }

    public String getSerial_no_head() {
        return serial_no_head;
    }

    public void setSerial_no_head(String serial_no_head) {
        this.serial_no_head = serial_no_head;
    }

    public String getRecord_num_body() {
        return record_num_body;
    }

    public void setRecord_num_body(String record_num_body) {
        this.record_num_body = record_num_body;
    }

    public String getField_num_body() {
        return field_num_body;
    }

    public void setField_num_body(String field_num_body) {
        this.field_num_body = field_num_body;
    }

    public String getSerial_record_body() {
        return serial_record_body;
    }

    public void setSerial_record_body(String serial_record_body) {
        this.serial_record_body = serial_record_body;
    }

    public String getFile_name_body() {
        return file_name_body;
    }

    public void setFile_name_body(String file_name_body) {
        this.file_name_body = file_name_body;
    }

    public Integer getStstus() {
        return ststus;
    }

    public void setStstus(Integer ststus) {
        this.ststus = ststus;
    }

    @Override
    public String toString() {
        return "MortgageBankofjiangsucainfo{" +
                "id=" + id +
                ", tr_code_head='" + tr_code_head + '\'' +
                ", cms_corp_no_head='" + cms_corp_no_head + '\'' +
                ", req_no_head='" + req_no_head + '\'' +
                ", tr_time_head='" + tr_time_head + '\'' +
                ", tr_acdt_head='" + tr_acdt_head + '\'' +
                ", succ_flag_head='" + succ_flag_head + '\'' +
                ", ret_info_head='" + ret_info_head + '\'' +
                ", ret_code_head='" + ret_code_head + '\'' +
                ", ext_info_head='" + ext_info_head + '\'' +
                ", reserved_head='" + reserved_head + '\'' +
                ", file_flag_head='" + file_flag_head + '\'' +
                ", org_code_head='" + org_code_head + '\'' +
                ", total_head='" + total_head + '\'' +
                ", serial_no_head='" + serial_no_head + '\'' +
                ", record_num_body='" + record_num_body + '\'' +
                ", field_num_body='" + field_num_body + '\'' +
                ", serial_record_body='" + serial_record_body + '\'' +
                ", file_name_body='" + file_name_body + '\'' +
                ", serial_no='" + serial_no + '\'' +
                ", acno='" + acno + '\'' +
                ", cur_code='" + cur_code + '\'' +
                ", tr_acdt='" + tr_acdt + '\'' +
                ", tr_time='" + tr_time + '\'' +
                ", host_serial_no='" + host_serial_no + '\'' +
                ", tr_bankno='" + tr_bankno + '\'' +
                ", acname='" + acname + '\'' +
                ", opp_acno='" + opp_acno + '\'' +
                ", opp_cur_code='" + opp_cur_code + '\'' +
                ", opp_acname='" + opp_acname + '\'' +
                ", opp_bankname='" + opp_bankname + '\'' +
                ", opp_bankno='" + opp_bankno + '\'' +
                ", tr_type='" + tr_type + '\'' +
                ", csh_dra_flag='" + csh_dra_flag + '\'' +
                ", bank_flag='" + bank_flag + '\'' +
                ", area_flag='" + area_flag + '\'' +
                ", tr_from='" + tr_from + '\'' +
                ", trans_flag='" + trans_flag + '\'' +
                ", old_serial_no='" + old_serial_no + '\'' +
                ", old_acdt='" + old_acdt + '\'' +
                ", cash_flag='" + cash_flag + '\'' +
                ", crdr_flag='" + crdr_flag + '\'' +
                ", balance=" + balance +
                ", freeze_amt=" + freeze_amt +
                ", cert_type='" + cert_type + '\'' +
                ", cert_batchno='" + cert_batchno + '\'' +
                ", cert_no='" + cert_no + '\'' +
                ", tr_code='" + tr_code + '\'' +
                ", user_no='" + user_no + '\'' +
                ", sub_no='" + sub_no + '\'' +
                ", purpose='" + purpose + '\'' +
                ", postscript='" + postscript + '\'' +
                ", tr_timestamp='" + tr_timestamp + '\'' +
                ", reserved1='" + reserved1 + '\'' +
                ", reserved2='" + reserved2 + '\'' +
                ", tr_bankname='" + tr_bankname + '\'' +
                ", bank_no='" + bank_no + '\'' +
                ", bankname='" + bankname + '\'' +
                ", printcount='" + printcount + '\'' +
                ", payamt=" + payamt +
                ", rcvamt=" + rcvamt +
                ", amt=" + amt +
                ", fee_amt=" + fee_amt +
                ", last_bal=" + last_bal +
                ", ststus=" + ststus +

                '}';
    }
}

 

接口:

com.tcwl.vsmp.mortgage.service.impl.MortgageBankofjiangsucainfoServiceImpl.java

package com.tcwl.vsmp.mortgage.service.impl;

import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;
import com.tcwl.vsmp.common.BaseController;
import com.tcwl.vsmp.common.ExceptionInfo;
import com.tcwl.vsmp.common.OilConstant;
import com.tcwl.vsmp.customer.po.Customer;
import com.tcwl.vsmp.external.service.HzCapitalService;
import com.tcwl.vsmp.loanmgt.po.LoanTable;
import com.tcwl.vsmp.loanmgt.service.LoanQueryService;
import com.tcwl.vsmp.mortgage.common.MortgageBankofjiangsucainfoConstant;
import com.tcwl.vsmp.mortgage.dao.MortgageBankofjiangsucainfoMapper;
import com.tcwl.vsmp.mortgage.po.MortgageBankofjiangsucainfo;
import com.tcwl.vsmp.mortgage.service.MortgageBankofjiangsucainfoService;
import com.tcwl.vsmp.mortgage.utils.EncodeQueryAndTransition;
import com.tcwl.vsmp.oil.dao.CardApplyDao;
import com.tcwl.vsmp.oil.po.CardApply;
import com.tcwl.vsmp.oil.po.Card_info;
import com.tcwl.vsmp.oil.service.Card_infoService;
import com.tcwl.vsmp.oil.service.OilCardOperationService;
import com.tcwl.vsmp.passcard.common.PassCardConstant;
import com.tcwl.vsmp.passcard.po.stk.ChargeInfo;
import com.tcwl.vsmp.passcard.po.stk.ChargeReq;
import com.tcwl.vsmp.passcard.service.STCPassCardChargeRecordService;
import com.tcwl.vsmp.passcard.util.STCRechargeUtil;
import com.tcwl.vsmp.utils.BatchNumber;
import com.tcwl.vsmp.utils.DateUtil;
import com.tcwl.vsmp.utils.JsonAndBaseUtils;
import com.tcwl.vsmp.utils.RandNumUtils;
import com.tcwl.vsmp.weizhang.util.HttpClientUtil;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.shiro.SecurityUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import quartz.jiangSuBank.JiangSuBank;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 江苏银行账户到账查询信息
 * 苏凯
 * 2018-10-22
 * Service接口实现
 */
@Service
public class MortgageBankofjiangsucainfoServiceImpl implements MortgageBankofjiangsucainfoService{


    private static final Logger logger =   LoggerFactory.getLogger(JiangSuBank.class);
  /*  @Autowired
    private MortgageBankofjiangsucainfoService mortgageBankofjiangsucainfoService;*/
    @Autowired
    private STCPassCardChargeRecordService sTCPassCardChargeRecordService;//通行卡表

    @Autowired
    private HzCapitalService hzCapitalService;
    @Autowired
    private LoanQueryService loanQueryService;//借款查询表
    @Autowired
    private Card_infoService card_infoService;//油卡详细
    @Autowired
    private OilCardOperationService oilCardOperationService;//油卡充值接口

    /**
     * 车应用Dao.
     * 油卡业务
     */
    @Autowired
    private CardApplyDao cardApplyDao;

    /**
     * 请求头
     * @throws Exception
     */
// tr_code	交易码	C6	M
    @Value("#{prop.TR_CODE_QUERY}")
    private String tr_code; //查询账户明细 200110
    //cms_corp_no	现金管理客户号	C20	M  企业不需要赋值,由银企前置机进行赋值。
    private String cms_corp_no = "";
    //user_no	用户号	C10	M	企业不需要赋值,由银企前置机进行赋值。
    private String user_no = "";

    //org_code	机构号	C20	M	企业不需要赋值,由银企前置机进行赋值。
    private String org_code = "";

    //serial_no	交易流水号	C20	C	送空,由现金管理系统产生
    private String serial_no = "";

    //req_no	请求号	C40	C	企业ERP的流水号
    private String req_no = "";

    //tr_acdt	交易日期	C8	M	格式  YYYYMMDD
    private String tr_acdt  = null;


    //tr_time	交易时间	C6	M	格式hhmmss
    private String tr_time  = null;

    //channel	渠道标识	C1	M	ERP送‘5’
    private String channel ="5";

    //sign	签名标识  0-报文未签名 ;  1-报文已签名;  企业送空,由银企前置进行传送.
    private String sign = "";

    //file_flag	文件标识	0-报文1-文件
    private String file_flag =  "0";

    //reserved	保留字段
    private String reserved = "";

    /**
     * 请求体
     * @throws Exception
     */

    @Value("#{prop.ACNO}")
    //acno	账号	C35	M  ,自己公司账号
    private String acno;

    @Value("#{prop.CUR_CODE}")
    //cur_code	币种	C2	M  01	人民币
    private String cur_code ;
    //start_date	起始日期	C8	M	日期格式:YYYYMMDD  ;日期时间段不能超过3个月的时间
    private String start_date = "";
    //end_date	终止日期	C8	M	日期格式:YYYYMMDD
    private String end_date = "";

    /**
     * 请求地址
     */
    @Value("#{prop.FRONT_END_PROCESSOR_IP}")
    //前置机ip
    private String FRONT_END_PROCESSOR_IP;
    @Value("#{prop.DEAL_PROT}")
    //前置机交易端口prot
    private String  DEAL_PROT ;

    //前置机文件端口prot  MortgageBankofjiangsucainfoConstant.FILE_PROT
    @Value("#{prop.FILE_PROT}")
    public String  FILE_PROT;

    @Value("#{prop.DATETEMPLATE}")
    //日期模板
    private String dateTemplate ;
    @Value("#{prop.TIMETEMPLATE}")
    //时间模板
    private String timeTemplate ;

    @Value("#{prop.JIANGSUBANK_GETACCOUNTINFO_RUNTIME}")
    //每间隔 N 时间获取一次数据,这里的时间与定时器的时间保持一致(单位换算成秒)
    private String runTime;
    //当log为false 时查询全天所有的数据
    private  Boolean log = true;
    @Resource
    private MortgageBankofjiangsucainfoMapper mortgageBankofjiangsucainfoMapper;
    /**
     * 根据ID删除数据
     * @param id
     * @return
     */
    @Override
    public int deleteByPrimaryKey(Long id)throws Exception {
        int i = mortgageBankofjiangsucainfoMapper.deleteByPrimaryKey(id);
        return i;
    }

    /**
     * 增加数据
     * @param record
     * @return
     */
    @Override
    public int insert(MortgageBankofjiangsucainfo record) throws Exception{
        int i = mortgageBankofjiangsucainfoMapper.insert(record);
        return i;
    }
    /**
     * 增加数据(Null值不增加)
     * @param record
     * @return
     */
    @Override
    public int insertSelective(MortgageBankofjiangsucainfo record) throws Exception{
        int i = mortgageBankofjiangsucainfoMapper.insertSelective(record);
        return i;
    }
    /**
     * 按主键查询数据
     * @param id
     * @return
     */
    @Override
    public MortgageBankofjiangsucainfo selectByPrimaryKey(Long id)throws Exception {
        MortgageBankofjiangsucainfo mortgageBankofjiangsucainfo = mortgageBankofjiangsucainfoMapper.selectByPrimaryKey(id);
        return mortgageBankofjiangsucainfo;
    }
    /**
     * 按操作状态查询
     * @param ststus
     * @return
     */
    @Override
    public List<MortgageBankofjiangsucainfo> selectByStstus(int ststus)throws Exception {
        List<MortgageBankofjiangsucainfo> mortgageBankofjiangsucainfos = mortgageBankofjiangsucainfoMapper.selectByStstus(ststus);
        return mortgageBankofjiangsucainfos;
    }


    /**
     * 按主键更新数据(Null值不更新)
     * @param record
     * @return
     */
    @Override
    public int updateByPrimaryKeySelective(MortgageBankofjiangsucainfo record)throws Exception {
        int i = mortgageBankofjiangsucainfoMapper.updateByPrimaryKeySelective(record);
        return i;
    }
    /**
     * 按主键更新数据
     * @param record
     * @return
     */
    @Override
    public int updateByPrimaryKey(MortgageBankofjiangsucainfo record) throws Exception{
        int i = mortgageBankofjiangsucainfoMapper.updateByPrimaryKey(record);
        return i;
    }

    /**
     * 获取江苏银行到账信息,存入数据库
     * 当getDayInfo为true s时查询当天所有数据;查询完成后需要 成员变量 getDayInfo设为false 不查询当天所有
     *  成员变量 int x 控制手动执行获取当天全天银行数据的次数为1次,避免死循环
     *  当调用的此getJiangSuBankAccountInfo方法 返回true时 [成员变量 X = 0  与 成员变量getDayInfo = false 值还得设回默认]
     * @throws Exception
     */
    public synchronized Boolean getJiangSuBankAccountInfo(Boolean getDayInfo,int x) throws Exception{//当log为false 时查询全部
        System.out.println("--------------------------------------------log-----------------------------------------------: "+ log);
        System.out.println("--------------------------------------------getDayInfo-----------------------------------------------: "+ getDayInfo);

        System.out.println("执行江苏银行获取到账信息任务sys!");
        //存储到账的信息
        List<Map<String, String>> mapList =null ;
        try{
            //url
            String url = "http://" + FRONT_END_PROCESSOR_IP + ":" + DEAL_PROT;
            SimpleDateFormat sData = new SimpleDateFormat(dateTemplate);
            String data = sData.format(new Date());//当前日期
            SimpleDateFormat sTime = new SimpleDateFormat(timeTemplate);
            String time = sTime.format(new Date());//当前时间
            String line = "";
            //tr_acdt	交易日期
            tr_acdt = data;
            //tr_time	交易时间
            tr_time = time;
            //start_date	起始日期
            start_date = data;
            //end_date	终止日期
            end_date = data;
            System.out.println("tr_acdt:" + tr_acdt + " tr_time:" + tr_time + "start_date:" + start_date + "end_date:" + end_date);
            String requestHeader = "application/x-www-form-urlencoded";

            //1.设置发送的报文
            StringBuilder sb = getStringBuilderWithSetXML();

            String requestBody = sb.toString();
            System.out.println("0:" + EncodeQueryAndTransition.getEncoding(requestBody));

            byte[] requestBodyBytes = requestBody.getBytes();
            String requestBody1 = new String(requestBodyBytes, "GBK");
            System.out.println("=========requestBody=========" + requestBody);
            //2.向银行发送GBK数据,BufferedReader br并收到返回参数如有中文字符用 EncodeQueryAndTransition.getUTF8BytesFromGBKString(String gbkStr)方法 将中文单独转成 GBK
            BufferedReader br = HttpClientUtil.httpPostWithXml(requestBody1, url, requestHeader);
            System.out.println("1:" + EncodeQueryAndTransition.getEncoding(requestBody));//获取编码格式

            //3.收到返回的数据,遍历参数,对返回值报文进行打印
            for (line = br.readLine(); line != null; line = br.readLine()) {
                //对返回的报文进行结果判断<RspCode>0000</RspCode>
                System.out.println(">>>>>>>>>>>>>>>>>>>返回的结果报aaa文内容为:---------" + line);
                //对返回的报文进行拼接,然后返回给业务层,在业务层进行判断
                System.out.println("line:" + EncodeQueryAndTransition.getEncoding(line));


                //4.返回值转换xml 去除00 ,拼接头 <?xml version="1.0" encoding="UTF-8"?>
                String lineXML = line.substring(2, (line.length()));
                System.out.println("-------------lineXML----------:" + lineXML);
                if(lineXML == null){
                    continue;
                }
                Document dom = DocumentHelper.parseText(lineXML);
                System.out.println("dom==null" + (dom == null));
                if(dom == null){
                    continue;
                }
                Element root = dom.getRootElement();
                if (root == null) {
                    continue;
                }
                //应答报头体
                Element head = root.element("head");
                String tr_code = null; //交易码	C6	M
                String cms_corp_no = null; //现金管理客户号	C20	M	公共返回,企业可不用
                String user_no = null; //用户号	C10	M	公共返回,企业可不用
                String org_code = null; //机构号	C20	M	公共返回,企业可不用
                String serial_no = null; //交易流水号	C20	C	由现金管理系统产生的流水号
                String req_no = null; //请求号	C40	C	企业ERP的流水号,原样返回
                String tr_acdt = null; //交易日期	C8	M	格式YYYYMMDD
                String tr_time = null;//交易时间	C6	M	格式hhmmss
                String succ_flag = null; //成功标识	C1	M ;	0-	表示成功 1-	表示通讯机超时 8-表示主机结果未知 其它-交易失败
                String ret_code = null; //返回码	C4	M	0000表示成功,正常返回
                String ret_info = null; //返回信息	C60	M
                String ext_info = null; //返回附加信息	C255	C
                String file_flag = null; //文件标识	C1	C	传送0-报文 1-文件,或为空
                String reserved = null; //保留字段	C60	C

                if (head != null) {
                    Element tr_codeElement = head.element("tr_code");//交易码	C6	M
                    Element tr_acdtElement = head.element("tr_acdt"); //交易日期	C8	M	格式YYYYMMDD
                    Element tr_timeElement = head.element("tr_time");//交易时间	C6	M	格式hhmmss
                    Element file_flagElement = head.element("file_flag");//文件标识	C1	C	传送0-报文1-文件,或为空
                    Element ret_infoElement = head.element("ret_info");//返回信息	C60	M

                    Element cms_corp_noElement = head.element("cms_corp_no");//现金管理客户号	C20	M	公共返回,企业可不用
                    Element user_noElement = head.element("user_no");//用户号	C10	M	公共返回,企业可不用
                    Element org_codeElement = head.element("org_code"); //机构号	C20	M	公共返回,企业可不用
                    Element serial_noElement = head.element("serial_no"); //交易流水号	C20	C	由现金管理系统产生的流水号
                    Element req_noElement = head.element("req_no");//请求号	C40	C	企业ERP的流水号,原样返回
                    Element succ_flagElement = head.element("succ_flag");//成功标识	C1	M 	0-	表示成功 1-	表示通讯机超时 8-表示主机结果未知 其它-交易失败
                    Element ret_codeElement = head.element("ret_code"); //返回码	C4	M	0000表示成功,正常返回
                    Element ext_infoElement = head.element("ext_info"); //返回附加信息	C255	C
                    Element reservedElement = head.element("reserved");//保留字段	C60	C


                    if (tr_codeElement != null) { //交易码	C6	M
                        tr_code = tr_codeElement.getText();
                    }
                    if (tr_acdtElement != null) {//交易日期	C8	M	格式YYYYMMDD
                        tr_acdt = tr_acdtElement.getText();
                    }
                    if (tr_timeElement != null) { //交易时间	C6	M	格式hhmmss
                        tr_time = tr_timeElement.getText();
                    }
                    if (file_flagElement != null) { //文件标识	C1	C	传送0-报文1-文件,或为空
                        file_flag = file_flagElement.getText();
                    }
                    if (ret_infoElement != null) { //返回信息	C60	M
                        ret_info = ret_infoElement.getText();
                    }
                    if (cms_corp_noElement != null) {
                        cms_corp_no = cms_corp_noElement.getText();//现金管理客户号	C20	M	公共返回,企业可不用

                    }
                    if (user_noElement != null) {
                        user_no = user_noElement.getText();//用户号	C10	M	公共返回,企业可不用

                    }
                    if (org_codeElement != null) {
                        org_code = org_codeElement.getText(); //机构号	C20	M	公共返回,企业可不用

                    }
                    if (serial_noElement != null) {
                        serial_no = serial_noElement.getText(); //交易流水号	C20	C	由现金管理系统产生的流水号

                    }
                    if (req_noElement != null) {
                        req_no = req_noElement.getText();//请求号	C40	C	企业ERP的流水号,原样返回

                    }
                    if (succ_flagElement != null) {
                        succ_flag = succ_flagElement.getText();//成功标识	C1	M 	0-	表示成功 1-	表示通讯机超时 8-表示主机结果未知 其它-交易失败

                    }
                    if (ret_codeElement != null) {
                        ret_code = succ_flagElement.getText(); //返回码	C4	M	0000表示成功,正常返回

                    }
                    if (ext_infoElement != null) {
                        ext_info = ext_infoElement.getText(); //返回附加信息	C255	C

                    }
                    if (reservedElement != null) {
                        reserved = reservedElement.getText();//保留字段	C60	C
                    }
                }


                //应答报文体
                String record_num = null;
                ;//记录条数	C35	M	视记录数而定
                String field_num = null;
                ;//字段数	C2	M	视域数而定
                String serial_record = null;
                ;//数据域	C	M	节点<2K,如果file_flag为1则无该节点
                String file_name = null;
                ;//文件名	C70	M	如果file_flag为0则无该节点

                Element body = root.element("body");
                if (body != null) {
                    Element record_numElement = body.element("record_num");//记录条数	C35	M	视记录数而定
                    Element field_numElement = body.element("field_num");//字段数	C2	M	视域数而定
                    Element serial_recordElement = body.element("serial_record");//数据域	C	M	节点<2K,如果file_flag为1则无该节点
                    Element file_nameElement = body.element("file_name");//文件名	C70	M	如果file_flag为0则无该节点

                    if (record_numElement != null) {
                        record_num = record_numElement.getText();//记录条数	C35	M	视记录数而定
                    }
                    if (field_numElement != null) {
                        field_num = field_numElement.getText();//字段数	C2	M	视域数而定
                    }
                    if (serial_recordElement != null) {
                        serial_record = serial_recordElement.getText();//数据域	C	M	节点<2K,如果file_flag为1则无该节点
                    }
                    if (file_nameElement != null) {
                        file_name = file_nameElement.getText();//文件名	C70	M	如果file_flag为0则无该节点
                    }
                }

                //     file_flag = null; //文件标识	C1	C	传送0-报文 1-文件,或为空
                //从URL中解析数据
                if (file_flag != null && "0".equals(file_flag)) {

                    if (null != field_num) {
                        System.out.println("record_num:" + record_num);//记录条数视记录数而定
                        if (serial_record != null) {
                            List<String> stringList = Arrays.asList(serial_record.split("\\|"));
                            System.out.println("stringList.size() =" + stringList.size());
                            List<List<String>> listS = new ArrayList<>();
                            if (stringList != null && stringList.size() > 0) {
                                int ii = 0;
                                List<String> list = null ;
                                for (int y = 1; y <= ((Integer.parseInt(record_num))+1); y++) {//record_num 返回的数据条数
                                    list = new ArrayList<>();
                                    for (int i = ii; i < Integer.parseInt(field_num) * y; i++) {
                                        list.add(stringList.get(i));
                                        ii = i+1;
                                    }
                                    if(list != null && list.size() > 0){
                                        listS.add(list);
                                    }
                                }
                            }
                            //5.将得到的数据解析到map
                            mapList = getMapList(listS);

                        }
                    }
                }

                //从文件中解析数据
                if (file_flag != null && "1".equals(file_flag)) {
                    if (file_name != null) {
                        //获取文件大小
                        String sizeUrl = "http://" + FRONT_END_PROCESSOR_IP + ":" + FILE_PROT + "/?00SIZE " + file_name;
                        BufferedReader br1 =  HttpClientUtil.getFileSizeForJiangSu(sizeUrl);
                        System.out.println("br1=====================: " + br1);
                        String lineT;
                        String lineTT = null;
                        //遍历参数,对返回值报文进行打印
                        for (lineT = br1.readLine(); lineT != null; lineT = br1.readLine()) {
                            //对返回的报文进行结果判断<RspCode>0000</RspCode>
                            System.out.println(">>>>>>>>>>>>>>>>>>>返回的结果报lineT文内容为:---------" + lineT);
                            //对返回的报文进行拼接,然后返回给业务层,在业务层进行判断
                            System.out.println("lineT:" + EncodeQueryAndTransition.getEncoding(lineT));
                            lineTT = lineT;
                        }

                        //下载文件
                        if (lineTT != null && 0 < lineTT.length()) {
                            String lineTT1 = lineTT.replace("00OK", "");
                            //声明URL
                            String fileUrl = "http://" + FRONT_END_PROCESSOR_IP + ":" + FILE_PROT + "/?00GET " + file_name + " 0" + lineTT1;
                            System.out.println("fileUrl :" + fileUrl );
                            //获取返回的数据文件
                            BufferedReader br3 =  HttpClientUtil.getFileForJiangSu(fileUrl);
                            String lineT1;
                            List<List<String>> lineT1List = new ArrayList<>();
                            //遍历参数,对返回值报文进行打印
                            for (lineT1 = br3.readLine(); lineT1 != null; lineT1 = br3.readLine()) {
                                //对返回的报文进行结果判断<RspCode>0000</RspCode>
                                System.out.println(">>>>>>>>>>>>>>>>>>>返回的结果报lineT1文内容为:---------" + lineT1);
                                //对返回的报文进行拼接,然后返回给业务层,在业务层进行判断
                                System.out.println("lineT1:" + EncodeQueryAndTransition.getEncoding(lineT1));
                                lineT1List.add(Arrays.asList(lineT1.split("\\|")));
                            }
                            //5.获取返回的数据;将得到的数据解析到map
                            mapList = getMapList(lineT1List);
                        }

                   /*   Thread.sleep(10000);*/
                        //必须关闭下载文件
                        //声明URL
                        String offFileUrl = "http://" + FRONT_END_PROCESSOR_IP + ":" + FILE_PROT + "/?00QUIT";
                        System.out.println("offFileUrl:" + offFileUrl);
                        //关闭文件通道
                        BufferedReader br33 = HttpClientUtil.offFileForJiangSu(offFileUrl);
                        String lineT13;
                        //遍历返回的数据
                        for (lineT13 = br33.readLine(); lineT13 != null; lineT13 = br33.readLine()) {
                            //对返回的报文进行结果判断<RspCode>0000</RspCode>
                            System.out.println(">>>>>>>>>>>>>>>>>>>返回的结果报lineT13文内容为:---------" + lineT13);
                            //对返回的报文进行拼接,然后返回给业务层,在业务层进行判断
                            System.out.println("lineT13:" + EncodeQueryAndTransition.getEncoding(lineT13));
                        }
                    }
                } else {//处理
                    System.out.println("文件中没有返回任何数据!");
                }
            }

            /*==================将数据按查询时间筛选,把之前获取的数据剔除,留最新数据;因为查的是一整天的数据========================*/
            List<MortgageBankofjiangsucainfo> mortgageBankofjiangsucainfoList =new ArrayList<>();
            if(mapList != null && mapList.size() >0 ) {
                for (int i = 0; i < mapList.size(); i++) {
                    if (log) {
                        // SimpleDateFormat dateTemplateDf = new SimpleDateFormat(dateTemplate);
                        String dateTemplateTimeTemplate = dateTemplate + " " + timeTemplate;
                        SimpleDateFormat dateTemplateTimeTemplateDf = new SimpleDateFormat(dateTemplateTimeTemplate);//交易时间模板
                        String trAcdt = mapList.get(i).get("tr_acdt");//交易日期
                        String trTime = mapList.get(i).get("tr_time");//交易时间
                        System.out.println("===============mapList2===================:" + mapList);
                        boolean yesorno = false;
                        String trAcdtTrTime = null;
                        if (trTime != null && trAcdt != null) {
                            trAcdtTrTime = trAcdt + " " + trTime;
                            // 表达式对象
                            Pattern p = Pattern.compile("^[1-9]\\d{3}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\\s+(20|21|22|23|[0-1]\\d)[0-5]\\d[0-5]\\d$");

                            // 创建 Matcher 对象
                            Matcher m = p.matcher(trAcdtTrTime);

                            // 是否完全匹配
                            yesorno = m.matches();
                        }
                        if (!yesorno) {
                            continue;
                        }
                        if (trAcdtTrTime == null) {
                            continue;
                        }
                        Date dateTemplateTimeTemplateDate = dateTemplateTimeTemplateDf.parse(trAcdtTrTime);
                        Calendar time1 = Calendar.getInstance();//交易日期与时间
                        Calendar time2 = Calendar.getInstance();//当前系统日期与时间
                        Calendar time3 = Calendar.getInstance();//当前系统日期的间隔N时间后的日期与时间
                        time1.setTime(dateTemplateTimeTemplateDate);//交易日期与时间
                        // 秒
                        if (runTime == null) {
                            continue;
                        }
                        time3.add(Calendar.SECOND, -(Integer.parseInt(runTime)));//当前系统日期的间隔N时间后的日期与时间
                        Date time4 = time1.getTime();//交易日期与时间
                        Date time5 = time2.getTime();//当前系统日期与时间
                        Date time6 = time3.getTime();//当前系统日期的间隔N时间后的日期与时间


                        System.out.println("time4 交易日期与时间 " + dateTemplateTimeTemplateDf.format(time4));
                        System.out.println("time5 当前系统日期与时间" + dateTemplateTimeTemplateDf.format(time5));
                        System.out.println("time6 当前系统日期的间隔N时间后的日期与时间" + dateTemplateTimeTemplateDf.format(time6));


                        System.out.println("(time6.before(time4)" + (time6.before(time4)));
                        System.out.println("(time6.compareTo(time6)==0)" + (time6.compareTo(time4) == 0));
                        System.out.println("(time6.before(time4)|| (time4.compareTo(time6)==0) )" + (time6.before(time6) || (time4.compareTo(time6) == 0)));
                        System.out.println("time4.before(time5)" + time4.before(time5));
                        System.out.println("(time5.compareTo(time4)==0)==0)" + (time5.compareTo(time4) == 0));
                        System.out.println("(time4.before(time5) || (time5.compareTo(time4)==0))" + (time4.before(time5) || (time5.compareTo(time4) == 0)));
                        System.out.println("((time6.before(time4))\n" +
                                "                        && (time4.before(time5) || (time5.compareTo(time4)==0)) )" +
                                "" + (time6.before(time4)
                                && (time4.before(time5) || (time5.compareTo(time4) == 0))));

                        if ((time6.before(time4))
                                && (time4.before(time5) || (time5.compareTo(time4) == 0))) {
                        /* ===========返回参数body中的 serial_record ; serial_record_body数据域(数据库有对应表和字段) ====================*/
                            //把map 键值数据 转换成实体类封装
                            MortgageBankofjiangsucainfo mortgageBankofjiangsucainfo = getMortgageBankofjiangsucainfo(mapList, i);
                            System.out.println("464mortgageBankofjiangsucainfo.toString() " + mortgageBankofjiangsucainfo.toString());
                            if (mortgageBankofjiangsucainfo != null) {
                                mortgageBankofjiangsucainfoList.add(mortgageBankofjiangsucainfo);
                            }
                        }

                    /*==================================*/
                    }else{ //当异常发生时查询当天全部数据, 重复数据会通过唯一键 流水号自动过滤;
                        MortgageBankofjiangsucainfo mortgageBankofjiangsucainfo = getMortgageBankofjiangsucainfo(mapList, i);
                        System.out.println("464mortgageBankofjiangsucainfo.toString() " + mortgageBankofjiangsucainfo.toString());
                        if (mortgageBankofjiangsucainfo != null) {
                            mortgageBankofjiangsucainfoList.add(mortgageBankofjiangsucainfo);

                        }
                    }

                }//for

                System.out.println("========================mortgageBankofjiangsucainfoList: "+ ToStringBuilder.reflectionToString(mortgageBankofjiangsucainfoList, ToStringStyle.SHORT_PREFIX_STYLE));
                System.out.println("mortgageBankofjiangsucainfoList.size():"+mortgageBankofjiangsucainfoList.size());
                if(mortgageBankofjiangsucainfoList != null && mortgageBankofjiangsucainfoList.size() >0){
                    //将获取到的银行到账信息数据写入数据库,重复数据会经过数据库唯一键过滤;(流水号订单号为唯一键)
                    for (int i = 0; i < mortgageBankofjiangsucainfoList.size(); i++) {
                        try{
                            if(mortgageBankofjiangsucainfoList.get(i).getPurpose() != null &&mortgageBankofjiangsucainfoList.get(i).getPurpose().length()>0){
                                System.out.println("========================mortgageBankofjiangsucainfoList.get(i).toString(): "+mortgageBankofjiangsucainfoList.get(i).toString());
                                int i1 = insertSelective(mortgageBankofjiangsucainfoList.get(i));
                                System.out.println("i1====================="+i1);
                            }

                        }catch(DuplicateKeyException e){
                            System.out.println("过滤重复数据,忽略异常:DuplicateKeyException!");
                        }catch (MySQLIntegrityConstraintViolationException e){
                            System.out.println("过滤重复数据 忽略异常:MySQLIntegrityConstraintViolationException!");
                        }catch (NullPointerException e){
                            System.out.println("过滤重复数据,忽略异常:NullPointerException!");
                        }

                    }
                }

            }// end=====将数据按查询时间筛选,把之前获取的数据剔除,留最新数据;因为查的是一整天的数据

            //手动获取当天全天的数据 [getDayInfo 默认false 不查询]
            if(getDayInfo){
                x++;
                if(x == 1){ //控制手动执行获取当天全天银行数据的次数为1次,避免死循环
                    throw new RuntimeException("获取当天所有银行到账数据!");
                }

            }
          return false;//表示未查询当天一天所有的到账数据;getDayInfo为默认值false
        }catch(IllegalArgumentException e5){
            e5.printStackTrace();
            logger.info(e5.getMessage());
            System.out.println("链接前置机异常请检查!");
        }catch (DataIntegrityViolationException e){
            e.printStackTrace();
            logger.info(e.getMessage());
            System.out.println("获取的数据字段的长度超过本地数据库所设定的数据字段长度!");
        }catch(RuntimeException e3){//手动触发获取当天所有数据
            if(x == 1){
                log = false;//当异常时,为防止获取的数据遗漏,查询当天一天所有的数据
                getJiangSuBankAccountInfo(getDayInfo,x);
                log = true;
                System.out.println("手动触发获取银行账户信息数据,查询当天所有到账数据!");
                //当手动触发查询全天数据一次后需要关闭查询全天的条件,否则会按时时查询全天的数据;getDayInfo需要改为默认值false
                return true;
            }else{
                return false;
            }

        } catch (Exception e){//不确定异常触发获取当天所有数据
            e.printStackTrace();
         /*   logger.info(e.getMessage());
            try {
                Thread.sleep((Integer.parseInt(runTime)*50000));
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
            log = false;//当异常时,为防止获取的数据遗漏,查询当天一天所有的数据
            System.out.println("================================有异常未获取到数据,获取全天到账数据!==================================================");*/
            /*getJiangSuBankAccountInfo(getDayInfo,x);*/
        }finally {
            log = true;
        }
        return false;//表示未查询当天一天所有的到账数据;getDayInfo为默认值false
    }

    /**
     * 获取数据库银行到账表MortgageBankofjiangsucainfo操作字段ststus 为 0 未操作的数据,进行苏通卡或油卡充值,且订单号流水号purpose不为空或null的数据
     * @throws Exception
     */
    public synchronized void updateMortgageBankofjiangsucainfosByStstusAndRefilMoney() throws Exception {
        List<MortgageBankofjiangsucainfo> mortgageBankofjiangsucainfos = selectByStstus(MortgageBankofjiangsucainfoConstant.STSTUS_NO);
        if(mortgageBankofjiangsucainfos != null && mortgageBankofjiangsucainfos.size()>0){
            for (MortgageBankofjiangsucainfo mortgageBankofjiangsucainfo : mortgageBankofjiangsucainfos) {

                //【订单编号,用这个表MortgageBankofjiangsucainfo的这个purpose去loan_table中与bugGood_order_no字段匹配获取交易类型buyGoods_Id】
                if(mortgageBankofjiangsucainfo.getPurpose() == null || mortgageBankofjiangsucainfo.getPurpose().length() == 0 ){
                    continue;
                }
                LoanTable loanTable = loanQueryService.queryLoanTableByBugGood_order_no(mortgageBankofjiangsucainfo.getPurpose());
                //获取 申请类型 处理状态【油卡或苏东卡...】字典id buyGood_Status_Id
                if(loanTable == null){
                    continue;
                }
                int buyGood_status_id = loanTable.getBuyGood_Status_Id();//申请类型处理状态
                if(buyGood_status_id == OilConstant.DEAL_STATUS_OVER){ //字典中67 为已处理 com.tcwl.vsmp.common.OilConstant.DEAL_STATUS_OVER
                    continue;
                }

                //申请类型【油卡或通行卡】0:未知 1:油卡 2:通行卡
                Integer buyGoods_id = loanTable.getBuyGoods_Id();//获取申请类型

                //未知
                if(buyGoods_id == null || buyGoods_id == OilConstant.LOAN_TABLE_BUYGOODS_ID_UNKNOWN){//未知
                    System.out.println("========================818未知充值==========================未知充值======================未知充值====================");
                    continue;
                }

                //油卡充值
                if(buyGoods_id == OilConstant.LOAN_TABLE_BUYGOODS_ID_OIL_CARD){//1:油卡 card_apply
                    System.out.println("========================827油卡充值==========================油卡充值======================油卡充值====================");
                    //油卡充值
                    updateCardApplyRefill(mortgageBankofjiangsucainfo);
                }// end 1:油卡 card_apply

                //苏通卡充值
                if(buyGoods_id == OilConstant.LOAN_TABLE_BUYGOODS_ID_ACCESS_CARD){//2:通行卡
                    System.out.println("========================927通行卡充值==========================通行卡充值======================通行卡充值====================");
                    //苏通卡充值
                    if (updateStcardrechargerecordRefill(mortgageBankofjiangsucainfo)){
                        continue;
                    }
                }//end  2:通行卡

            }
        }
    }

 

    /**
     * 获取客户信息
     * @param cust
     * @param customer_code
     * @return
     * @throws Exception
     */
    public Customer getCustomerByCustomer_code(Customer cust, String customer_code) throws Exception {
        if(customer_code!= null && customer_code.length() > 0){
            List<Customer> custs =  sTCPassCardChargeRecordService.getCustomerByStcardrechargerecordWithCustomer_code(customer_code);
            if(custs != null && custs.size() >0 ){
                cust = custs.get(0);
            }
        }
        return cust;
    }

    /**
     * 把map 键值数据 转换成实体类封装
     * @param mapList
     * @param i
     */
    public synchronized MortgageBankofjiangsucainfo getMortgageBankofjiangsucainfo(List<Map<String, String>> mapList, int i)throws Exception {
        MortgageBankofjiangsucainfo mortgageBankofjiangsucainfo = new MortgageBankofjiangsucainfo();
        //平台流水号(C20)
        if(mapList.get(i).get("serial_no")!= null && mapList.get(i).get("serial_no").length() > 0){
            mortgageBankofjiangsucainfo.setSerial_no (mapList.get(i).get("serial_no") );
        }

        //账号(C35)
        if(mapList.get(i).get("acno")!= null && mapList.get(i).get("acno").length() > 0){
            mortgageBankofjiangsucainfo.setAcno( mapList.get(i).get("acno") );
        }
        //货币码(C2)
        if(mapList.get(i).get("cur_code")!= null && mapList.get(i).get("cur_code").length() > 0){
            mortgageBankofjiangsucainfo.setCur_code( mapList.get(i).get("cur_code") );
        }
        //交易日期(C8)
        if(mapList.get(i).get("tr_acdt")!= null && mapList.get(i).get("tr_acdt").length() > 0){
            mortgageBankofjiangsucainfo.setTr_acdt( mapList.get(i).get("tr_acdt") );
        }
        //交易时间交易日期(C6)
        if(mapList.get(i).get("tr_time")!= null && mapList.get(i).get("tr_time").length() > 0){
            mortgageBankofjiangsucainfo.setTr_time( mapList.get(i).get("tr_time") );
        }
        //主机流水号(C20)
        if(mapList.get(i).get("host_serial_no")!= null && mapList.get(i).get("host_serial_no").length() > 0){
            mortgageBankofjiangsucainfo.setHost_serial_no( mapList.get(i).get("host_serial_no") );
        }
        //交易行号(C12)
        if(mapList.get(i).get("tr_bankno")!= null && mapList.get(i).get("tr_bankno").length() > 0){
            mortgageBankofjiangsucainfo.setTr_bankno( mapList.get(i).get("tr_bankno") );
        }
        //户名(C70)
        if(mapList.get(i).get("acname")!= null && mapList.get(i).get("acname").length() > 0){
            mortgageBankofjiangsucainfo.setAcname( mapList.get(i).get("acname") );
        }
        //对方账号(C35)
        if(mapList.get(i).get("opp_acno")!= null && mapList.get(i).get("opp_acno").length() > 0){
            mortgageBankofjiangsucainfo.setOpp_acno( mapList.get(i).get("opp_acno") );
        }
        //对方货币码(C2)
        if(mapList.get(i).get("opp_cur_code")!= null && mapList.get(i).get("opp_cur_code").length() > 0){
            mortgageBankofjiangsucainfo.setOpp_cur_code( mapList.get(i).get("opp_cur_code") );
        }
        //对方账号户名(C70)
        if(mapList.get(i).get("opp_acname")!= null && mapList.get(i).get("opp_acname").length() > 0){
            mortgageBankofjiangsucainfo.setOpp_acname( mapList.get(i).get("opp_acname") );
        }
        //对方账号开户行(C60)
        if(mapList.get(i).get("opp_bankname")!= null && mapList.get(i).get("opp_bankname").length() > 0){
            mortgageBankofjiangsucainfo.setOpp_bankname( mapList.get(i).get("opp_bankname") );
        }
        //对方行号(C12)
        if(mapList.get(i).get("opp_bankno")!= null && mapList.get(i).get("opp_bankno").length() > 0) {
            mortgageBankofjiangsucainfo.setOpp_bankno(mapList.get(i).get("opp_bankno"));
        }
        //交易类别(C1)
        if(mapList.get(i).get("tr_type")!= null && mapList.get(i).get("tr_type").length() > 0){
            mortgageBankofjiangsucainfo.setTr_type( mapList.get(i).get("tr_type") );
        }
        //钞汇标志(C1)
        if(mapList.get(i).get("csh_dra_flag")!= null && mapList.get(i).get("csh_dra_flag").length() > 0){
            mortgageBankofjiangsucainfo.setCsh_dra_flag( mapList.get(i).get("csh_dra_flag") );
        }
        //他行标志(C1)
        if(mapList.get(i).get("bank_flag")!= null && mapList.get(i).get("bank_flag").length() > 0){
            mortgageBankofjiangsucainfo.setBank_flag( mapList.get(i).get("bank_flag") );
        }
        //同城异地标志(C1)
        if(mapList.get(i).get("area_fla")!= null && mapList.get(i).get("area_fla").length() > 0){
            mortgageBankofjiangsucainfo.setArea_flag( mapList.get(i).get("area_fla") );
        }
        //交易来源(C1)
        if(mapList.get(i).get("tr_from")!= null && mapList.get(i).get("tr_from").length() > 0){
            mortgageBankofjiangsucainfo.setTr_from( mapList.get(i).get("tr_from") );
        }
        //发生额标志(C1)
        if(mapList.get(i).get("trans_flag")!= null && mapList.get(i).get("trans_flag").length() > 0){
            mortgageBankofjiangsucainfo.setTrans_flag( mapList.get(i).get("trans_flag") );
        }
        //被冲销流水号(C12)
        if(mapList.get(i).get("old_serial_no")!= null && mapList.get(i).get("old_serial_no").length() > 0){
            mortgageBankofjiangsucainfo.setOld_serial_no( mapList.get(i).get("old_serial_no") );
        }
        //原交易日期(C8)
        if(mapList.get(i).get("old_acdt")!= null && mapList.get(i).get("old_acdt").length() > 0){
            mortgageBankofjiangsucainfo.setOld_acdt( mapList.get(i).get("old_acdt") );
        }
        //现转标志(C1)
        if(mapList.get(i).get("cash_flag")!= null && mapList.get(i).get("cash_flag").length() > 0){
            mortgageBankofjiangsucainfo.setCash_flag( mapList.get(i).get("cash_flag") );
        }
        //借贷标志(C1)
        if(mapList.get(i).get(" crdr_flag")!= null && mapList.get(i).get("crdr_flag").length() > 0){
            mortgageBankofjiangsucainfo.setCrdr_flag( mapList.get(i).get("crdr_flag") );
        }
        //余额(N16.2)
        if(mapList.get(i).get(" balance")!= null && mapList.get(i).get("balance").length() > 0){
            mortgageBankofjiangsucainfo.setBalance( new BigDecimal(mapList.get(i).get("balance")) );
        }
        //冻结金额(N16.2)
        if(mapList.get(i).get("freeze_amt")!= null && mapList.get(i).get("freeze_amt").length() > 0){
            mortgageBankofjiangsucainfo.setFreeze_amt(new BigDecimal(mapList.get(i).get("freeze_amt"))  );
        }
        //凭证种类(C20)
        if(mapList.get(i).get("cert_type")!= null && mapList.get(i).get("cert_type").length() > 0){
            mortgageBankofjiangsucainfo.setCert_type( mapList.get(i).get("cert_type") );
        }
        //凭证批次号(C20)
        if(mapList.get(i).get("cert_batchno")!= null && mapList.get(i).get("cert_batchno").length() > 0){
            mortgageBankofjiangsucainfo.setCert_batchno( mapList.get(i).get("cert_batchno") );
        }
        //凭证号码(C20)
        if(mapList.get(i).get("cert_no")!= null && mapList.get(i).get("cert_no").length() > 0){
            mortgageBankofjiangsucainfo.setCert_no( mapList.get(i).get("cert_no") );
        }
        //交易码(C6)
        if(mapList.get(i).get("tr_code")!= null && mapList.get(i).get("tr_code").length() > 0){
            mortgageBankofjiangsucainfo.setTr_code( mapList.get(i).get("tr_code") );

        }
        //柜员号(C10)
        if(mapList.get(i).get("user_no")!= null && mapList.get(i).get("user_no").length() > 0){
            mortgageBankofjiangsucainfo.setUser_no( mapList.get(i).get("user_no") );

        }
        //传票号(C20)
        if(mapList.get(i).get("sub_no")!= null && mapList.get(i).get("sub_no").length() > 0){
            mortgageBankofjiangsucainfo.setSub_no( mapList.get(i).get("sub_no") );

        }
        //摘要(C30)
        if(mapList.get(i).get("purpose")!= null && mapList.get(i).get("purpose").length() > 0){
            mortgageBankofjiangsucainfo.setPurpose( mapList.get(i).get("purpose") );

        }
        //附言(C60)
        if(mapList.get(i).get("postscript")!= null && mapList.get(i).get("postscript").length() > 0){
            mortgageBankofjiangsucainfo.setPostscript( mapList.get(i).get("postscript") );
        }
        //交易时间戳
        if(mapList.get(i).get("tr_timestamp")!= null && mapList.get(i).get("tr_timestamp").length() > 0){
            mortgageBankofjiangsucainfo.setTr_timestamp( mapList.get(i).get("tr_timestamp") );
        }
        //备注字段一(C60)
        if(mapList.get(i).get("reserved1")!= null && mapList.get(i).get("reserved1").length() > 0){
            mortgageBankofjiangsucainfo.setReserved1( mapList.get(i).get("reserved1") );
        }
        //备注字段二(C60)
        if(mapList.get(i).get("reserved2")!= null && mapList.get(i).get("reserved2").length() > 0){
            mortgageBankofjiangsucainfo.setReserved2( mapList.get(i).get("reserved2") );
        }
        //交易行名(C70)
        if(mapList.get(i).get("tr_bankname")!= null && mapList.get(i).get("tr_bankname").length() > 0){
            mortgageBankofjiangsucainfo.setTr_bankname( mapList.get(i).get("tr_bankname") );
        }
        //支付系统联行行号(C20)
        if(mapList.get(i).get("bank_no")!= null && mapList.get(i).get("bank_no").length() > 0){
            mortgageBankofjiangsucainfo.setBank_no( mapList.get(i).get("bank_no") );
        }
        //支付系统联行行名(C70)
        if(mapList.get(i).get("bankname")!= null && mapList.get(i).get("bankname").length() > 0){
            mortgageBankofjiangsucainfo.setBankname( mapList.get(i).get("bankname") );
        }
        //回单打印次数(C8)
        if(mapList.get(i).get("printcount")!= null && mapList.get(i).get("printcount").length() > 0){
            mortgageBankofjiangsucainfo.setPrintcount(  mapList.get(i).get("printcount") );
        }
        //借出金额(N16,2)
        if(mapList.get(i).get("payamt")!= null && mapList.get(i).get("payamt").length() > 0){
            mortgageBankofjiangsucainfo.setPayamt( new BigDecimal( mapList.get(i).get("payamt")) );
        }
        //借入金额(N16,2)
        if(mapList.get(i).get("rcvamt")!= null && mapList.get(i).get("rcvamt").length() > 0){
            mortgageBankofjiangsucainfo.setRcvamt( new BigDecimal( mapList.get(i).get("rcvamt")));
        }
        //交易金额(N16.2)
        if(mapList.get(i).get("amt")!= null && mapList.get(i).get("amt").length() > 0){
            mortgageBankofjiangsucainfo.setAmt( new BigDecimal( mapList.get(i).get("amt")));
        }
        //手续费(N16.2)
        if(mapList.get(i).get("fee_amt")!= null && mapList.get(i).get("fee_amt").length() > 0){
            mortgageBankofjiangsucainfo.setFee_amt( new BigDecimal( mapList.get(i).get("fee_amt")) );
        }
        //上笔余额(N16.2)
        if(mapList.get(i).get("last_bal")!= null && mapList.get(i).get("last_bal").length() > 0) {
            mortgageBankofjiangsucainfo.setLast_bal(new BigDecimal(mapList.get(i).get("last_bal")));
        }
        return mortgageBankofjiangsucainfo;
    }


    /**
     * 1.设置发送的报文
     * @return
     */
    public synchronized StringBuilder getStringBuilderWithSetXML()throws Exception {
        StringBuilder sb = new StringBuilder();
        sb.append("00<ap>");
        sb.append("<head>");
        sb.append("<tr_code>" + tr_code + "</tr_code>"); //tr_code	交易码	C6	M
        sb.append("<cms_corp_no>" + cms_corp_no + "</cms_corp_no>");//cms_corp_no	现金管理客户号	C20	M  企业不需要赋值,由银企前置机进行赋值。
        sb.append("<user_no>" + user_no + "</user_no>");//user_no	用户号	C10	M	企业不需要赋值,由银企前置机进行赋值。
        sb.append("<org_code>" + org_code + "</org_code>");//org_code	机构号	C20	M	企业不需要赋值,由银企前置机进行赋值。
        sb.append("<serial_no>" + serial_no + "</serial_no>");//serial_no	交易流水号	C20	C	送空,由现金管理系统产生
        sb.append("<req_no>" + req_no + "</req_no>");//req_no	请求号	C40	C	企业ERP的流水号
        sb.append("<tr_acdt>" + tr_acdt + "</tr_acdt>"); //tr_acdt	交易日期	C8	M	格式  YYYYMMDD
        sb.append("<tr_time>" + tr_time + "</tr_time >"); //tr_time	交易时间	C6	M	格式hhmmss
        sb.append("<channel>" + channel + "</channel>"); //channel	渠道标识	C1	M	ERP送‘5’
        sb.append("<sign>" + sign + "</sign>"); //sign	签名标识	C1	M  0-报文未签名   1-报文已签名  企业送空,由银企前置进行传送.
        sb.append("<file_flag>" + file_flag + "</file_flag>"); //file_flag	文件标识	C1	M	0-报文1-文件
        sb.append("<reserved>" + reserved + "</reserved>");//reserved	保留字段	C60	C
        sb.append("</head>");
        sb.append("<body>");
        sb.append("<acno>" + acno + "</acno>"); //acno	账号	C35	M
        sb.append("<cur_code>" + cur_code + "</cur_code>"); //cur_code	币种	C2	M
        sb.append("<start_date>" + start_date + "</start_date>");//start_date	起始日期	C8	M	日期格式:YYYYMMDD  ;日期时间段不能超过3个月的时间
        sb.append("<end_date>" + end_date + "</end_date>");//end_date	终止日期	C8	M	日期格式:YYYYMMDD
        sb.append("</body>");
        sb.append("</ap>");
        return sb;
    }

    /**
     * 5.将返回得到的数据解析到map
     * 将得到的银行到账数据{List<List<String> 索引为0 的是key,0以后的为值}解析出来按 键值得方式储存;
     * @param lineT1List
     * @return
     */
    public synchronized  List<Map<String, String>>   getMapList( List<List<String>> lineT1List)throws Exception{
        List<Map<String, String>> mapList = new ArrayList<>();
        System.out.println("lineT1List.size() : "+lineT1List.size());
        if (lineT1List != null && lineT1List.size() > 0) {
            for (int i = 0; i < lineT1List.size(); i++) {
                if (i == (lineT1List.size() - 1)) {
                    break;
                }

                Map<String, String> map = new HashMap<>();
                if (lineT1List.get(i) != null && lineT1List.get(i).size() > 0) {
                    for (int y = 0; y < lineT1List.get(i).size(); y++) {
                        map.put(lineT1List.get(0).get(y), lineT1List.get(i + 1).get(y));
                    }
                    if(map != null){
                        mapList.add(map);
                    }
                }

            }

        }
        System.out.println("mapList--------------" + mapList);
        System.out.println("765mapList.size()--------------" + mapList.size());
        return mapList;
    }






}

具体看:这个方法 getJiangSuBankAccountInfo ;这个方法是获取银行到账数据的主要入口;

4.创建定时器运行类

quartz.jiangSuBank.JiangSuBank

package quartz.jiangSuBank;

import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;
import com.tcwl.vsmp.common.ExceptionInfo;
import com.tcwl.vsmp.common.OilConstant;
import com.tcwl.vsmp.customer.po.Customer;
import com.tcwl.vsmp.external.service.HzCapitalService;
import com.tcwl.vsmp.loanmgt.po.LoanTable;
import com.tcwl.vsmp.loanmgt.service.LoanQueryService;
import com.tcwl.vsmp.mortgage.common.MortgageBankofjiangsucainfoConstant;
import com.tcwl.vsmp.mortgage.po.MortgageBankofjiangsucainfo;
import com.tcwl.vsmp.mortgage.service.MortgageBankofjiangsucainfoService;
import com.tcwl.vsmp.mortgage.service.impl.MortgageBankofjiangsucainfoServiceImpl;
import com.tcwl.vsmp.mortgage.utils.EncodeQueryAndTransition;
import com.tcwl.vsmp.oil.dao.CardApplyDao;
import com.tcwl.vsmp.oil.po.CardApply;
import com.tcwl.vsmp.oil.po.Card_info;
import com.tcwl.vsmp.oil.service.Card_infoService;
import com.tcwl.vsmp.oil.service.OilCardOperationService;
import com.tcwl.vsmp.passcard.common.PassCardConstant;
import com.tcwl.vsmp.passcard.po.stk.ChargeInfo;
import com.tcwl.vsmp.passcard.po.stk.ChargeReq;
import com.tcwl.vsmp.passcard.service.STCPassCardChargeRecordService;
import com.tcwl.vsmp.passcard.util.STCRechargeUtil;
import com.tcwl.vsmp.utils.BatchNumber;
import com.tcwl.vsmp.utils.DateUtil;
import com.tcwl.vsmp.utils.JsonAndBaseUtils;
import com.tcwl.vsmp.utils.RandNumUtils;
import com.tcwl.vsmp.weizhang.util.HttpClientUtil;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.shiro.SecurityUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.DuplicateKeyException;

import java.io.BufferedReader;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 江苏银行定时任务
 */
@Configurable
/*@Component*/
public class JiangSuBank {

    private static final Logger logger =   LoggerFactory.getLogger(JiangSuBank.class);
    @Autowired
    private MortgageBankofjiangsucainfoService mortgageBankofjiangsucainfoService;
    @Autowired
    private STCPassCardChargeRecordService sTCPassCardChargeRecordService;//通行卡表

    @Autowired
    private HzCapitalService hzCapitalService;
    @Autowired
    private LoanQueryService loanQueryService;//借款查询表
    @Autowired
    private Card_infoService card_infoService;//油卡详细
    @Autowired
    private OilCardOperationService oilCardOperationService;//油卡充值接口

    /**
     * 车应用Dao.
     * 油卡业务
     */
    @Autowired
    private CardApplyDao cardApplyDao;

    //当getDayInfo为true s时查询当天所有数据
    private Boolean getDayInfo = false;

    //控制手动执行获取当天全天银行数据的次数为1次,避免死循环
    private  int x = 0;

    /**
     * 时时获取江苏银行到账信息,把获取到的数据存入数据库中;
     */
    public synchronized void runTimeGetJiangSuBankAccountInfo() {

        try {
            //获取江苏银行到账信息,把获取到的数据存入数据库中;当getDayInfo为true s时查询当天所有数据
            Boolean aBoolean = mortgageBankofjiangsucainfoService.getJiangSuBankAccountInfo(getDayInfo,x);
            if(aBoolean){//aBoolean 为true 时当前获取了整天的数据,获取一次后需要关闭,恢复成原来按时间段获取数据[成员变量 X 与成员变量getDayInfo 值还得设回默认]
                x = 0;
                getDayInfo = false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 时时获取数据库银行到账表MortgageBankofjiangsucainfo操作字段ststus 为 0 未操作的数据,进行苏通卡或油卡充值
     */
    public synchronized void runTimeJiangSuBankAccountRefillMoney() {

        try {
            mortgageBankofjiangsucainfoService.updateMortgageBankofjiangsucainfosByStstusAndRefilMoney();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 未防止获取的数据丢失,每天晚上 11点 50分 触发一次获取当天所有银行到账数据;
     * @return
     */
    public synchronized void getAll_a_Day_JiangSuBankAccountRefillMoney(){
        getDayInfo = true;
    }
}

配置 spring定时器 spring-quartz.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans.xsd">


    <!-- 调度器 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
             
                <!-- start 江苏银行到账信息查询,并存入数据库 苏凯 2018-11-02-->
                <ref bean="jiangSuBankTrigger_1" />
                <!-- start 从数据库中取出银行到账信息,并为客户充值 苏凯 2018-11-02-->
                <ref bean="jiangSuBankTrigger_2" />
                <!-- start 未防止获取的数据丢失,每天晚上 定时 触发一次获取当天所有银行到账数据; 苏凯 2018-11-02-->
                <ref bean="jiangSuBankTrigger_3" />
            </list>
        </property>
    </bean>



<!--========================================http://cron.qqe2.com/===============http://www.shnydb.com/=========================================================-->

    <!-- start 定时任务配置 江苏银行  苏凯2018-10-29 -->
    <bean name="jiangSuBank" class="quartz.jiangSuBank.JiangSuBank"/>
    <!-- start 江苏银行到账信息查询,并存入数据库 苏凯 -->
    <bean id="jiangSuBank_1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="jiangSuBank" />
        </property>
        <property name="targetMethod">
            <value>runTimeGetJiangSuBankAccountInfo</value>
        </property>
    </bean>
    <bean id="jiangSuBankTrigger_1" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="jiangSuBank_1" />
        </property>
        <!-- 定N时间执行一次 -->
        <property name="cronExpression">
            <value>#{prop.JIANGSUBANK_GETACCOUNTINFO_TIME}</value>
            <!--<value>0/10 * * * * ?</value>-->
        </property>
    </bean>
    <!-- end 定时任务配置 江苏银行 -->

    <!-- start 从数据库中取出银行到账信息,并为客户充值 苏凯 -->
    <bean id="jiangSuBank_2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="jiangSuBank" />
        </property>
        <property name="targetMethod">
            <value>runTimeJiangSuBankAccountRefillMoney</value>
        </property>
    </bean>
    <bean id="jiangSuBankTrigger_2" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="jiangSuBank_2" />
        </property>
        <!-- 定N时间执行一次 -->
        <property name="cronExpression">
            <value>#{prop.JIANGSUBANK_GETACCOUNTINFO_TIME}</value>
            <!--<value>0/10 * * * * ?</value>-->
        </property>
    </bean>
    <!-- end 定时任务配置 江苏银行 -->
    <!-- start 未防止获取的数据丢失,每天晚上 定时 触发一次获取当天所有银行到账数据; 苏凯 -->
    <bean id="jiangSuBank_3" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="jiangSuBank" />
        </property>
        <property name="targetMethod">
            <value>getAll_a_Day_JiangSuBankAccountRefillMoney</value>
        </property>
    </bean>
    <bean id="jiangSuBankTrigger_3" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="jiangSuBank_3" />
        </property>
        <!-- 定N时间执行一次 -->
        <property name="cronExpression">
            <value>#{prop.All_A_DAY_JIANGSUBANK_GETACCOUNTINFO_TIME}</value>
            <!--<value>0/10 * * * * ?</value>-->
        </property>
    </bean>
    <!-- end 定时任务配置 江苏银行 -->
<!--================================================================================================================-->


   







</beans>

猜你喜欢

转载自blog.csdn.net/qq_15204179/article/details/83783499