From e3a407e0d0f7e723d1986707d3e261c8bee3bd1e Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Wed, 6 Aug 2025 23:40:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9=EF=BC=9A?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E6=98=9F=E7=A9=BA=E5=9B=9E=E5=8D=95=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=20=E6=97=B6=E9=97=B4=EF=BC=9A2025-08-06=2023=EF=BC=9A?= =?UTF-8?q?40=20=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=82=B9=E6=B1=9F?= =?UTF-8?q?=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shkd/sys/sys/mservice/ApiService.java | 30 +- .../sys/plugin/form/ApiMappingBillPlugin.java | 110 ++++++-- .../sys/sys/plugin/task/PushTaskPlugin.java | 258 ++++++++++++------ 3 files changed, 277 insertions(+), 121 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java index 2d34593..bd323ad 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/mservice/ApiService.java @@ -1117,9 +1117,19 @@ public class ApiService { logger.info("获取推送单据类型 → billMark:{}", billMark); String xkBillType = null; if ("cas_paybill".equals(billMark)) { - xkBillType = "AP_PAYBILL";// 表单id(付款处理 → 付款单:AP_PAYBILL) + if (billNumber.contains("YHZZ")) { + xkBillType = "CN_BANKTRANSBILL";// 表单id(付款处理 → 银行转账单:) + }else if (billNumber.contains("SKTKD")) { + xkBillType = "AR_REFUNDBILL";// 表单id(付款处理 → 收款退款单:AR_REFUNDBILL) + } else if (billNumber.contains("FKD")) { + xkBillType = "AP_PAYBILL";// 表单id(付款处理 → 付款单:AP_PAYBILL) + } } else if ("cas_recbill".equals(billMark)) { - xkBillType = "AR_RECEIVEBILL";// 表单id(收款处理 → 收款单:AR_RECEIVEBILL) + if (billNumber.contains("FKTKD")) { + xkBillType = "AP_REFUNDBILL";// 表单id(收款处理 → 付款退款单:AP_REFUNDBILL) + } else if (billNumber.contains("SKD")) { + xkBillType = "AR_RECEIVEBILL";// 表单id(收款处理 → 收款单:AR_RECEIVEBILL) + } } else if ("fca_transupbill".equals(billMark)) { xkBillType = "AR_RECEIVEBILL";// 表单id(上划处理 → 收款单:AR_RECEIVEBILL) } else if ("fca_transdownbil".equals(billMark)) { @@ -1270,9 +1280,21 @@ public class ApiService { String entityName = dynamicObject.getDataEntityType().getName(); if ("cas_paybill".equals(entityName)) { - jsonObject.put("FormId", "AP_PAYBILL");// 表单id(付款处理 → 付款单:AP_PAYBILL) + String billNumber = dynamicObject.getString("shkd_businessnumber"); + if (billNumber.contains("YHZZ")) { + jsonObject.put("FormId", "CN_BANKTRANSBILL");// 表单id(付款处理 → 银行转账单:CN_BANKTRANSBILL) + }else if (billNumber.contains("SKTKD")) { + jsonObject.put("FormId", "AR_REFUNDBILL");// 表单id(付款处理 → 收款退款单:AR_REFUNDBILL) + } else if (billNumber.contains("FKD")) { + jsonObject.put("FormId", "AP_PAYBILL");// 表单id(付款处理 → 付款单:AP_PAYBILL) + } } else if ("cas_recbill".equals(entityName)) { - jsonObject.put("FormId", "AR_RECEIVEBILL");// 表单id(收款处理 → 收款单:AR_RECEIVEBILL) + String billNumber = dynamicObject.getString("shkd_businessnumber"); + if (billNumber.contains("FKTKD")) { + jsonObject.put("FormId", "AP_REFUNDBILL");// 表单id(收款处理 → 付款退款单:AP_REFUNDBILL) + } else if (billNumber.contains("SKD")) { + jsonObject.put("FormId", "AR_RECEIVEBILL");// 表单id(收款处理 → 收款单:AR_RECEIVEBILL) + } } else if ("fca_transupbill".equals(entityName)) { jsonObject.put("FormId", "AR_RECEIVEBILL");// 表单id(上划处理 → 收款单:AR_RECEIVEBILL) } else if ("fca_transdownbil".equals(entityName)) { diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java index cdd32c1..3a9b6bd 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/ApiMappingBillPlugin.java @@ -122,20 +122,35 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { if ("shkd_queryxk".equals(itemKey)) { // 获取想要推送单据类型 String billMark = dataEntity.getDynamicObject("shkd_sourcebill").getString("number"); - String billNumber; - HashMap map; - if (!"".equals(dataEntity.getString("shkd_sourcenumber"))) { - // 获取查询的源单单据编码(已推送星空单据) - billNumber = dataEntity.getString("shkd_sourcenumber"); - map = getSKPushXKBill(dataEntity, billMark, billNumber); - } else { - // 获取想要查询星空单据编码 - billNumber = dataEntity.getString("shkd_targetnumber"); - map = getXKPushSKBill(dataEntity, billMark, billNumber); - } - logger.info("获取推送单据编码 → billNumber:{}", billNumber); + String shkd_sourcenumber = dataEntity.getString("shkd_sourcenumber"); - this.getView().showTipNotification("查找到单据 → 星空单据编码:" + map.get("billNumber") + ",星空单据ID:" + map.get("billId")); + // 查询单据对象 + DynamicObject dynamicObject; + + // 查询编码 + String xkBillno = ""; + + if ("cas_paybill".equals(billMark)) { + dynamicObject = BusinessDataServiceHelper.loadSingle(billMark, "id,billno,name,shkd_businessnumber", + new QFilter("billno", QCP.equals, shkd_sourcenumber).toArray());// 表单id(付款处理 → 付款单:AP_PAYBILL) + xkBillno = dynamicObject.getString("shkd_businessnumber"); + } else if ("cas_recbill".equals(billMark)) { + dynamicObject = BusinessDataServiceHelper.loadSingle(billMark, "id,billno,name,shkd_businessnumber", + new QFilter("billno", QCP.equals, shkd_sourcenumber).toArray());// 表单id(收款处理 → 收款单:AR_RECEIVEBILL) + xkBillno = dynamicObject.getString("shkd_businessnumber"); + } else if ("fca_transupbill".equals(billMark)) { + dynamicObject = BusinessDataServiceHelper.loadSingle(billMark, "id,billno,name,shkd_pushxknumber", + new QFilter("billno", QCP.equals, shkd_sourcenumber).toArray());// 表单id(上划处理 → 收款单:AR_RECEIVEBILL) + xkBillno = dynamicObject.getString("shkd_pushxknumber"); + } else if ("fca_transdownbil".equals(billMark)) { + dynamicObject = BusinessDataServiceHelper.loadSingle(billMark, "id,billno,name,shkd_pushxknumber", + new QFilter("billno", QCP.equals, shkd_sourcenumber).toArray());// 表单id(下拨处理 → 付款单:AP_PAYBILL) + xkBillno = dynamicObject.getString("shkd_pushxknumber"); + } + + HashMap resultMap = getXKPushSKBill(dataEntity, billMark, xkBillno); + + this.getView().showTipNotification("查找到单据 → 星空单据编码:" + resultMap.get("billNumber") + ",星空单据ID:" + resultMap.get("billId")); } // 推送星空单据附件 @@ -266,11 +281,11 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { DynamicObject bank_cate = bd_finorginfo[0].getDynamicObject("bank_cate"); if (bank_cate == null) { logger.info("回单:{},银行类别为空,不推送!", dynamicObject.getString("billno")); - }else { + } else { Object bank_name = bank_cate.get("name"); if (bank_name == null || "".equals(bank_name.toString())) { logger.info("回单:{},银行类别为空,不推送!", dynamicObject.getString("billno")); - }else { + } else { logger.info("回单:{},银行类别:{}", dynamicObject.getString("billno"), bank_name); if (bankTypeArray.contains(bank_name.toString())) { // logger.info("获取符合推送条件的单据:{}", dynamicObject.getString("billno")); @@ -299,7 +314,28 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { String shkdSourcenumber = dataEntity.getString("shkd_sourcenumber"); // 查询单据对象 - DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(billMark, "id,billno,name", new QFilter("billno", QCP.equals, shkdSourcenumber).toArray()); + DynamicObject dynamicObject = null; + + // 查询编码 + String xkBillno = ""; + + if ("cas_paybill".equals(billMark)) { + dynamicObject = BusinessDataServiceHelper.loadSingle(billMark, "id,billno,name,shkd_businessnumber", + new QFilter("billno", QCP.equals, shkdSourcenumber).toArray());// 表单id(付款处理 → 付款单:AP_PAYBILL) + xkBillno = dynamicObject.getString("shkd_businessnumber"); + } else if ("cas_recbill".equals(billMark)) { + dynamicObject = BusinessDataServiceHelper.loadSingle(billMark, "id,billno,name,shkd_businessnumber", + new QFilter("billno", QCP.equals, shkdSourcenumber).toArray());// 表单id(收款处理 → 收款单:AR_RECEIVEBILL) + xkBillno = dynamicObject.getString("shkd_businessnumber"); + } else if ("fca_transupbill".equals(billMark)) { + dynamicObject = BusinessDataServiceHelper.loadSingle(billMark, "id,billno,name,shkd_pushxknumber", + new QFilter("billno", QCP.equals, shkdSourcenumber).toArray());// 表单id(上划处理 → 收款单:AR_RECEIVEBILL) + xkBillno = dynamicObject.getString("shkd_pushxknumber"); + } else if ("fca_transdownbil".equals(billMark)) { + dynamicObject = BusinessDataServiceHelper.loadSingle(billMark, "id,billno,name,shkd_pushxknumber", + new QFilter("billno", QCP.equals, shkdSourcenumber).toArray());// 表单id(下拨处理 → 付款单:AP_PAYBILL) + xkBillno = dynamicObject.getString("shkd_pushxknumber"); + } // 获取k3cloudapi K3CloudApi k3CloudApi = getK3CloudApi(dataEntity); @@ -310,16 +346,35 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { if (receiptNos.isEmpty()) { this.getView().showTipNotification("未查询到关联回单"); } else { - HashMap resultMap = getSKPushXKBill(dataEntity, billMark, dynamicObject.getString("billno")); - Map receiptResult = new HashMap<>(); - // 获取回单 - getReceipt(receiptNos.get(0), receiptResult); - String pdfUrl = receiptResult.get("pdfUrl").toString(); - String fileName = receiptResult.get("fileName").toString(); - logger.info(billMark + ":{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址:{}", dynamicObject.getString("billno"), pdfUrl); - // 推送星空附件 - String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); - this.getView().showTipNotification(result); + DynamicObject[] transdetails = BusinessDataServiceHelper.load("bei_transdetail_cas", + "id,billno,receiptno,ismatchereceipt", new QFilter("receiptno", QCP.in, receiptNos) + .and("ismatchereceipt", QCP.equals, "1").toArray()); + logger.info("单据关联回单标记查询:{}条,关联标记匹配回单:{}条", receiptNos.size(), transdetails.length); + if (receiptNos.size() == transdetails.length) { + HashMap resultMap = getXKPushSKBill(dataEntity, billMark, xkBillno); + + if ((boolean) resultMap.get("result")) { + logger.info("推送星空单据信息:{}", resultMap); + StringBuilder builder = new StringBuilder(); + + for (String receiptNo : receiptNos) { + Map receiptResult = new HashMap<>(); + // 获取回单 + getReceipt(receiptNo, receiptResult); + String pdfUrl = receiptResult.get("pdfUrl").toString(); + String fileName = receiptResult.get("fileName").toString(); + logger.info(billMark + ":{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址:{}", dynamicObject.getString("billno"), pdfUrl); + // 推送星空附件 + String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); + builder.append(result).append("\n"); + } + this.getView().showTipNotification(builder.toString()); + } else { + this.getView().showTipNotification("通过反写字段为查找到星空对应单据数据"); + } + } else { + this.getView().showTipNotification("此数据流水未与回单匹配完全,不符合推送条件"); + } } } } @@ -450,7 +505,8 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { "id,bizdate,billno,detailid,oppbank,oppunit,accountbank,description,company,oppbanknumber," + "bankdetailno,transbalance,description,debitamount,creditamount,shkd_pushstatus," + "shkd_businessnumber,shkd_businessid,shkd_businessname,recedbillentry,receiptno," + - "recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber,recedbillentry.e_recedbillid" + "recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber,recedbillentry.e_recedbillid," + + "bankcheckflag" , new QFilter("billno", QCP.equals, billNumber).toArray()); billObject = objects3[0]; logger.info("获取银企交易明细查询推送对象 → billObject:{}", billObject); diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java index 56f98f6..d1dd45f 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/task/PushTaskPlugin.java @@ -145,7 +145,12 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { * 收款 → 先有流水 后有单据 */ case "bei_transdetail_cas": - DynamicObject[] objects3 = BusinessDataServiceHelper.load("bei_transdetail_cas", "id,bizdate,billno,detailid,oppbank,oppunit,accountbank,description,company,oppbanknumber,bankdetailno,transbalance,description,debitamount,creditamount,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname,recedbillentry,receiptno,recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber,recedbillentry.e_recedbillid" + DynamicObject[] objects3 = BusinessDataServiceHelper.load("bei_transdetail_cas", + "id,bizdate,billno,detailid,oppbank,oppunit,accountbank,description,company," + + "oppbanknumber,bankdetailno,transbalance,description,debitamount,creditamount," + + "shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," + + "recedbillentry,receiptno,recedbillentry.e_recedbilltype,recedbillentry.e_recedbillnumber," + + "recedbillentry.e_recedbillid,bankcheckflag" , new QFilter("bizdate", QCP.large_equals, getAdjustedFirstDayOfCurrentMonth()) .and("shkd_pushstatus", QCP.not_equals, "已推送").toArray()); @@ -225,11 +230,11 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { DynamicObject bank_cate = bd_finorginfo[0].getDynamicObject("bank_cate"); if (bank_cate == null) { logger.info("回单:{},银行类别为空,不推送!", dynamicObject.getString("billno")); - }else{ + } else { Object bank_name = bank_cate.get("name"); if (bank_name == null) { logger.info("回单:{},银行类别为空,不推送!", dynamicObject.getString("billno")); - }else { + } else { logger.info("回单:{},银行类别:{}", dynamicObject.getString("billno"), bank_name); if (bankTypeArray.contains(bank_name.toString())) { String result = paymentSlipsJson(dynamicObject, "BIP", dynamicObjectList, null); @@ -250,14 +255,6 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { * 改造 */ case "bei_xkfile": - ArrayList paymentObjects = new ArrayList<>(); //所有符合条件存在电子回单的付款单 - ArrayList receivableObjects = new ArrayList<>(); //所有符合条件存在电子回单的收款单 - ArrayList TopObjects = new ArrayList<>(); //所有符合条件存在电子回单的上划单 - ArrayList AllocatedObjects = new ArrayList<>(); //所有符合条件存在电子回单的下拨单 - - - HashMap resultMap = null; - DynamicObject[] shkd_apimappings = BusinessDataServiceHelper.load("shkd_apimapping", "id,billno," + "shkd_name,shkd_sourcenumber,shkd_domainname,shkd_appkey,shkd_appsecret,shkd_token,shkd_url,shkd_bodytype," + "shkd_sourcebill,shkd_targetsystem,entryentity,entryentity.shkd_tarfield,entryentity.shkd_tartier," + @@ -278,7 +275,7 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { orgIds.add(orgData.getLong("fbasedataid_Id")); } - // 筛选选出(未推送过回单、我们推送他们、他们推送我们的付款单) + // 初步筛选 - (未推送过回单、付款状态为已付款、属于宏明的组织的付款单) - 付款单 DynamicObject[] objects5 = BusinessDataServiceHelper.load("cas_paybill", "id," + "billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,entry.e_actamt,settletype," + "payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," + @@ -288,48 +285,60 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { .and("billstatus", QCP.equals, "D") .and("org", QCP.in, orgIds).toArray()); + + // 第二次筛选 - (有反写字段、有回单、且所有回单匹配完全、星空单据存在) - 付款单 for (DynamicObject dynamicObject : objects5) { - // 星空推送司库单据 + // 没有反写字段(shkd_businessnumber)的不推送 Object shkdBusinessnumber = dynamicObject.get("shkd_businessnumber"); - if (shkdBusinessnumber != null && shkdBusinessnumber != "") { - resultMap = getXKPushSKBill(xkApiMapping, dynamicObject.getDataEntityType().getName(), dynamicObject.getString("shkd_businessnumber")); - if ((boolean) resultMap.get("result")) { - paymentObjects.add(dynamicObject); - logger.info("付款处理:{},为星空推送司库单据,星空单据编码:{}", dynamicObject.getString("billno"), shkdBusinessnumber); - } - } else { - resultMap = getSKPushXKBill(xkApiMapping, dynamicObject.getDataEntityType().getName(), dynamicObject.getString("billno")); - if ((boolean) resultMap.get("result")) { - paymentObjects.add(dynamicObject); - logger.info("付款处理:{},为司库推送星空单据,星空单据编码:{}", dynamicObject.getString("billno"), resultMap.get("billNumber")); - } + if (shkdBusinessnumber == null || "".equals(shkdBusinessnumber.toString())) { + logger.info("付款处理:{},shkd_businessnumber(星空推送编码)字段为空,不推送", dynamicObject.getString("billno")); + continue; } - } - - // 筛选出符合条件的付款单,查询是否有回单,如果有则推送 - for (DynamicObject dynamicObject : paymentObjects) { + // 联查不到回单标记的不推送 List receiptNos = HandLinkBillHelper.getReceiptNoByDetails(dynamicObject, dynamicObject.getDataEntityType().getName()); if (receiptNos.isEmpty()) { - logger.info("付款单:{},无回单", dynamicObject.getString("billno")); - } else { + logger.info("付款单:{},无回单,不推送", dynamicObject.getString("billno")); + continue; + } + + // 存在回单未匹配的不推送 + DynamicObject[] transdetails = BusinessDataServiceHelper.load("bei_transdetail_cas", + "id,billno,receiptno,ismatchereceipt", new QFilter("receiptno", QCP.in, receiptNos) + .and("ismatchereceipt", QCP.equals, "1").toArray()); + if (receiptNos.size() != transdetails.length) { + logger.info("付款单:{},回单未完全匹配,不推送", dynamicObject.getString("billno")); + continue; + } + + // 通过反写字段未找到星空单据的不推送 + HashMap resultMap = getXKPushSKBill(xkApiMapping, dynamicObject.getDataEntityType().getName(), dynamicObject.getString("shkd_businessnumber")); + if (!(boolean) resultMap.get("result")) { + logger.info("付款处理:{},通过反写的星空编码字段未查找星空对应单据", dynamicObject.getString("billno")); + continue; + } + + StringBuilder builder = new StringBuilder(); + for (String receiptNo : receiptNos) { Map receiptResult = new HashMap<>(); // 获取回单 - getReceipt(receiptNos.get(0), receiptResult); + getReceipt(receiptNo, receiptResult); String pdfUrl = receiptResult.get("pdfUrl").toString(); String fileName = receiptResult.get("fileName").toString(); logger.info("付款单:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址:{}", dynamicObject.getString("billno"), pdfUrl); // 推送星空附件 String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); - if (result.contains("推送星空成功")) { - dynamicObject.set("shkd_xkfilestatus", "已推送"); - SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); - } + builder.append(result).append("\n"); + } + logger.info("付款单:{},电子回单推送星空结果:{}", dynamicObject.getString("billno"), builder.toString()); + if (!builder.toString().contains("电子回单推送星空失败")) { + dynamicObject.set("shkd_xkfilestatus", "已推送"); + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); } } - // 收款处理 + // 初步筛选 - (未推送过回单、收款状态为已付款、属于宏明的组织的收款单) - 收款处理 DynamicObject[] objects6 = BusinessDataServiceHelper.load("cas_recbill", "id,billno,entry,entry.e_expenseitem,settletype,entry.e_remark,receivingtype," + "payertype,org,bizdate,accountbank,payernumber,actrecamt,txt_description,shkd_pushstatus," + @@ -338,105 +347,174 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { .and("billstatus", QCP.equals, "D") .and("org", QCP.in, orgIds).toArray()); + // 第二次筛选 - (有反写字段、有回单、且所有回单匹配完全、星空单据存在) - 收款单 for (DynamicObject dynamicObject : objects6) { - // 只有司库推送星空业务 - resultMap = getSKPushXKBill(xkApiMapping, dynamicObject.getDataEntityType().getName(), dynamicObject.getString("billno")); - if ((boolean) resultMap.get("result")) { - receivableObjects.add(dynamicObject); - logger.info("付款处理:{},为司库推送星空单据,星空单据编码:{}", dynamicObject.getString("billno"), resultMap.get("billNumber")); - } - } - for (DynamicObject dynamicObject : receivableObjects) { + // 没有反写字段(shkd_businessnumber)的不推送 + Object shkdBusinessnumber = dynamicObject.get("shkd_businessnumber"); + if (shkdBusinessnumber == null || "".equals(shkdBusinessnumber.toString())) { + logger.info("收款处理:{},shkd_businessnumber(星空推送编码)字段为空,不推送", dynamicObject.getString("billno")); + continue; + } + + // 联查不到回单标记的不推送 List receiptNos = HandLinkBillHelper.getReceiptNoByDetails(dynamicObject, dynamicObject.getDataEntityType().getName()); if (receiptNos.isEmpty()) { - logger.info("收款单:{},无匹配回单", dynamicObject.getString("billno")); - } else { + logger.info("收款单:{},无关联回单,不推送", dynamicObject.getString("billno")); + continue; + } + + // 存在回单未匹配的不推送 + DynamicObject[] transdetails = BusinessDataServiceHelper.load("bei_transdetail_cas", + "id,billno,receiptno,ismatchereceipt", new QFilter("receiptno", QCP.in, receiptNos) + .and("ismatchereceipt", QCP.equals, "1").toArray()); + if (receiptNos.size() != transdetails.length) { + logger.info("收款单:{},回单未完全匹配,不推送", dynamicObject.getString("billno")); + continue; + } + + // 通过反写字段未找到星空单据的不推送 + HashMap resultMap = getXKPushSKBill(xkApiMapping, dynamicObject.getDataEntityType().getName(), dynamicObject.getString("shkd_businessnumber")); + if (!(boolean) resultMap.get("result")) { + logger.info("收款处理:{},通过反写的星空编码字段未查找星空对应单据", dynamicObject.getString("billno")); + continue; + } + + StringBuilder builder = new StringBuilder(); + + for (String receiptNo : receiptNos) { Map receiptResult = new HashMap<>(); // 获取回单 - getReceipt(receiptNos.get(0), receiptResult); + getReceipt(receiptNo, receiptResult); String pdfUrl = receiptResult.get("pdfUrl").toString(); String fileName = receiptResult.get("fileName").toString(); logger.info("收款单:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址:{}", dynamicObject.getString("billno"), pdfUrl); // 推送星空附件 String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); - if (result.contains("推送星空成功")) { - dynamicObject.set("shkd_xkfilestatus", "已推送"); - SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); - } + builder.append(result).append("\n"); + } + + if (!builder.toString().contains("电子回单推送星空失败")) { + dynamicObject.set("shkd_xkfilestatus", "已推送"); + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); } } - // 上划处理 + // 初步筛选 - (未推送过回单、付款状态为已付款、组织为000021(成都宏明电子股份有限公司)的上划处理) - 上划处理 DynamicObject[] objects7 = BusinessDataServiceHelper.load("fca_transupbill", - "id,billno,shkd_pushxknumber,shkd_xkfilestatus,company", - new QFilter("shkd_pushxknumber", QCP.not_equals, "") - .and("shkd_xkfilestatus", QCP.not_equals, "已推送") - .and("company", QCP.equals, "").toArray()); + "id,billno,shkd_pushxknumber,shkd_xkfilestatus,company,billstatus", + new QFilter("shkd_xkfilestatus", QCP.not_equals, "已推送") + .and("billstatus", QCP.equals, "D") + .and("company", QCP.equals, "2122671180270829568").toArray()); + // 第二次筛选 - (有反写字段、有回单、且所有回单匹配完全、星空单据存在) - 上划处理 for (DynamicObject dynamicObject : objects7) { - // 只有司库推送星空业务 - resultMap = getSKPushXKBill(xkApiMapping, dynamicObject.getDataEntityType().getName(), dynamicObject.getString("billno")); - if ((boolean) resultMap.get("result")) { - TopObjects.add(dynamicObject); - logger.info("上划处理:{},为司库推送星空单据,星空单据编码:{}", dynamicObject.getString("billno"), resultMap.get("billNumber")); + // 没有反写字段(shkd_pushxknumber)的不推送 + Object shkd_pushxknumber = dynamicObject.get("shkd_pushxknumber"); + if (shkd_pushxknumber == null || "".equals(shkd_pushxknumber.toString())) { + logger.info("上划处理:{},shkd_pushxknumber(推送星空编码)字段为空,不推送", dynamicObject.getString("billno")); + continue; } - } - for (DynamicObject dynamicObject : TopObjects) { + // 联查不到回单标记的不推送 List receiptNos = HandLinkBillHelper.getReceiptNoByDetails(dynamicObject, dynamicObject.getDataEntityType().getName()); if (receiptNos.isEmpty()) { - logger.info("上划处理:{},无匹配回单", dynamicObject.getString("billno")); - } else { + logger.info("上划处理:{},无关联回单,不推送", dynamicObject.getString("billno")); + continue; + } + + // 存在回单未匹配的不推送 + DynamicObject[] transdetails = BusinessDataServiceHelper.load("bei_transdetail_cas", + "id,billno,receiptno,ismatchereceipt", new QFilter("receiptno", QCP.in, receiptNos) + .and("ismatchereceipt", QCP.equals, "1").toArray()); + if (receiptNos.size() != transdetails.length) { + logger.info("上划处理:{},回单未完全匹配,不推送", dynamicObject.getString("billno")); + continue; + } + + // 通过反写字段未找到星空单据的不推送 + HashMap resultMap = getXKPushSKBill(xkApiMapping, dynamicObject.getDataEntityType().getName(), dynamicObject.getString("shkd_pushxknumber")); + if (!(boolean) resultMap.get("result")) { + logger.info("上划处理:{},通过反写的星空编码字段未查找星空对应单据", dynamicObject.getString("billno")); + continue; + } + + StringBuilder builder = new StringBuilder(); + + for (String receiptNo : receiptNos) { Map receiptResult = new HashMap<>(); // 获取回单 - getReceipt(receiptNos.get(0), receiptResult); + getReceipt(receiptNo, receiptResult); String pdfUrl = receiptResult.get("pdfUrl").toString(); String fileName = receiptResult.get("fileName").toString(); logger.info("上划处理:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址:{}", dynamicObject.getString("billno"), pdfUrl); // 推送星空附件 String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); - if (result.contains("推送星空成功")) { - dynamicObject.set("shkd_xkfilestatus", "已推送"); - SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); - } + builder.append(result).append("\n"); + } + if (!builder.toString().contains("电子回单推送星空失败")) { + dynamicObject.set("shkd_xkfilestatus", "已推送"); + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); } } - // 下拨处理 + // 初步筛选 - (未推送过回单、付款状态为已付款、组织为000021(成都宏明电子股份有限公司)的下拨处理) - 下拨处理 DynamicObject[] objects8 = BusinessDataServiceHelper.load("fca_transdownbil", - "id,billno,shkd_pushxknumber,shkd_xkfilestatus,company", - new QFilter("shkd_pushxknumber", QCP.not_equals, "") - .and("shkd_xkfilestatus", QCP.not_equals, "已推送") - .and("company", QCP.equals, "").toArray()); + "id,billno,shkd_pushxknumber,shkd_xkfilestatus,company,billstatus", + new QFilter("shkd_xkfilestatus", QCP.not_equals, "已推送") + .and("billstatus", QCP.equals, "D") + .and("company", QCP.equals, "2122671180270829568").toArray()); + // 第二次筛选 - (有反写字段、有回单、且所有回单匹配完全、星空单据存在) - 下拨处理 for (DynamicObject dynamicObject : objects8) { - // 只有司库推送星空业务 - resultMap = getSKPushXKBill(xkApiMapping, dynamicObject.getDataEntityType().getName(), dynamicObject.getString("billno")); - if ((boolean) resultMap.get("result")) { - AllocatedObjects.add(dynamicObject); - logger.info("下拨处理:{},为司库推送星空单据,星空单据编码:{}", dynamicObject.getString("billno"), resultMap.get("billNumber")); + // 没有反写字段(shkd_pushxknumber)的不推送 + Object shkd_pushxknumber = dynamicObject.get("shkd_pushxknumber"); + if (shkd_pushxknumber == null || "".equals(shkd_pushxknumber.toString())) { + logger.info("下拨处理:{},shkd_pushxknumber(推送星空编码)字段为空,不推送", dynamicObject.getString("billno")); + continue; } - } - for (DynamicObject dynamicObject : AllocatedObjects) { + // 联查不到回单标记的不推送 List receiptNos = HandLinkBillHelper.getReceiptNoByDetails(dynamicObject, dynamicObject.getDataEntityType().getName()); if (receiptNos.isEmpty()) { - logger.info("下拨处理:{},无匹配回单", dynamicObject.getString("billno")); - } else { + logger.info("下拨处理:{},无关联回单,不推送", dynamicObject.getString("billno")); + continue; + } + + // 存在回单未匹配的不推送 + DynamicObject[] transdetails = BusinessDataServiceHelper.load("bei_transdetail_cas", + "id,billno,receiptno,ismatchereceipt", new QFilter("receiptno", QCP.in, receiptNos) + .and("ismatchereceipt", QCP.equals, "1").toArray()); + if (receiptNos.size() != transdetails.length) { + logger.info("下拨处理:{},回单未完全匹配,不推送", dynamicObject.getString("billno")); + continue; + } + + // 通过反写字段未找到星空单据的不推送 + HashMap resultMap = getXKPushSKBill(xkApiMapping, dynamicObject.getDataEntityType().getName(), dynamicObject.getString("shkd_pushxknumber")); + if (!(boolean) resultMap.get("result")) { + logger.info("下拨处理:{},通过反写的星空编码字段未查找星空对应单据", dynamicObject.getString("billno")); + continue; + } + + StringBuilder builder = new StringBuilder(); + + for (String receiptNo : receiptNos) { Map receiptResult = new HashMap<>(); // 获取回单 - getReceipt(receiptNos.get(0), receiptResult); + getReceipt(receiptNo, receiptResult); String pdfUrl = receiptResult.get("pdfUrl").toString(); String fileName = receiptResult.get("fileName").toString(); logger.info("下拨处理:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址:{}", dynamicObject.getString("billno"), pdfUrl); // 推送星空附件 String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); - if (result.contains("推送星空成功")) { - dynamicObject.set("shkd_xkfilestatus", "已推送"); - SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); - } + builder.append(result).append("\n"); + } + + if (!builder.toString().contains("电子回单推送星空失败")) { + dynamicObject.set("shkd_xkfilestatus", "已推送"); + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); } } break;