|  | @@ -1,5 +1,6 @@
 | 
	
		
			
				|  |  |  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;
 | 
	
	
		
			
				|  | @@ -31,7 +32,9 @@ 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 {
 | 
	
	
		
			
				|  | @@ -71,6 +74,256 @@ public class PayBillToolUtil {
 | 
	
		
			
				|  |  |              return null;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 代发单部分成功,关闭支付
 | 
	
		
			
				|  |  | +     * @param agentpayBillEntity
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public static String createSingleAgentPaymentRequest_4(DynamicObject agentpayBillEntity) {
 | 
	
		
			
				|  |  | +        return "";
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 代发单全部成功,关闭支付
 | 
	
		
			
				|  |  | +     * @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) {
 | 
	
		
			
				|  |  | +        return "";
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 代发单重发,只传失败的数据
 | 
	
		
			
				|  |  | +     * @param agentpayBillEntity
 | 
	
		
			
				|  |  | +     * @return
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public static String createSingleAgentPaymentRequest_7(DynamicObject agentpayBillEntity) {
 | 
	
		
			
				|  |  | +        return "";
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 代发单发起支付..待完善
 | 
	
		
			
				|  |  | +     * @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");
 | 
	
		
			
				|  |  | +        createElement(doc, head, "channeldate", datacur);//发起渠道日期
 | 
	
		
			
				|  |  | +        String channelserno = datacur+"-"+currentdate.get(Calendar.HOUR)+""+currentdate.get(Calendar.MINUTE)+""+currentdate.get(Calendar.SECOND);
 | 
	
		
			
				|  |  | +        createElement(doc, head, "channelserno", channelserno);//发起渠道流水
 | 
	
		
			
				|  |  | +        createElement(doc, head, "channeltime", currentdate.get(Calendar.HOUR)+""+currentdate.get(Calendar.MINUTE)+""+currentdate.get(Calendar.SECOND));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        createElement(doc, head, "brno", "");//交易发起机构,可为空,默认100800
 | 
	
		
			
				|  |  | +        createElement(doc, head, "bustype", "");
 | 
	
		
			
				|  |  | +        createElement(doc, head, "buskind", "");
 | 
	
		
			
				|  |  | +        createElement(doc, head, "reserve", "");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static void agentPaymentXMLBody_Msg(DynamicObject agentpayBillEntity,Document doc,Element body) {
 | 
	
		
			
				|  |  | +        createElement(doc, body, "FileName",agentpayBillEntity.getString("nckd_filename") );//文件名称
 | 
	
		
			
				|  |  | +        createElement(doc, body, "FileType",agentpayBillEntity.getString("nckd_filetype") );//文件类型
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //付款账号
 | 
	
		
			
				|  |  | +        DynamicObject payeracctbankEntity = BusinessDataServiceHelper.loadSingleFromCache(agentpayBillEntity.getDynamicObject("payeracctbank").getPkValue(), "am_accountbank");
 | 
	
		
			
				|  |  | +        String payeracc = payeracctbankEntity.getString("bankaccountnumber");
 | 
	
		
			
				|  |  | +        String payername = payeracctbankEntity.getString("acctname");
 | 
	
		
			
				|  |  | +        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");//收费标志
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static void agentPaymentXMLBody_Entry(DynamicObject agentpayBillEntity,Document doc,Element body) {
 | 
	
		
			
				|  |  | +        // 获取分录数据
 | 
	
		
			
				|  |  | +        DynamicObjectCollection entryList = agentpayBillEntity.getDynamicObjectCollection("entry");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        for (DynamicObject entry : entryList) {
 | 
	
		
			
				|  |  | +            Element achrapaydtl_i = doc.createElement("achrapaydtl_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("e_amount").setScale(2, RoundingMode.DOWN).toString());//支付金额
 | 
	
		
			
				|  |  | +            createElement(doc, achrapaydtl_i, "RowCnt", "10000");//展示条数
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      public static String createSinglePaymentRequest(DynamicObject payBillEntity) {
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |              DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
 | 
	
	
		
			
				|  | @@ -148,6 +401,240 @@ public class PayBillToolUtil {
 | 
	
		
			
				|  |  |          parent.appendChild(element);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 代发单支付-开始传输第一步及后续
 | 
	
		
			
				|  |  | +     * @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 (!"1".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 =socketServiceQuery(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(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 ("FIN0000".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 =socketServiceQuery(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(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 =socketServiceQuery(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(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 ("FIN0000".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
 | 
	
	
		
			
				|  | @@ -167,7 +654,6 @@ public class PayBillToolUtil {
 | 
	
		
			
				|  |  |              Map<String, String> qzObject = new HashMap<>();
 | 
	
		
			
				|  |  |              DynamicObject payBillEntity = BusinessDataServiceHelper.loadSingle(dataEntity.getPkValue(), ENTITY_NAME);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            String cbsUrlBill ="";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              /**
 | 
	
		
			
				|  |  |               *   判断是否可以走前置支付
 | 
	
	
		
			
				|  | @@ -279,6 +765,50 @@ public class PayBillToolUtil {
 | 
	
		
			
				|  |  |          return errMsg.toString();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public static void saveAgentlog(DynamicObject payBillEntity,String qqbw,String fhbw,String type){
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_zfjkdyrz"));
 | 
	
		
			
				|  |  | +            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"));
 | 
	
	
		
			
				|  | @@ -370,6 +900,138 @@ public class PayBillToolUtil {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 支付单同步
 | 
	
		
			
				|  |  | +     * @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));
 |