123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569 |
- package fi.cas.opplugin;
- import kd.bos.dataentity.entity.DynamicObject;
- import kd.bos.dataentity.entity.DynamicObjectCollection;
- import kd.bos.entity.EntityMetadataCache;
- import kd.bos.logging.Log;
- import kd.bos.logging.LogFactory;
- import kd.bos.orm.query.QFilter;
- import kd.bos.servicehelper.BusinessDataServiceHelper;
- import java.io.*;
- import java.math.RoundingMode;
- import java.net.Socket;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- import kd.bos.servicehelper.operation.OperationServiceHelper;
- import kd.bos.servicehelper.operation.SaveServiceHelper;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.json.JSONObject;
- import org.json.XML;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.transform.OutputKeys;
- import javax.xml.transform.Transformer;
- import javax.xml.transform.TransformerFactory;
- import javax.xml.transform.dom.DOMSource;
- import javax.xml.transform.stream.StreamResult;
- public class PayBillToolUtil {
- public static final String ENTITY_NAME = "cas_paybill";
- public static final String AGENT_ENTITY_NAME = "cas_agentpaybill";
- protected static final Log log = LogFactory.getLog(PayBillToolUtil.class);
- public static final String CHANNELCODE_PILIANG="JF";
- public static String queryPaymentRequest(DynamicObject payBillEntity) {
- try {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- Document doc = dBuilder.newDocument();
- Element rootElement = doc.createElement("Message");
- doc.appendChild(rootElement);
- Element body = doc.createElement("Body");
- rootElement.appendChild(body);
- createElement(doc, body, "transcode", "BTSQO001");
- createElement(doc, body, "ochannelcode", "JF");//发起渠道
- createElement(doc, body, "ochanneldate", payBillEntity.getString("nckd_fqqdrq"));//发起渠道日期
- String channelserno = payBillEntity.get("billno")+"-"+payBillEntity.getInt("nckd_bbh");
- createElement(doc, body, "ochannelserno", channelserno);//发起渠道流水
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- // 指定编码格式为GBK
- transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- DOMSource source = new DOMSource(doc);
- StringWriter writer = new StringWriter();
- StreamResult result = new StreamResult(writer);
- transformer.transform(source, result);
- return writer.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 代发单执行失败,关闭支付
- * @param agentpayBillEntity
- * @return
- */
- public static String createSingleAgentPaymentRequest_4(DynamicObject agentpayBillEntity) {
- try {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- Document doc = dBuilder.newDocument();
- Element rootElement = doc.createElement("Message");
- doc.appendChild(rootElement);
- agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDATF");
- Element body = doc.createElement("BodyInfo");
- rootElement.appendChild(body);
- agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- // 指定编码格式为GBK
- transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- DOMSource source = new DOMSource(doc);
- StringWriter writer = new StringWriter();
- StreamResult result = new StreamResult(writer);
- transformer.transform(source, result);
- return writer.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 代发单执行成功,关闭支付
- * @param agentpayBillEntity
- * @return
- */
- public static String createSingleAgentPaymentRequest_3(DynamicObject agentpayBillEntity) {
- try {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- Document doc = dBuilder.newDocument();
- Element rootElement = doc.createElement("Message");
- doc.appendChild(rootElement);
- agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDATE");
- Element body = doc.createElement("BodyInfo");
- rootElement.appendChild(body);
- agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- // 指定编码格式为GBK
- transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- DOMSource source = new DOMSource(doc);
- StringWriter writer = new StringWriter();
- StreamResult result = new StreamResult(writer);
- transformer.transform(source, result);
- return writer.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 代发单表头支付信息查询
- * @param agentpayBillEntity
- * @return
- */
- public static String createSingleAgentPaymentRequest_5(DynamicObject agentpayBillEntity) {
- try {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- Document doc = dBuilder.newDocument();
- Element rootElement = doc.createElement("Message");
- doc.appendChild(rootElement);
- agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRMSGQ");
- Element body = doc.createElement("BodyInfo");
- rootElement.appendChild(body);
- agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- // 指定编码格式为GBK
- transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- DOMSource source = new DOMSource(doc);
- StringWriter writer = new StringWriter();
- StreamResult result = new StreamResult(writer);
- transformer.transform(source, result);
- return writer.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 代发单明细支付信息查询
- * @param agentpayBillEntity
- * @return
- */
- public static String createSingleAgentPaymentRequest_6(DynamicObject agentpayBillEntity,String filename) {
- try {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- Document doc = dBuilder.newDocument();
- Element rootElement = doc.createElement("Message");
- doc.appendChild(rootElement);
- agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDTLQ");
- Element body = doc.createElement("BodyInfo");
- rootElement.appendChild(body);
- agentPaymentXMLBody_EntryQuery(agentpayBillEntity,filename,doc,body);
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- // 指定编码格式为GBK
- transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- DOMSource source = new DOMSource(doc);
- StringWriter writer = new StringWriter();
- StreamResult result = new StreamResult(writer);
- transformer.transform(source, result);
- return writer.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 代发单重发
- * @param agentpayBillEntity
- * @return
- */
- public static String createSingleAgentPaymentRequest_7(DynamicObject agentpayBillEntity) {
- try {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- Document doc = dBuilder.newDocument();
- Element rootElement = doc.createElement("Message");
- doc.appendChild(rootElement);
- agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDATR");
- Element body = doc.createElement("BodyInfo");
- rootElement.appendChild(body);
- agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
- agentPaymentXMLBody_Entry(agentpayBillEntity,doc,body);
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- // 指定编码格式为GBK
- transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- DOMSource source = new DOMSource(doc);
- StringWriter writer = new StringWriter();
- StreamResult result = new StreamResult(writer);
- transformer.transform(source, result);
- return writer.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 代发单发起支付
- * @param agentpayBillEntity
- * @return
- */
- public static String createSingleAgentPaymentRequest_2(DynamicObject agentpayBillEntity) {
- try {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- Document doc = dBuilder.newDocument();
- Element rootElement = doc.createElement("Message");
- doc.appendChild(rootElement);
- agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDATD");
- Element body = doc.createElement("BodyInfo");
- rootElement.appendChild(body);
- agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- // 指定编码格式为GBK
- transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- DOMSource source = new DOMSource(doc);
- StringWriter writer = new StringWriter();
- StreamResult result = new StreamResult(writer);
- transformer.transform(source, result);
- return writer.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- /**
- * 代发单付款请求拼接
- * @param agentpayBillEntity
- * @return
- */
- public static String createSingleAgentPaymentRequest_1(DynamicObject agentpayBillEntity) {
- try {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- Document doc = dBuilder.newDocument();
- Element rootElement = doc.createElement("Message");
- doc.appendChild(rootElement);
- agentPaymentXMLHead(agentpayBillEntity,doc,rootElement,"ACHRDATI");
- Element body = doc.createElement("BodyInfo");
- rootElement.appendChild(body);
- agentPaymentXMLBody_Msg(agentpayBillEntity,doc,body);
- agentPaymentXMLBody_Entry(agentpayBillEntity,doc,body);
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- // 指定编码格式为GBK
- transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- DOMSource source = new DOMSource(doc);
- StringWriter writer = new StringWriter();
- StreamResult result = new StreamResult(writer);
- transformer.transform(source, result);
- return writer.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- public static void agentPaymentXMLHead(DynamicObject agentpayBillEntity,Document doc,Element rootElement,String transcode) {
- Element head = doc.createElement("HeadInfo");
- rootElement.appendChild(head);
- createElement(doc, head, "transcode", transcode);
- createElement(doc, head, "channelcode", CHANNELCODE_PILIANG);//发起渠道
- Calendar currentdate = Calendar.getInstance();
- String datacur = TypeUtils.date2String(currentdate.getTime(),"yyyyMMdd");
- String datacur_Hms = TypeUtils.date2String(currentdate.getTime(),"HHmmss");
- createElement(doc, head, "channeldate", datacur);//发起渠道日期
- String channelserno = datacur+"-"+datacur_Hms+agentpayBillEntity.getString("billNo");
- createElement(doc, head, "channelserno", channelserno.substring(0,20));//发起渠道流水
- createElement(doc, head, "channeltime", datacur_Hms);
- createElement(doc, head, "brno", "");//交易发起机构,可为空,默认100800
- createElement(doc, head, "tellerno", "");
- createElement(doc, head, "terminalno", "");
- createElement(doc, head, "reserve", "");
- }
- public static void agentPaymentXMLBody_Msg(DynamicObject agentpayBillEntity,Document doc,Element body) {
- DynamicObject payeracctbankEntity = BusinessDataServiceHelper.loadSingleFromCache(agentpayBillEntity.getDynamicObject("payeracctbank").getPkValue(), "am_accountbank");
- String payeracc = payeracctbankEntity.getString("bankaccountnumber");
- String payername = payeracctbankEntity.getString("acctname");
- String jgh = payeracctbankEntity.getString("nckd_jgh");
- if("".equals(jgh)){
- jgh = "791100";
- }
- String filename=agentpayBillEntity.getString("nckd_filename");
- if("".equals(filename)){
- filename = agentpayBillEntity.getString("billNo");
- }
- filename=jgh+filename;//机构号
- createElement(doc, body, "FileName",filename );//文件名称
- createElement(doc, body, "FileType","01" );//文件类型
- //付款账号
- createElement(doc, body, "OutRichNbr", payeracc);//出款户口号
- createElement(doc, body, "HrSignNbr", agentpayBillEntity.getString("billno"));//人力流水号
- createElement(doc, body, "CcyNbr", "156");//币种,写死人名币
- createElement(doc, body, "CcyType", "0");//币种,写死人名币
- createElement(doc, body, "TotalNum", agentpayBillEntity.getString("count"));//汇总笔数
- createElement(doc, body, "TotalAmt", agentpayBillEntity.getBigDecimal("payamount").setScale(2, RoundingMode.DOWN).toString());//汇总金额
- createElement(doc, body, "FeeFlag", "0");//收费标志
- createElement(doc, body, "RichNbr", payeracc);
- createElement(doc, body, "FundType", "7");
- createElement(doc, body, "RichName", payername);
- createElement(doc, body, "QryBrnNbr", jgh);
- }
- public static void agentPaymentXMLBody_Entry(DynamicObject agentpayBillEntity,Document doc,Element body) {
- // 获取分录数据
- DynamicObjectCollection entryList = agentpayBillEntity.getDynamicObjectCollection("entry");
- for (int i = 0; i <entryList.size() ; i++) {
- DynamicObject entry = entryList.get(i);
- Element achrapaydtl_i = doc.createElement("achrpaydtl_i"); // 每条数据用一个achrapaydtl_i元素包裹
- body.appendChild(achrapaydtl_i);
- createElement(doc, achrapaydtl_i, "IdenNbr", entry.getString("nckd_zjh"));//证件号
- createElement(doc, achrapaydtl_i, "InRichNbr", entry.getString("payeeacctbank"));//收款户口号
- createElement(doc, achrapaydtl_i, "PayAmt", entry.getBigDecimal("entryunmatchamount").setScale(2, RoundingMode.DOWN).toString());//支付金额
- createElement(doc, achrapaydtl_i, "CurContentSeq", i+1+"");//展示条数
- createElement(doc, achrapaydtl_i, "RowCnt", "10000");//展示条数
- }
- }
- public static void agentPaymentXMLBody_EntryQuery(DynamicObject agentpayBillEntity,String filename,Document doc,Element body) {
- createElement(doc, body, "IdenNbr", "");//证件号
- createElement(doc, body, "InRichNbr","");//收款户口号
- createElement(doc, body, "PayAmt", "");//支付金额
- createElement(doc, body, "QryFileName",filename );//文件名称
- createElement(doc, body, "RowCnt", "10000");//展示条数
- }
- public static String createSinglePaymentRequest(DynamicObject payBillEntity) {
- try {
- DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
- Document doc = dBuilder.newDocument();
- Element rootElement = doc.createElement("Message");
- doc.appendChild(rootElement);
- Element body = doc.createElement("Body");
- rootElement.appendChild(body);
- createElement(doc, body, "transcode", "BTSCO001");
- createElement(doc, body, "trxcode", "JF01");//渠道交易代码
- createElement(doc, body, "channelcode", "JF");//发起渠道
- Calendar currentdate = Calendar.getInstance();
- createElement(doc, body, "channeldate", TypeUtils.date2String(currentdate.getTime(),"yyyyMMdd"));//发起渠道日期
- payBillEntity.set("nckd_fqqdrq",TypeUtils.date2String(currentdate.getTime(),"yyyyMMdd"));
- String channelserno = payBillEntity.get("billno")+"-"+payBillEntity.getInt("nckd_bbh");
- createElement(doc, body, "channelserno", channelserno);//发起渠道流水
- createElement(doc, body, "channeltime", currentdate.get(Calendar.HOUR)+""+currentdate.get(Calendar.MINUTE)+""+currentdate.get(Calendar.SECOND));
- createElement(doc, body, "brno", "");//交易发起机构,可为空,默认100800
- createElement(doc, body, "bustype", "");//业务类型,可为空,默认为0-汇兑
- createElement(doc, body, "buskind", "");//业务种类,可为空,默认为0-普通汇兑
- createElement(doc, body, "payeracctype", "1");//付款账户类型 0-对公账户 1-个人账户.待补充
- //付款账号
- DynamicObject payeracctbankEntity = BusinessDataServiceHelper.loadSingle(payBillEntity.getDynamicObject("payeracctbank").getPkValue(), "am_accountbank");
- String payeracc = payeracctbankEntity.getString("bankaccountnumber");
- String payername = payeracctbankEntity.getString("acctname");
- createElement(doc, body, "payeracc", payeracc);//付款账户
- createElement(doc, body, "payername", payername);//付款人名称
- createElement(doc, body, "realpayeracc", payeracc);//实际付款人账户
- createElement(doc, body, "realpayername", payername);//实际付款人名称
- createElement(doc, body, "payeeacc", payBillEntity.getString("payeebanknum"));//收款账号
- createElement(doc, body, "payeename", payBillEntity.getString("payeename"));//收款人名称
- createElement(doc, body, "amount", payBillEntity.getBigDecimal("actpayamt").setScale(2, RoundingMode.DOWN).toString());//金额
- createElement(doc, body, "feeflag", "0");//收费标志0-暂不收费 1-计费 2-按月计费
- createElement(doc, body, "postscript", "测试江西银行经费共享系统付款");
- DynamicObject skyhinfo = BusinessDataServiceHelper.loadSingle(payBillEntity.getDynamicObject("payeebank").getPkValue(), "bd_bebank");
- createElement(doc, body, "recvbank", skyhinfo.getString("union_number"));// 如果是跨行业务,需填写接收行号
- createElement(doc, body, "paysysid", "0");// 如果是跨行业务,需填写汇路
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- // 指定编码格式为GBK
- transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- DOMSource source = new DOMSource(doc);
- StringWriter writer = new StringWriter();
- StreamResult result = new StreamResult(writer);
- transformer.transform(source, result);
- return writer.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- private static void createElement(Document doc, Element parent, String name, String value) {
- Element element = doc.createElement(name);
- element.appendChild(doc.createTextNode(value));
- parent.appendChild(element);
- }
- /**
- * 代发单重新支付-第四步
- * @params billEntities
- * @returns 返回报错信息
- *
- */
- public static String repaytozfqz(DynamicObject[] billEntities) {
- StringBuffer errMsg = new StringBuffer();
- //获取接口链接等信息
- DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")});
- String servername = jkpzxx.getString("nckd_servername");
- String port = jkpzxx.getString("nckd_port");
- for (DynamicObject dataEntity : billEntities) {
- boolean isSuccess = false;//第四步是否成功标识
- boolean isZFQZ = true;
- Map<String, String> qzObject = new HashMap<>();
- DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), AGENT_ENTITY_NAME);
- /**
- * 判断是否可以走前置支付
- * 1、代发单为审核状态
- * 2、支付状态为支付中
- * 3、核心状态为支付处理部分成功
- */
- String billNum = payBillEntity.getString("billno");
- String billstatusString = payBillEntity.getString("billstatus");
- String paystatus = payBillEntity.getString("nckd_paystatus");
- String nckd_hxzt = payBillEntity.getString("nckd_hxzt");
- if (!"C".equals(billstatusString)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能重发~\r\n");
- isZFQZ = false;
- }
- if (!"B".equals(paystatus) && !"".equals(paystatus)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为支付中,才能重发~\r\n");
- isZFQZ = false;
- }
- if (!"B".equals(nckd_hxzt) && !"".equals(nckd_hxzt)) {
- errMsg.append("单据号:").append(billNum).append(",核心状态为支付处理部分成功,才能重发~\r\n");
- isZFQZ = false;
- }
- if(payBillEntity.getDynamicObject("payeracctbank")==null) {
- errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
- isZFQZ = false;
- }
- String[] returnmsg_2 = agentpayBillFukuan_chongfa(servername,port,payBillEntity);
- errMsg.append(returnmsg_2[1]);
- if("2".equals(returnmsg_2[0])){//第四步成功
- isSuccess=true;
- payBillEntity.set("nckd_hxzt","R");//改核心状态为已登记等待执行结果
- }
- if (isSuccess) {
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }
- return errMsg.toString();
- }
- /**
- * 代发单支付-补传第二步
- * @params billEntities
- * @returns 返回报错信息
- *
- */
- public static String agentpayzx(DynamicObject[] billEntities) {
- StringBuffer errMsg = new StringBuffer();
- //获取接口链接等信息
- DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")});
- String servername = jkpzxx.getString("nckd_servername");
- String port = jkpzxx.getString("nckd_port");
- for (DynamicObject dataEntity : billEntities) {
- boolean isSuccess = false;//第二步是否成功标识
- boolean isZFQZ = true;
- Map<String, String> qzObject = new HashMap<>();
- DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), AGENT_ENTITY_NAME);
- /**
- * 判断是否可以走前置支付
- * 1、代发单为审核状态
- * 2、支付状态为支付中
- * 3、核心状态为已登记执行失败
- */
- String billNum = payBillEntity.getString("billno");
- String billstatusString = payBillEntity.getString("billstatus");
- String paystatus = payBillEntity.getString("nckd_paystatus");
- String nckd_hxzt = payBillEntity.getString("nckd_hxzt");
- if (!"C".equals(billstatusString)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能提交执行~\r\n");
- isZFQZ = false;
- }
- if (!"B".equals(paystatus) && !"".equals(paystatus)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为支付中,才能提交执行~\r\n");
- isZFQZ = false;
- }
- if (!"A".equals(nckd_hxzt) && !"".equals(nckd_hxzt)) {
- errMsg.append("单据号:").append(billNum).append(",核心状态为已登记执行失败,才能提交执行~\r\n");
- isZFQZ = false;
- }
- if(payBillEntity.getDynamicObject("payeracctbank")==null) {
- errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
- isZFQZ = false;
- }
- String[] returnmsg_2 = agentpayBillFukuan(servername,port,payBillEntity);
- errMsg.append(returnmsg_2[1]);
- if("2".equals(returnmsg_2[0])){//第二步成功
- isSuccess=true;
- payBillEntity.set("nckd_hxzt","R");//改核心状态为已登记等待执行结果
- }
- if (isSuccess) {
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }
- return errMsg.toString();
- }
- /**
- * 代发单支付-手工关闭
- * @params billEntities
- * @returns 返回报错信息
- *
- */
- public static String payclose(DynamicObject[] billEntities) {
- StringBuffer errMsg = new StringBuffer();
- //获取接口链接等信息
- DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")});
- String servername = jkpzxx.getString("nckd_servername");
- String port = jkpzxx.getString("nckd_port");
- for (DynamicObject dataEntity : billEntities) {
- boolean isSuccess = false;//手工关闭是否成功标识
- boolean isZFQZ = true;
- Map<String, String> qzObject = new HashMap<>();
- DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), AGENT_ENTITY_NAME);
- /**
- * 判断是否可以走前置支付
- * 1、代发单为审核状态
- * 2、支付状态为支付中
- * 3、核心状态为支付处理部分成功,或执行失败D
- */
- String billNum = payBillEntity.getString("billno");
- String billstatusString = payBillEntity.getString("billstatus");
- String paystatus = payBillEntity.getString("nckd_paystatus");
- String nckd_hxzt = payBillEntity.getString("nckd_hxzt");
- if (!"C".equals(billstatusString)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能手工关闭~\r\n");
- isZFQZ = false;
- }
- if (!"B".equals(paystatus) && !"".equals(paystatus)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为支付中,才能手工关闭~\r\n");
- isZFQZ = false;
- }
- if (!("B".equals(nckd_hxzt) ||"D".equals(nckd_hxzt))) {
- errMsg.append("单据号:").append(billNum).append(",核心状态为支付处理部分成功或执行失败,才能手工关闭~\r\n");
- isZFQZ = false;
- }
- if(payBillEntity.getDynamicObject("payeracctbank")==null) {
- errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
- isZFQZ = false;
- }
- String[] returnmsg_2 = agentpayBillFukuan_payclose(servername,port,payBillEntity);
- errMsg.append(returnmsg_2[1]);
- if("2".equals(returnmsg_2[0])){//手工关闭成功
- isSuccess=true;
- payBillEntity.set("nckd_paystatus","D");//支付状态为支付关闭
- payBillEntity.set("nckd_hxzt","W");//改核心状态为支付处理流程结束
- }
- if (isSuccess) {
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }
- return errMsg.toString();
- }
- /**
- * 代发单支付-开始传输第一步及后续
- * @params billEntities
- * @returns 返回报错信息
- *
- */
- public static String agentpayBillForCBSSync(DynamicObject[] billEntities) {
- StringBuffer errMsg = new StringBuffer();
- //获取接口链接等信息
- DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")});
- String servername = jkpzxx.getString("nckd_servername");
- String port = jkpzxx.getString("nckd_port");
- for (DynamicObject dataEntity : billEntities) {
- boolean isSuccess = false;//第一步是否成功标识
- boolean isZFQZ = true;
- Map<String, String> qzObject = new HashMap<>();
- DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), AGENT_ENTITY_NAME);
- /**
- * 判断是否可以走前置支付
- * 1、代发单为审核状态
- * 2、支付状态为未支付
- */
- String billNum = payBillEntity.getString("billno");
- String billstatusString = payBillEntity.getString("billstatus");
- String paystatus = payBillEntity.getString("nckd_paystatus");
- if (!"C".equals(billstatusString)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能提交~\r\n");
- isZFQZ = false;
- }
- if (!"A".equals(paystatus) && !"".equals(paystatus)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为未支付,才能提交~\r\n");
- isZFQZ = false;
- }
- if(payBillEntity.getDynamicObject("payeracctbank")==null) {
- errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
- isZFQZ = false;
- }
- //构建支付数据导入请求xml
- String bodyxml = createSingleAgentPaymentRequest_1(payBillEntity);
- if(bodyxml==null){
- isZFQZ = false;
- errMsg.append("单据号:").append(billNum).append(",第一步无法拼出正确的xml请求~\r\n");
- }
- if(!isZFQZ){
- continue;
- }
- log.info("单据号:"+billNum+"传入参数"+bodyxml);
- JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,"ACHRDATI");
- log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
- //存入日志表
- saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"1");
- if(cbsReturnJson==null){
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入失败,");
- errMsg.append("错误号:").append("XXXXXXX");
- errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
- errMsg.append("\r\n");
- }else if("{}".equals(cbsReturnJson.toString())|| cbsReturnJson.get("Message")==null){
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入失败,");
- errMsg.append("错误号:").append("DDDDDD1");
- errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
- errMsg.append("\r\n");
- }else{
- JSONObject head = cbsReturnJson.getJSONObject("Message").getJSONObject("HeadInfo");
- if(head==null){
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入失败,");
- errMsg.append("错误号:").append("DDDDDDD2");
- errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
- errMsg.append("\r\n");
- }else{
- String errcode =head.getString("errorcode");
- if ("000000".equals(errcode)) {//已受理,表示传输成功
- isSuccess = true;
- errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入成功!");
- //第二步。调用付款接口
- String[] returnmsg_2 = agentpayBillFukuan(servername,port,payBillEntity);
- errMsg.append(returnmsg_2[1]);
- if("2".equals(returnmsg_2[0])){//第二步成功
- payBillEntity.set("nckd_hxzt","R");//改核心状态为已登记等待执行结果
- }else{//第二步失败
- payBillEntity.set("nckd_hxzt","A");//执行失败
- }
- payBillEntity.set("nckd_paystatus","B");
- }else{
- errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入失败!"+head.getString("errormsg"));
- }
- }
- }
- if (isSuccess) {
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }
- return errMsg.toString();
- }
- /**
- * 代发单关闭-第三步
- * @param servername
- * @param port
- * @param payBillEntity
- * @return
- */
- public static String[] agentpayBillGuanBi_auto(String servername,String port,DynamicObject payBillEntity) {
- StringBuffer errMsg = new StringBuffer();
- boolean isZFQZ = true;
- String billNum = payBillEntity.getString("billno");
- String bodyxml = createSingleAgentPaymentRequest_3(payBillEntity);
- if(bodyxml==null){
- isZFQZ = false;
- errMsg.append("单据号:").append(billNum).append(",无法拼出正确的关闭xml请求~\r\n");
- }
- if(!isZFQZ){
- return new String[]{"-1",errMsg.toString()};
- }
- log.info("单据号:"+billNum+"关闭传入参数"+bodyxml);
- JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,"XXXX3");
- log.info("单据号:"+billNum+"关闭返回参数"+cbsReturnJson.toString());
- saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"4");
- String errmark = "4";
- if(cbsReturnJson==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",第三步关闭付款失败,");
- errMsg.append("错误号:").append("XXXXXXX");
- errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
- errMsg.append("\r\n");
- }else if(cbsReturnJson.get("Message")==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",第三步关闭付款失败,");
- errMsg.append("错误号:").append("DDDDDD1");
- errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
- errMsg.append("\r\n");
- }else{
- JSONObject bodyinfo = cbsReturnJson.getJSONObject("Message").getJSONObject("Body");
- if(bodyinfo==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",第三步关闭付款失败,");
- errMsg.append("错误号:").append("DDDDDDD2");
- errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
- errMsg.append("\r\n");
- }else{
- String errcode =bodyinfo.getString("errorcode");
- if ("FIN0000".equals(errcode)) {//已受理,表示传输成功
- errMsg.append("单据号:").append(billNum).append(",第三步关闭付款成功!");
- errmark = "3";
- }
- }
- }
- return new String[]{errmark,errMsg.toString()};
- }
- /**
- * 代发单-手工关闭
- * @param servername
- * @param port
- * @param payBillEntity
- * @return
- */
- public static String[] agentpayBillFukuan_payclose(String servername,String port,DynamicObject payBillEntity) {
- StringBuffer errMsg = new StringBuffer();
- boolean isZFQZ = true;
- String billNum = payBillEntity.getString("billno");
- String nckd_hxzt = payBillEntity.getString("nckd_hxzt");
- String bodyxml = "";
- if("B".equals(nckd_hxzt)){
- bodyxml = createSingleAgentPaymentRequest_3(payBillEntity);
- }else{
- bodyxml = createSingleAgentPaymentRequest_4(payBillEntity);
- }
- if(bodyxml==null){
- isZFQZ = false;
- errMsg.append("单据号:").append(billNum).append(",无法拼出正确的xml请求~\r\n");
- }
- if(!isZFQZ){
- return new String[]{"-1",errMsg.toString()};
- }
- log.info("单据号:"+billNum+"传入参数"+bodyxml);
- String transcode= "ACHRDATE";
- String type="";
- if("B".equals(nckd_hxzt)){
- transcode= "ACHRDATE";
- type = "4";
- }else{
- transcode= "ACHRDATF";
- type = "5";
- }
- JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,transcode);
- log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
- saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),type);
- String errmark = "4";
- if(cbsReturnJson==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",手工关闭失败,");
- errMsg.append("错误号:").append("XXXXXXX");
- errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
- errMsg.append("\r\n");
- }else if("{}".equals(cbsReturnJson.toString())|| cbsReturnJson.get("Message")==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",手工关闭失败,");
- errMsg.append("错误号:").append("DDDDDD1");
- errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
- errMsg.append("\r\n");
- }else{
- JSONObject head = cbsReturnJson.getJSONObject("Message").getJSONObject("HeadInfo");
- if(head==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",手工关闭失败,");
- errMsg.append("错误号:").append("DDDDDDD2");
- errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
- errMsg.append("\r\n");
- }else{
- String errcode =head.getString("errorcode");
- if ("000000".equals(errcode)) {//已受理,表示传输成功
- errMsg.append("单据号:").append(billNum).append(",手工关闭成功!");
- errmark = "2";
- }else{
- errMsg.append("单据号:").append(billNum).append(",手工关闭失败!"+head.getString("errormsg"));
- errmark = "3";
- }
- }
- }
- return new String[]{errmark,errMsg.toString()};
- }
- /**
- * 代发单-第四步重发
- * @param servername
- * @param port
- * @param payBillEntity
- * @return
- */
- public static String[] agentpayBillFukuan_chongfa(String servername,String port,DynamicObject payBillEntity) {
- StringBuffer errMsg = new StringBuffer();
- boolean isZFQZ = true;
- String billNum = payBillEntity.getString("billno");
- String bodyxml = createSingleAgentPaymentRequest_7(payBillEntity);
- if(bodyxml==null){
- isZFQZ = false;
- errMsg.append("单据号:").append(billNum).append(",无法拼出正确的xml请求~\r\n");
- }
- if(!isZFQZ){
- return new String[]{"-1",errMsg.toString()};
- }
- log.info("单据号:"+billNum+"传入参数"+bodyxml);
- JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,"ACHRDATR");
- log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
- saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"3");
- String errmark = "4";
- if(cbsReturnJson==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",第四步调用重发失败,");
- errMsg.append("错误号:").append("XXXXXXX");
- errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
- errMsg.append("\r\n");
- }else if("{}".equals(cbsReturnJson.toString())|| cbsReturnJson.get("Message")==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",第四步调用重发失败,");
- errMsg.append("错误号:").append("DDDDDD1");
- errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
- errMsg.append("\r\n");
- }else{
- JSONObject head = cbsReturnJson.getJSONObject("Message").getJSONObject("HeadInfo");
- if(head==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",第四步调用重发失败,");
- errMsg.append("错误号:").append("DDDDDDD2");
- errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
- errMsg.append("\r\n");
- }else{
- String errcode =head.getString("errorcode");
- if ("000000".equals(errcode)) {//已受理,表示传输成功
- errMsg.append("单据号:").append(billNum).append(",第四步调用重发成功!");
- errmark = "2";
- }else{
- errMsg.append("单据号:").append(billNum).append(",第四步调用重发失败!"+head.getString("errormsg"));
- errmark = "3";
- }
- }
- }
- return new String[]{errmark,errMsg.toString()};
- }
- /**
- * 代发单-第二步
- * @param servername
- * @param port
- * @param payBillEntity
- * @return
- */
- public static String[] agentpayBillFukuan(String servername,String port,DynamicObject payBillEntity) {
- StringBuffer errMsg = new StringBuffer();
- boolean isZFQZ = true;
- String billNum = payBillEntity.getString("billno");
- String bodyxml = createSingleAgentPaymentRequest_2(payBillEntity);
- if(bodyxml==null){
- isZFQZ = false;
- errMsg.append("单据号:").append(billNum).append(",无法拼出正确的xml请求~\r\n");
- }
- if(!isZFQZ){
- return new String[]{"-1",errMsg.toString()};
- }
- log.info("单据号:"+billNum+"传入参数"+bodyxml);
- JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,"ACHRDATD");
- log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
- saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"2");
- String errmark = "4";
- if(cbsReturnJson==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",第二步调用执行失败,");
- errMsg.append("错误号:").append("XXXXXXX");
- errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
- errMsg.append("\r\n");
- }else if("{}".equals(cbsReturnJson.toString())|| cbsReturnJson.get("Message")==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",第二步调用执行失败,");
- errMsg.append("错误号:").append("DDDDDD1");
- errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
- errMsg.append("\r\n");
- }else{
- JSONObject head = cbsReturnJson.getJSONObject("Message").getJSONObject("HeadInfo");
- if(head==null){
- errmark = "1";
- errMsg.append("单据号:").append(billNum).append(",第二步调用执行失败,");
- errMsg.append("错误号:").append("DDDDDDD2");
- errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
- errMsg.append("\r\n");
- }else{
- String errcode =head.getString("errorcode");
- if ("000000".equals(errcode)) {//已受理,表示传输成功
- errMsg.append("单据号:").append(billNum).append(",第二步调用执行成功!");
- errmark = "2";
- }else{
- errMsg.append("单据号:").append(billNum).append(",第二步调用执行失败!"+head.getString("errormsg"));
- errmark = "3";
- }
- }
- }
- return new String[]{errmark,errMsg.toString()};
- }
- /**
- * 支付单同步
- * @params billEntities
- * @returns 返回报错信息
- *
- */
- public static String payBillForCBSSync(DynamicObject[] billEntities) {
- StringBuffer errMsg = new StringBuffer();
- //获取接口链接等信息
- DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytoZFQZdb")});
- String servername = jkpzxx.getString("nckd_servername");
- String port = jkpzxx.getString("nckd_port");
- for (DynamicObject dataEntity : billEntities) {
- boolean isSuccess = false;
- boolean isZFQZ = true;
- Map<String, String> qzObject = new HashMap<>();
- DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), ENTITY_NAME);
- /**
- * 判断是否可以走前置支付
- * 1、付款单为审核状态
- * 2、支付状态为未支付
- * 3、版本号>=1时,必须等于付款次数
- */
- String billNum = payBillEntity.getString("billno");
- String billstatusString = payBillEntity.getString("billstatus");
- String paystatus = payBillEntity.getString("nckd_paystatus");
- int bbh = payBillEntity.getInt("nckd_bbh");
- int fkcs = payBillEntity.getInt("nckd_fkcs");
- if (!"C".equals(billstatusString)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能提交~\r\n");
- isZFQZ = false;
- }
- if (!"1".equals(paystatus) && !"".equals(paystatus)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为未支付,才能提交~\r\n");
- isZFQZ = false;
- }
- if(bbh>=1 && bbh!=fkcs){
- errMsg.append("单据号:").append(billNum).append(",付款单未调整,请调整数据,或点击重付~\r\n");
- isZFQZ = false;
- }
- if(payBillEntity.getDynamicObject("payeracctbank")==null) {
- errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
- isZFQZ = false;
- }
- if(payBillEntity.getDynamicObject("payeebank")==null) {
- errMsg.append("单据号:").append(billNum).append(",收款账户为空~\r\n");
- isZFQZ = false;
- }
- //构建请求xml
- String bodyxml = createSinglePaymentRequest(payBillEntity);
- if(bodyxml==null){
- isZFQZ = false;
- errMsg.append("单据号:").append(billNum).append(",无法拼出正确的xml请求~\r\n");
- }
- if(!isZFQZ){
- continue;
- }
- log.info("单据号:"+billNum+"传入参数"+bodyxml);
- JSONObject cbsReturnJson =socketService(servername,port,bodyxml);
- log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
- //存入日志表
- savelog(payBillEntity,bodyxml,cbsReturnJson.toString());
- if(cbsReturnJson==null){
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
- errMsg.append("错误号:").append("XXXXXXX");
- errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
- errMsg.append("\r\n");
- }else if(cbsReturnJson.get("Message")==null){
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
- errMsg.append("错误号:").append("DDDDDD1");
- errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
- errMsg.append("\r\n");
- }else{
- JSONObject bodyinfo = cbsReturnJson.getJSONObject("Message").getJSONObject("Body");
- if(bodyinfo==null){
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
- errMsg.append("错误号:").append("DDDDDDD2");
- errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
- errMsg.append("\r\n");
- }else{
- String errcode =bodyinfo.getString("errorcode");
- if ("FIN0000".equals(errcode)) {//已受理,不代表支付成功
- isSuccess = true;
- errMsg.append("单据号:").append(billNum).append(",推送支付前置成功!");
- payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
- payBillEntity.set("nckd_sbyy",bodyinfo.getString("errormsg"));//错误信息
- String zfstatus = bodyinfo.getString("status");
- if("S".equals(zfstatus)){//成功
- payBillEntity.set("nckd_paystatus",3);
- }else if("U".equals(zfstatus)){//在途
- payBillEntity.set("nckd_paystatus",2);//支付中
- }else if("F".equals(zfstatus)){//失败
- payBillEntity.set("nckd_paystatus",4);//支付失败
- }
- } else {//拿到返回结果支付次数就必须加一
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
- errMsg.append("错误号:").append(errcode);
- errMsg.append(",错误原因:").append(bodyinfo.getString("errormsg"));
- errMsg.append("\r\n");
- payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
- payBillEntity.set("nckd_paystatus",4);//支付失败
- payBillEntity.set("nckd_sbyy",bodyinfo.getString("errormsg"));//错误信息
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }
- }
- if (isSuccess) {
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }
- return errMsg.toString();
- }
- public static void saveAgentlog(DynamicObject payBillEntity,String qqbw,String fhbw,String type){
- try {
- DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_dfjkdyrz"));
- String channelserno = payBillEntity.getString("billno");
- logInfo.set("number",channelserno);
- if("1".equals(type)){
- logInfo.set("name",payBillEntity.get("billno")+"支付数据导入日志");
- }else if("2".equals(type)){
- logInfo.set("name",payBillEntity.get("billno")+"支付数据执行日志");
- }else if("3".equals(type)){
- logInfo.set("name",payBillEntity.get("billno")+"支付数据重发日志");
- }else if("4".equals(type)){
- logInfo.set("name",payBillEntity.get("billno")+"支付结束(成功)日志");
- }else if("5".equals(type)){
- logInfo.set("name",payBillEntity.get("billno")+"支付结束(失败)日志");
- }else if("6".equals(type)){
- logInfo.set("name",payBillEntity.get("billno")+"代发单表头支付信息查询日志");
- }else if("7".equals(type)){
- logInfo.set("name",payBillEntity.get("billno")+"代发单分录支付信息查询日志");
- }
- logInfo.set("nckd_jklx",type);
- logInfo.set("status","A");
- logInfo.set("enable","1");
- Calendar currentdate = Calendar.getInstance();
- logInfo.set("nckd_redate",currentdate.getTime());
- logInfo.set("nckd_billno",payBillEntity.get("billno"));
- logInfo.set("nckd_payid",payBillEntity.getPkValue()+"");
- logInfo.set("nckd_qqbw_tag",qqbw);
- logInfo.set("nckd_fhbw_tag",fhbw);
- logInfo.set("nckd_redate",new Date());
- logInfo.set("nckd_djlx","2");
- OperationServiceHelper.executeOperate("save","nckd_zfjkdyrz",new DynamicObject[]{logInfo});
- }catch (Exception e){
- log.info("保存日志报错"+e.getMessage());
- }
- }
- public static void savelog(DynamicObject payBillEntity,String qqbw,String fhbw){
- try {
- DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_zfjkdyrz"));
- String channelserno = payBillEntity.get("billno")+"-"+payBillEntity.getInt("nckd_bbh");
- logInfo.set("number",channelserno);
- logInfo.set("name",payBillEntity.get("billno")+"付款日志");
- logInfo.set("status","A");
- logInfo.set("enable","1");
- Calendar currentdate = Calendar.getInstance();
- logInfo.set("nckd_redate",currentdate.getTime());
- logInfo.set("nckd_billno",payBillEntity.get("billno"));
- logInfo.set("nckd_payid",payBillEntity.getPkValue()+"");
- logInfo.set("nckd_qqbw_tag",qqbw);
- logInfo.set("nckd_fhbw_tag",fhbw);
- logInfo.set("nckd_redate",new Date());
- logInfo.set("nckd_djlx","1");
- OperationServiceHelper.executeOperate("save","nckd_zfjkdyrz",new DynamicObject[]{logInfo});
- }catch (Exception e){
- log.info("保存日志报错"+e.getMessage());
- }
- }
- public static void saveupdatelog(DynamicObject payBillEntity,String qqbw,String fhbw){
- try {
- DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_zfcxjkrz"));
- String channelserno = payBillEntity.get("billno")+"-"+payBillEntity.getInt("nckd_bbh");
- logInfo.set("number",channelserno);
- logInfo.set("name",payBillEntity.get("billno")+"查询状态日志");
- logInfo.set("status","A");
- logInfo.set("enable","1");
- Calendar currentdate = Calendar.getInstance();
- logInfo.set("nckd_redate",currentdate.getTime());
- logInfo.set("nckd_billno",payBillEntity.get("billno"));
- logInfo.set("nckd_payid",payBillEntity.getPkValue()+"");
- logInfo.set("nckd_qqbw_tag",qqbw);
- logInfo.set("nckd_fhbw_tag",fhbw);
- logInfo.set("nckd_redate",new Date());
- logInfo.set("nckd_djlx","1");
- OperationServiceHelper.executeOperate("save","nckd_zfcxjkrz",new DynamicObject[]{logInfo});
- }catch (Exception e){
- log.info("保存日志报错"+e.getMessage());
- }
- }
- public static JSONObject socketService(String serverName,String port,String xmlData){
- try {
- Socket client = new Socket(serverName,TypeUtils.nullToInt(port));
- int messageLength = xmlData.getBytes("GBK").length;
- String header = String.format("%08dXMLBTSCO001%%%%%%%%%%%%%%%%%%%%%%%%%%", messageLength);
- String fullMessage = header + xmlData;
- OutputStream outToServer = client.getOutputStream();
- PrintWriter out = new PrintWriter(new OutputStreamWriter(outToServer, "GBK"), true);
- out.println(fullMessage);
- InputStream inFromServer = client.getInputStream();
- BufferedReader in = new BufferedReader(new InputStreamReader(inFromServer, "GBK"));
- StringBuilder responseBuilder = new StringBuilder();
- String line;
- while ((line = in.readLine()) != null) {
- responseBuilder.append(line);
- }
- String responseJson = responseBuilder.toString();
- if(responseJson.indexOf("<?xml")>0){
- int index = responseJson.indexOf("<?xml");
- responseJson = responseJson.substring(index);
- }
- JSONObject jsonObject = XML.toJSONObject(responseJson);
- client.close();
- return jsonObject;
- } catch (IOException e) {
- e.printStackTrace();
- log.info(e.getMessage());
- }
- return null;
- }
- /**
- * 支付单同步
- * @params billEntities
- * @returns 返回报错信息
- *
- */
- public static String agentPayBillClose(DynamicObject[] billEntities) {
- StringBuffer errMsg = new StringBuffer();
- //获取接口链接等信息
- DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","paytozfqz")});
- String servername = jkpzxx.getString("nckd_servername");
- String port = jkpzxx.getString("nckd_port");
- for (DynamicObject dataEntity : billEntities) {
- boolean isSuccess = false;
- boolean isZFQZ = true;
- Map<String, String> qzObject = new HashMap<>();
- DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), ENTITY_NAME);
- /**
- * 判断是否可以走前置支付
- * 1、付款单为审核状态
- * 2、支付状态为未支付
- * 3、版本号>=1时,必须等于付款次数
- */
- String billNum = payBillEntity.getString("billno");
- String billstatusString = payBillEntity.getString("billstatus");
- String paystatus = payBillEntity.getString("nckd_paystatus");
- int bbh = payBillEntity.getInt("nckd_bbh");
- int fkcs = payBillEntity.getInt("nckd_fkcs");
- if (!"C".equals(billstatusString)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能提交~\r\n");
- isZFQZ = false;
- }
- if (!"1".equals(paystatus) && !"".equals(paystatus)) {
- errMsg.append("单据号:").append(billNum).append(",付款单为未支付,才能提交~\r\n");
- isZFQZ = false;
- }
- if(bbh>=1 && bbh!=fkcs){
- errMsg.append("单据号:").append(billNum).append(",付款单未调整,请调整数据,或点击重付~\r\n");
- isZFQZ = false;
- }
- if(payBillEntity.getDynamicObject("payeracctbank")==null) {
- errMsg.append("单据号:").append(billNum).append(",付款账户为空~\r\n");
- isZFQZ = false;
- }
- if(payBillEntity.getDynamicObject("payeebank")==null) {
- errMsg.append("单据号:").append(billNum).append(",收款账户为空~\r\n");
- isZFQZ = false;
- }
- //构建请求xml
- String bodyxml = createSinglePaymentRequest(payBillEntity);
- if(bodyxml==null){
- isZFQZ = false;
- errMsg.append("单据号:").append(billNum).append(",无法拼出正确的xml请求~\r\n");
- }
- if(!isZFQZ){
- continue;
- }
- log.info("单据号:"+billNum+"传入参数"+bodyxml);
- JSONObject cbsReturnJson =socketService(servername,port,bodyxml);
- log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
- //存入日志表
- savelog(payBillEntity,bodyxml,cbsReturnJson.toString());
- if(cbsReturnJson==null){
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
- errMsg.append("错误号:").append("XXXXXXX");
- errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
- errMsg.append("\r\n");
- }else if(cbsReturnJson.get("Message")==null){
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
- errMsg.append("错误号:").append("DDDDDD1");
- errMsg.append(",错误原因:").append("接口已连通,但未获取到返回结果");
- errMsg.append("\r\n");
- }else{
- JSONObject bodyinfo = cbsReturnJson.getJSONObject("Message").getJSONObject("Body");
- if(bodyinfo==null){
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
- errMsg.append("错误号:").append("DDDDDDD2");
- errMsg.append(",错误原因:").append("接口已连通,但无法解析返回结果"+cbsReturnJson.toString());
- errMsg.append("\r\n");
- }else{
- String errcode =bodyinfo.getString("errorcode");
- if ("FIN0000".equals(errcode)) {//已受理,不代表支付成功
- isSuccess = true;
- errMsg.append("单据号:").append(billNum).append(",推送支付前置成功!");
- payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
- payBillEntity.set("nckd_sbyy",bodyinfo.getString("errormsg"));//错误信息
- String zfstatus = bodyinfo.getString("status");
- if("S".equals(zfstatus)){//成功
- payBillEntity.set("nckd_paystatus",3);
- }else if("U".equals(zfstatus)){//在途
- payBillEntity.set("nckd_paystatus",2);//支付中
- }else if("F".equals(zfstatus)){//失败
- payBillEntity.set("nckd_paystatus",4);//支付失败
- }
- } else {//拿到返回结果支付次数就必须加一
- isSuccess = false;
- errMsg.append("单据号:").append(billNum).append(",推送支付前置失败,");
- errMsg.append("错误号:").append(errcode);
- errMsg.append(",错误原因:").append(bodyinfo.getString("errormsg"));
- errMsg.append("\r\n");
- payBillEntity.set("nckd_fkcs", fkcs+1);//付款次数+1
- payBillEntity.set("nckd_paystatus",4);//支付失败
- payBillEntity.set("nckd_sbyy",bodyinfo.getString("errormsg"));//错误信息
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }
- }
- if (isSuccess) {
- SaveServiceHelper.update(new DynamicObject[]{payBillEntity});
- }
- }
- return errMsg.toString();
- }
- public static JSONObject socketServiceQuery(String serverName,String port,String xmlData,String transcode){
- try {
- Socket client = new Socket(serverName,TypeUtils.nullToInt(port));
- int messageLength = xmlData.getBytes("GBK").length;
- String header = String.format("%08dXML"+transcode+"%%%%%%%%%%%%%%%%%%%%%%%%%%", messageLength);
- String fullMessage = header + xmlData;
- OutputStream outToServer = client.getOutputStream();
- PrintWriter out = new PrintWriter(new OutputStreamWriter(outToServer, "GBK"), true);
- out.println(fullMessage);
- InputStream inFromServer = client.getInputStream();
- BufferedReader in = new BufferedReader(new InputStreamReader(inFromServer, "GBK"));
- StringBuilder responseBuilder = new StringBuilder();
- String line;
- while ((line = in.readLine()) != null) {
- responseBuilder.append(line);
- }
- String responseJson = responseBuilder.toString();
- if(responseJson.indexOf("<?xml")>0){
- int index = responseJson.indexOf("<?xml");
- responseJson = responseJson.substring(index);
- }
- JSONObject jsonObject = XML.toJSONObject(responseJson);
- client.close();
- return jsonObject;
- } catch (IOException e) {
- e.printStackTrace();
- log.info(e.getMessage());
- }
- return null;
- }
- public static JSONObject socketServiceAgent(String serverName,String port,String xmlData,String transcode){
- try {
- Socket client = new Socket(serverName,TypeUtils.nullToInt(port));
- int messageLength = xmlData.getBytes("GBK").length;
- String header = String.format("%08d", messageLength);
- String fullMessage = header + xmlData;
- OutputStream outToServer = client.getOutputStream();
- PrintWriter out = new PrintWriter(new OutputStreamWriter(outToServer, "GBK"), true);
- out.println(fullMessage);
- InputStream inFromServer = client.getInputStream();
- BufferedReader in = new BufferedReader(new InputStreamReader(inFromServer, "GBK"));
- StringBuilder responseBuilder = new StringBuilder();
- String line;
- while ((line = in.readLine()) != null) {
- responseBuilder.append(line);
- }
- String responseJson = responseBuilder.toString();
- if(responseJson.indexOf("<?xml")>0){
- int index = responseJson.indexOf("<?xml");
- responseJson = responseJson.substring(index);
- }
- JSONObject jsonObject = XML.toJSONObject(responseJson);
- client.close();
- return jsonObject;
- } catch (IOException e) {
- e.printStackTrace();
- log.info(e.getMessage());
- }
- return null;
- }
- }
|