4 Commits c5b81db6c0 ... 23af5d8b50

Author SHA1 Message Date
  13246659623 23af5d8b50 批量支付代码 6 months ago
  13246659623 85b1f0d6a5 Merge branch 'master' of http://111.75.220.136:10030/13246659623/jxyh 6 months ago
  13246659623 055d629faf Merge branch 'master' of http://111.75.220.136:10030/13246659623/jxyh 6 months ago
  13246659623 0ad31be196 付款代码 6 months ago

+ 535 - 35
src/main/java/fi/cas/opplugin/PayBillToolUtil.java

@@ -75,15 +75,48 @@ public class PayBillToolUtil {
         }
         }
     }
     }
     /**
     /**
-     * 代发单部分成功,关闭支付
+     * 代发单执行失败,关闭支付
      * @param agentpayBillEntity
      * @param agentpayBillEntity
      * @return
      * @return
      */
      */
     public static String createSingleAgentPaymentRequest_4(DynamicObject agentpayBillEntity) {
     public static String createSingleAgentPaymentRequest_4(DynamicObject agentpayBillEntity) {
-        return "";
+        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
      * @param agentpayBillEntity
      * @return
      * @return
      */
      */
@@ -172,22 +205,88 @@ public class PayBillToolUtil {
      * @param agentpayBillEntity
      * @param agentpayBillEntity
      * @return
      * @return
      */
      */
-    public static String createSingleAgentPaymentRequest_6(DynamicObject 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
      * @param agentpayBillEntity
      * @return
      * @return
      */
      */
     public static String createSingleAgentPaymentRequest_7(DynamicObject agentpayBillEntity) {
     public static String createSingleAgentPaymentRequest_7(DynamicObject agentpayBillEntity) {
-        return "";
+        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
      * @param agentpayBillEntity
      * @return
      * @return
      */
      */
@@ -279,51 +378,87 @@ public class PayBillToolUtil {
         createElement(doc, head, "channelcode", CHANNELCODE_PILIANG);//发起渠道
         createElement(doc, head, "channelcode", CHANNELCODE_PILIANG);//发起渠道
         Calendar currentdate = Calendar.getInstance();
         Calendar currentdate = Calendar.getInstance();
         String datacur = TypeUtils.date2String(currentdate.getTime(),"yyyyMMdd");
         String datacur = TypeUtils.date2String(currentdate.getTime(),"yyyyMMdd");
+        String datacur_Hms = TypeUtils.date2String(currentdate.getTime(),"HHmmss");
         createElement(doc, head, "channeldate", datacur);//发起渠道日期
         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));
+        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, "brno", "");//交易发起机构,可为空,默认100800
-        createElement(doc, head, "bustype", "");
-        createElement(doc, head, "buskind", "");
+        createElement(doc, head, "tellerno", "");
+        createElement(doc, head, "terminalno", "");
         createElement(doc, head, "reserve", "");
         createElement(doc, head, "reserve", "");
     }
     }
 
 
     public static void agentPaymentXMLBody_Msg(DynamicObject agentpayBillEntity,Document doc,Element body) {
     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");
         DynamicObject payeracctbankEntity = BusinessDataServiceHelper.loadSingleFromCache(agentpayBillEntity.getDynamicObject("payeracctbank").getPkValue(), "am_accountbank");
         String payeracc = payeracctbankEntity.getString("bankaccountnumber");
         String payeracc = payeracctbankEntity.getString("bankaccountnumber");
         String payername = payeracctbankEntity.getString("acctname");
         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, "OutRichNbr", payeracc);//出款户口号
 
 
-        createElement(doc, body, "HrSignnbr", agentpayBillEntity.getString("billno"));//人力流水号
+        createElement(doc, body, "HrSignNbr", agentpayBillEntity.getString("billno"));//人力流水号
         createElement(doc, body, "CcyNbr", "156");//币种,写死人名币
         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, "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, "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) {
     public static void agentPaymentXMLBody_Entry(DynamicObject agentpayBillEntity,Document doc,Element body) {
         // 获取分录数据
         // 获取分录数据
         DynamicObjectCollection entryList = agentpayBillEntity.getDynamicObjectCollection("entry");
         DynamicObjectCollection entryList = agentpayBillEntity.getDynamicObjectCollection("entry");
 
 
-        for (DynamicObject entry : entryList) {
-            Element achrapaydtl_i = doc.createElement("achrapaydtl_i"); // 每条数据用一个achrapaydtl_i元素包裹
+        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);
             body.appendChild(achrapaydtl_i);
 
 
             createElement(doc, achrapaydtl_i, "IdenNbr", entry.getString("nckd_zjh"));//证件号
             createElement(doc, achrapaydtl_i, "IdenNbr", entry.getString("nckd_zjh"));//证件号
             createElement(doc, achrapaydtl_i, "InRichNbr", entry.getString("payeeacctbank"));//收款户口号
             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, "PayAmt", entry.getBigDecimal("entryunmatchamount").setScale(2, RoundingMode.DOWN).toString());//支付金额
+            createElement(doc, achrapaydtl_i, "CurContentSeq", i+1+"");//展示条数
             createElement(doc, achrapaydtl_i, "RowCnt", "10000");//展示条数
             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) {
     public static String createSinglePaymentRequest(DynamicObject payBillEntity) {
         try {
         try {
             DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
             DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
@@ -401,6 +536,199 @@ public class PayBillToolUtil {
         parent.appendChild(element);
         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();
+    }
+
 
 
     /**
     /**
      * 代发单支付-开始传输第一步及后续
      * 代发单支付-开始传输第一步及后续
@@ -435,7 +763,7 @@ public class PayBillToolUtil {
                 errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能提交~\r\n");
                 errMsg.append("单据号:").append(billNum).append(",付款单为审核状态,才能提交~\r\n");
                 isZFQZ = false;
                 isZFQZ = false;
             }
             }
-            if (!"1".equals(paystatus) && !"".equals(paystatus)) {
+            if (!"A".equals(paystatus) && !"".equals(paystatus)) {
                 errMsg.append("单据号:").append(billNum).append(",付款单为未支付,才能提交~\r\n");
                 errMsg.append("单据号:").append(billNum).append(",付款单为未支付,才能提交~\r\n");
                 isZFQZ = false;
                 isZFQZ = false;
             }
             }
@@ -457,7 +785,7 @@ public class PayBillToolUtil {
                 continue;
                 continue;
             }
             }
             log.info("单据号:"+billNum+"传入参数"+bodyxml);
             log.info("单据号:"+billNum+"传入参数"+bodyxml);
-            JSONObject cbsReturnJson =socketServiceQuery(servername,port,bodyxml,"ACHRDATI");
+            JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,"ACHRDATI");
             log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
             log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
             //存入日志表
             //存入日志表
             saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"1");
             saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"1");
@@ -469,7 +797,7 @@ public class PayBillToolUtil {
                 errMsg.append("错误号:").append("XXXXXXX");
                 errMsg.append("错误号:").append("XXXXXXX");
                 errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
                 errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
                 errMsg.append("\r\n");
                 errMsg.append("\r\n");
-            }else if(cbsReturnJson.get("Message")==null){
+            }else if("{}".equals(cbsReturnJson.toString())|| cbsReturnJson.get("Message")==null){
                 isSuccess = false;
                 isSuccess = false;
                 errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入失败,");
                 errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入失败,");
                 errMsg.append("错误号:").append("DDDDDD1");
                 errMsg.append("错误号:").append("DDDDDD1");
@@ -486,7 +814,7 @@ public class PayBillToolUtil {
                 }else{
                 }else{
                     String errcode =head.getString("errorcode");
                     String errcode =head.getString("errorcode");
 
 
-                    if ("FIN0000".equals(errcode)) {//已受理,表示传输成功
+                    if ("000000".equals(errcode)) {//已受理,表示传输成功
                         isSuccess = true;
                         isSuccess = true;
                         errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入成功!");
                         errMsg.append("单据号:").append(billNum).append(",第一步支付数据导入成功!");
 
 
@@ -533,7 +861,7 @@ public class PayBillToolUtil {
             return new String[]{"-1",errMsg.toString()};
             return new String[]{"-1",errMsg.toString()};
         }
         }
         log.info("单据号:"+billNum+"关闭传入参数"+bodyxml);
         log.info("单据号:"+billNum+"关闭传入参数"+bodyxml);
-        JSONObject cbsReturnJson =socketServiceQuery(servername,port,bodyxml,"XXXX3");
+        JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,"XXXX3");
         log.info("单据号:"+billNum+"关闭返回参数"+cbsReturnJson.toString());
         log.info("单据号:"+billNum+"关闭返回参数"+cbsReturnJson.toString());
         saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"4");
         saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"4");
         String errmark = "4";
         String errmark = "4";
@@ -572,6 +900,144 @@ public class PayBillToolUtil {
         return new String[]{errmark,errMsg.toString()};
         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()};
+    }
 
 
     /**
     /**
      * 代发单-第二步
      * 代发单-第二步
@@ -593,7 +1059,7 @@ public class PayBillToolUtil {
             return new String[]{"-1",errMsg.toString()};
             return new String[]{"-1",errMsg.toString()};
         }
         }
         log.info("单据号:"+billNum+"传入参数"+bodyxml);
         log.info("单据号:"+billNum+"传入参数"+bodyxml);
-        JSONObject cbsReturnJson =socketServiceQuery(servername,port,bodyxml,"ACHRDATD");
+        JSONObject cbsReturnJson =socketServiceAgent(servername,port,bodyxml,"ACHRDATD");
         log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
         log.info("单据号:"+billNum+"返回参数"+cbsReturnJson.toString());
         saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"2");
         saveAgentlog(payBillEntity,bodyxml,cbsReturnJson.toString(),"2");
         String errmark = "4";
         String errmark = "4";
@@ -604,7 +1070,7 @@ public class PayBillToolUtil {
             errMsg.append("错误号:").append("XXXXXXX");
             errMsg.append("错误号:").append("XXXXXXX");
             errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
             errMsg.append(",错误原因:").append("接口无法连通,未获取到返回结果");
             errMsg.append("\r\n");
             errMsg.append("\r\n");
-        }else if(cbsReturnJson.get("Message")==null){
+        }else if("{}".equals(cbsReturnJson.toString())|| cbsReturnJson.get("Message")==null){
             errmark = "1";
             errmark = "1";
             errMsg.append("单据号:").append(billNum).append(",第二步调用执行失败,");
             errMsg.append("单据号:").append(billNum).append(",第二步调用执行失败,");
             errMsg.append("错误号:").append("DDDDDD1");
             errMsg.append("错误号:").append("DDDDDD1");
@@ -621,7 +1087,7 @@ public class PayBillToolUtil {
             }else{
             }else{
                 String errcode =head.getString("errorcode");
                 String errcode =head.getString("errorcode");
 
 
-                if ("FIN0000".equals(errcode)) {//已受理,表示传输成功
+                if ("000000".equals(errcode)) {//已受理,表示传输成功
                     errMsg.append("单据号:").append(billNum).append(",第二步调用执行成功!");
                     errMsg.append("单据号:").append(billNum).append(",第二步调用执行成功!");
                     errmark = "2";
                     errmark = "2";
                 }else{
                 }else{
@@ -768,7 +1234,7 @@ public class PayBillToolUtil {
 
 
     public static void saveAgentlog(DynamicObject payBillEntity,String qqbw,String fhbw,String type){
     public static void saveAgentlog(DynamicObject payBillEntity,String qqbw,String fhbw,String type){
         try {
         try {
-            DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_zfjkdyrz"));
+            DynamicObject logInfo = new DynamicObject( EntityMetadataCache.getDataEntityType("nckd_dfjkdyrz"));
             String channelserno = payBillEntity.getString("billno");
             String channelserno = payBillEntity.getString("billno");
             logInfo.set("number",channelserno);
             logInfo.set("number",channelserno);
             if("1".equals(type)){
             if("1".equals(type)){
@@ -780,11 +1246,11 @@ public class PayBillToolUtil {
             }else if("4".equals(type)){
             }else if("4".equals(type)){
                 logInfo.set("name",payBillEntity.get("billno")+"支付结束(成功)日志");
                 logInfo.set("name",payBillEntity.get("billno")+"支付结束(成功)日志");
             }else if("5".equals(type)){
             }else if("5".equals(type)){
-                logInfo.set("name",payBillEntity.get("billno")+"代发单表头支付信息查询日志");
+                logInfo.set("name",payBillEntity.get("billno")+"支付结束(失败)日志");
             }else if("6".equals(type)){
             }else if("6".equals(type)){
-                logInfo.set("name",payBillEntity.get("billno")+"代发单分录支付信息查询日志");
+                logInfo.set("name",payBillEntity.get("billno")+"代发单表头支付信息查询日志");
             }else if("7".equals(type)){
             }else if("7".equals(type)){
-                logInfo.set("name",payBillEntity.get("billno")+"支付结束(失败)日志");
+                logInfo.set("name",payBillEntity.get("billno")+"代发单分录支付信息查询日志");
             }
             }
             logInfo.set("nckd_jklx",type);
             logInfo.set("nckd_jklx",type);
             logInfo.set("status","A");
             logInfo.set("status","A");
@@ -1066,4 +1532,38 @@ public class PayBillToolUtil {
         return null;
         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;
+    }
 }
 }

+ 24 - 0
src/main/java/fi/em/opplugin/AgentpaybillOpPlugin.java

@@ -44,6 +44,30 @@ public class AgentpaybillOpPlugin extends AbstractOperationServicePlugIn {
                 e.setCancelMessage(errMsg);
                 e.setCancelMessage(errMsg);
                 e.setCancel(true);
                 e.setCancel(true);
             }
             }
+        }else if ("payzx".equals(operationKey)){
+            String errMsg = "";
+            errMsg =  PayBillToolUtil.agentpayzx(dynamicObjects);
+            if(!errMsg.isEmpty()) {
+                //将成功错误信息返回到前端
+                e.setCancelMessage(errMsg);
+                e.setCancel(true);
+            }
+        }else if ("repaytozfqz".equals(operationKey)){
+            String errMsg = "";
+            errMsg =  PayBillToolUtil.repaytozfqz(dynamicObjects);
+            if(!errMsg.isEmpty()) {
+                //将成功错误信息返回到前端
+                e.setCancelMessage(errMsg);
+                e.setCancel(true);
+            }
+        }else if ("payclose".equals(operationKey)){
+            String errMsg = "";
+            errMsg =  PayBillToolUtil.payclose(dynamicObjects);
+            if(!errMsg.isEmpty()) {
+                //将成功错误信息返回到前端
+                e.setCancelMessage(errMsg);
+                e.setCancel(true);
+            }
         }
         }
     }
     }