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 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 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 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 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 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("0){ int index = responseJson.indexOf(" 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("0){ int index = responseJson.indexOf("0){ int index = responseJson.indexOf("