From f7c4bc11a324ca77354b8cb1b023473740c2aeab Mon Sep 17 00:00:00 2001 From: zoujiangtao Date: Fri, 25 Jul 2025 15:33:49 +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=E7=94=B5=E5=AD=90=E5=9B=9E?= =?UTF-8?q?=E5=8D=95=E6=95=B4=E4=BD=93=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=20=E6=97=B6=E9=97=B4=EF=BC=9A2025-07-25=2015=EF=BC=9A33=20?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=82=B9=E6=B1=9F=E6=B6=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shkd/sys/sys/mservice/ApiService.java | 82 +++++++++++++- .../sys/plugin/form/ApiMappingBillPlugin.java | 69 +++++------- .../sys/sys/plugin/task/PushTaskPlugin.java | 103 ++++-------------- 3 files changed, 130 insertions(+), 124 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 d490f1a..34c20c5 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 @@ -328,7 +328,7 @@ public class ApiService { logger.info("付款处理(支付结果) → BIP推送接口 → 成功\n成功单据编号:{}\n成功请求体:{}\n推送成功接口返回数据:{}", dynamic.getString("billno"), saveRequestBody, saveResponseBody); - result = "推送 → 付款处理(支付结果) → 成功,返回信息:"; + result = "推送 → 付款处理(支付结果) → 成功,返回信息:" + JSON.parseObject(saveResponseBody).getString("message"); } else { // LogService.newLog("ERROR", "付款单(结算结果)", dynamic.getString("billno"), "付款处理(支付结果) → BIP推送接口 → 失败", "请求数据:" + saveRequestBody + "\n推送失败接口返回数据:" + saveResponseBody); @@ -1152,7 +1152,7 @@ public class ApiService { } /** - * 推送星空单据附件 + * 推送星空单据附件(测试推送附件 → 此附件为API映射元数据的单据附件) * @param dataEntity API映射元数据对象 * @return */ @@ -1225,4 +1225,82 @@ public class ApiService { } return attachments; } + + + /** + * 获取付款单、收款单、上划单、下拨单关联的回单附件地址 + * + * @param receiptNo 回单编号 + * @param resultMap 回单信息 + * @return + */ + public static void getReceipt(String receiptNo, Map resultMap) { + DynamicObject[] bei_elecreceipts = BusinessDataServiceHelper.load("bei_elecreceipt", "id,receiptno", new QFilter("receiptno", QCP.equals, receiptNo).toArray()); + DynamicObject bei_elecreceipt = BusinessDataServiceHelper.loadSingle(bei_elecreceipts[0].getPkValue(), bei_elecreceipts[0].getDynamicObjectType().getName()); + IFormView viewByDynamicObj = createViewByDynamicObj(bei_elecreceipt); + List errMsgList = new ArrayList<>(); + DynamicObjectCollection receipts = QueryServiceHelper.query("bei_elecreceipt", "id,bank," + + "fileflag,filepath,biztype,bankcheckflag,fileserverurl,tcpurl,uploadfilename,username,password," + + "bank.bank_cate bankcate", new QFilter[]{new QFilter("id", QCP.equals, bei_elecreceipt.getPkValue())}); + String pdfUrl = getPdfUrl(viewByDynamicObj.getPageId(), receipts, errMsgList); + + Path path = Paths.get(bei_elecreceipt.getString("filepath")); + String upfileName = path.getFileName().toString(); + resultMap.put("pdfUrl", pdfUrl); + resultMap.put("fileName", upfileName); + } + + /** + * 推送星空回单附件 + * + * @param dynamicObject 星瀚单据 + * @param pdfUrl 星瀚回单附件地址 + * @param fileName 星瀚回单附件名称 + * @param resultMap 查询星空单据结果(编码,id) + * @param k3CloudApi 星瀚接口访问实例对象 + * @return + */ + public static String pushXkAttachment(DynamicObject dynamicObject, String pdfUrl, String fileName, Map resultMap, K3CloudApi k3CloudApi) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("FileName", fileName);// 文件名 + + String entityName = dynamicObject.getDataEntityType().getName(); + if ("cas_paybill".equals(entityName)) { + jsonObject.put("FormId", "AP_PAYBILL");// 表单id(付款处理 → 付款单:AP_PAYBILL) + } else if ("cas_recbill".equals(entityName)) { + 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)) { + jsonObject.put("FormId", "AP_PAYBILL");// 表单id(下拨处理 → 付款单:AP_PAYBILL) + } + + jsonObject.put("IsLast", true);// 是否最后一次上传 + jsonObject.put("InterId", resultMap.get("billId"));// 单据内码 + jsonObject.put("BillNO", resultMap.get("billNumber"));// 单据编码 + jsonObject.put("AliasFileName", fileName);// 附件别名 + jsonObject.put("SendByte", attachmentBase64(pdfUrl));// 文件字节数组转base64后的字符串 + + String uploadAttachmentResult; + try { + uploadAttachmentResult = k3CloudApi.attachmentUpload(jsonObject.toString()); + JSONObject resultJson = JSON.parseObject(uploadAttachmentResult); + JSONObject Result = resultJson.getJSONObject("Result"); + JSONObject ResponseStatus = Result.getJSONObject("ResponseStatus"); + Boolean isSuccess = ResponseStatus.getBoolean("IsSuccess"); + if (isSuccess) { + logger.info(entityName + " → 电子回单推送星空成功,单据编码:" + dynamicObject.getString("billno") + "\n附件上传结果:" + uploadAttachmentResult); + return entityName + " → 电子回单推送星空成功,单据编码:" + dynamicObject.getString("billno") + + " → 附件上传结果:" + uploadAttachmentResult; + } else { + logger.info(entityName + " → 电子回单推送星空失败,单据编码:" + dynamicObject.getString("billno") + "\n附件上传结果:" + uploadAttachmentResult); + return entityName + " → 电子回单推送星空失败,单据编码:" + dynamicObject.getString("billno") + + " → 附件上传结果:" + uploadAttachmentResult; + } + } catch (Exception e) { + logger.info(entityName + " → 电子回单推送星空失败,单据编码:" + dynamicObject.getString("billno") + "\nk3CloudApi.attachmentUpload(jsonObject.toString())报错:" + e.getMessage()); + return entityName + " → 电子回单推送星空失败,单据编码:" + dynamicObject.getString("billno") + + " → k3CloudApi.attachmentUpload(jsonObject.toString())报错:" + e.getMessage(); + } + } } \ No newline at end of file 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 317e129..f0e7df0 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 @@ -3,7 +3,6 @@ package shkd.sys.sys.plugin.form; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.kingdee.bos.webapi.entity.IdentifyInfo; import com.kingdee.bos.webapi.sdk.K3CloudApi; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; @@ -211,46 +210,38 @@ public class ApiMappingBillPlugin extends AbstractFormPlugin implements Plugin { } } - // 查询上划单的回单编号 - if ("shkd_upbill".equals(itemKey)) { + // 补偿推送星空电子回单 + // 补偿方案(推送BIP电子回单) + if ("shkd_compensatexk".equals(itemKey)) { + // 推送单据类型 + String billMark = dataEntity.getDynamicObject("shkd_sourcebill").getString("number"); + + // 推送单据编码 String shkdSourcenumber = dataEntity.getString("shkd_sourcenumber"); - DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("fca_transupbill", "id,billno,name", new QFilter("billno", QCP.equals, shkdSourcenumber).toArray()); + + // 查询单据对象 + DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(billMark, "id,billno,name", new QFilter("billno", QCP.equals, shkdSourcenumber).toArray()); + + // 获取k3cloudapi + K3CloudApi k3CloudApi = getK3CloudApi(dataEntity); + + // 获取关联的回单编号 List receiptNos = HandLinkBillHelper.getReceiptNoByDetails(dynamicObject, dynamicObject.getDataEntityType().getName()); - logger.info("上划单回单编号:{}", receiptNos);//电子回单号 - - DynamicObject[] bei_elecreceipts = BusinessDataServiceHelper.load("bei_elecreceipt", "id,receiptno", new QFilter("receiptno", QCP.equals, receiptNos.get(0)).toArray()); - DynamicObject bei_elecreceipt = BusinessDataServiceHelper.loadSingle(bei_elecreceipts[0].getPkValue(), bei_elecreceipts[0].getDynamicObjectType().getName()); - IFormView viewByDynamicObj = createViewByDynamicObj(bei_elecreceipt); - List errMsgList = new ArrayList<>(); - DynamicObjectCollection receipts = QueryServiceHelper.query("bei_elecreceipt", "id,bank," + - "fileflag,filepath,biztype,bankcheckflag,fileserverurl,tcpurl,uploadfilename,username,password," + - "bank.bank_cate bankcate", new QFilter[]{new QFilter("id", QCP.equals, bei_elecreceipt.getPkValue())}); - String pdfUrl = getPdfUrl(viewByDynamicObj.getPageId(), receipts, errMsgList); - - Path path = Paths.get(bei_elecreceipt.getString("filepath")); - String upfileName = path.getFileName().toString(); - this.getView().showTipNotification("上划单回单编号:" + receiptNos.get(0) + ",电子回单查询 → 获取pdf地址:" + pdfUrl); - } - // 查询下拨单的回单编号 - if ("shkd_dowbill".equals(itemKey)) { - String shkdSourcenumber = dataEntity.getString("shkd_sourcenumber"); - // 这个方法可以查询(付款单、收款单、上划单、下拨单关联的回单编号) - DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("fca_transdownbill", "id,billno,name", new QFilter("billno", QCP.equals, shkdSourcenumber).toArray()); - List receiptNos = HandLinkBillHelper.getReceiptNoByDetails(dynamicObject, dynamicObject.getDataEntityType().getName()); - logger.info("下拨单回单编号:{}", receiptNos); - - DynamicObject[] bei_elecreceipts = BusinessDataServiceHelper.load("bei_elecreceipt", "id,receiptno", new QFilter("receiptno", QCP.equals, receiptNos.get(0)).toArray()); - DynamicObject bei_elecreceipt = BusinessDataServiceHelper.loadSingle(bei_elecreceipts[0].getPkValue(), bei_elecreceipts[0].getDynamicObjectType().getName()); - IFormView viewByDynamicObj = createViewByDynamicObj(bei_elecreceipt); - List errMsgList = new ArrayList<>(); - DynamicObjectCollection receipts = QueryServiceHelper.query("bei_elecreceipt", "id,bank," + - "fileflag,filepath,biztype,bankcheckflag,fileserverurl,tcpurl,uploadfilename,username,password," + - "bank.bank_cate bankcate", new QFilter[]{new QFilter("id", QCP.equals, bei_elecreceipt.getPkValue())}); - String pdfUrl = getPdfUrl(viewByDynamicObj.getPageId(), receipts, errMsgList); - - Path path = Paths.get(bei_elecreceipt.getString("filepath")); - String upfileName = path.getFileName().toString(); - this.getView().showTipNotification("上划单回单编号:" + receiptNos.get(0) + ",电子回单查询 → 获取pdf地址:" + pdfUrl); + logger.info(billMark + " → 关联回单编号:{}", receiptNos);//电子回单号 + 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); + } } } 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 ab60106..8a195fb 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 @@ -1,31 +1,24 @@ package shkd.sys.sys.plugin.task; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.kingdee.bos.qing.util.DateUtils; import com.kingdee.bos.webapi.sdk.K3CloudApi; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.exception.KDException; -import kd.bos.form.IFormView; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; import kd.bos.servicehelper.BusinessDataServiceHelper; -import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.sdk.plugin.Plugin; import kd.tmc.fca.common.helper.HandLinkBillHelper; import shkd.sys.sys.mservice.ApiService; -import java.nio.file.Path; -import java.nio.file.Paths; import java.text.ParseException; import java.time.LocalDate; -import java.time.Month; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; @@ -308,7 +301,11 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { String fileName = receiptResult.get("fileName").toString(); logger.info("付款单:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址:{}", dynamicObject.getString("billno"), pdfUrl); // 推送星空附件 - pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); + String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); + if (result.contains("推送星空成功")) { + dynamicObject.set("shkd_xkfilestatus", "已推送"); + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); + } } } @@ -343,7 +340,11 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { String fileName = receiptResult.get("fileName").toString(); logger.info("收款单:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址:{}", dynamicObject.getString("billno"), pdfUrl); // 推送星空附件 - pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); + String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); + if (result.contains("推送星空成功")) { + dynamicObject.set("shkd_xkfilestatus", "已推送"); + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); + } } } @@ -375,7 +376,11 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { String fileName = receiptResult.get("fileName").toString(); logger.info("上划处理:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址:{}", dynamicObject.getString("billno"), pdfUrl); // 推送星空附件 - pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); + String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); + if (result.contains("推送星空成功")) { + dynamicObject.set("shkd_xkfilestatus", "已推送"); + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); + } } } @@ -408,7 +413,11 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { String fileName = receiptResult.get("fileName").toString(); logger.info("下拨处理:{},电子回单查询 → 电子回单附件推送接口 → 获取pdf地址:{}", dynamicObject.getString("billno"), pdfUrl); // 推送星空附件 - pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); + String result = pushXkAttachment(dynamicObject, pdfUrl, fileName, resultMap, k3CloudApi); + if (result.contains("推送星空成功")) { + dynamicObject.set("shkd_xkfilestatus", "已推送"); + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); + } } } break; @@ -473,76 +482,4 @@ public class PushTaskPlugin extends AbstractTask implements Plugin { return Date.from(firstDayOfMonth.atStartOfDay(DEFAULT_ZONE).toInstant()); } } - - - /** - * 获取付款单、收款单、上划单、下拨单关联的回单附件地址 - * - * @param receiptNo 回单编号 - * @param resultMap 回单信息 - * @return - */ - private static void getReceipt(String receiptNo, Map resultMap) { - DynamicObject[] bei_elecreceipts = BusinessDataServiceHelper.load("bei_elecreceipt", "id,receiptno", new QFilter("receiptno", QCP.equals, receiptNo).toArray()); - DynamicObject bei_elecreceipt = BusinessDataServiceHelper.loadSingle(bei_elecreceipts[0].getPkValue(), bei_elecreceipts[0].getDynamicObjectType().getName()); - IFormView viewByDynamicObj = createViewByDynamicObj(bei_elecreceipt); - List errMsgList = new ArrayList<>(); - DynamicObjectCollection receipts = QueryServiceHelper.query("bei_elecreceipt", "id,bank," + - "fileflag,filepath,biztype,bankcheckflag,fileserverurl,tcpurl,uploadfilename,username,password," + - "bank.bank_cate bankcate", new QFilter[]{new QFilter("id", QCP.equals, bei_elecreceipt.getPkValue())}); - String pdfUrl = getPdfUrl(viewByDynamicObj.getPageId(), receipts, errMsgList); - - Path path = Paths.get(bei_elecreceipt.getString("filepath")); - String upfileName = path.getFileName().toString(); - resultMap.put("pdfUrl", pdfUrl); - resultMap.put("fileName", upfileName); - } - - /** - * 推送星空回单附件 - * - * @param dynamicObject 星瀚单据 - * @param pdfUrl 星瀚回单附件地址 - * @param fileName 星瀚回单附件名称 - * @param resultMap 查询星空单据结果(编码,id) - * @param k3CloudApi 星瀚接口访问实例对象 - * @return - */ - private static void pushXkAttachment(DynamicObject dynamicObject, String pdfUrl, String fileName, Map resultMap, K3CloudApi k3CloudApi) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("FileName", fileName);// 文件名 - - String entityName = dynamicObject.getDataEntityType().getName(); - if ("cas_paybill".equals(entityName)) { - jsonObject.put("FormId", "AP_PAYBILL");// 表单id(付款处理 → 付款单:AP_PAYBILL) - } else if ("cas_recbill".equals(entityName)) { - 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)) { - jsonObject.put("FormId", "AP_PAYBILL");// 表单id(下拨处理 → 付款单:AP_PAYBILL) - } - - jsonObject.put("IsLast", true);// 是否最后一次上传 - jsonObject.put("InterId", resultMap.get("billId"));// 单据内码 - jsonObject.put("BillNO", resultMap.get("billNumber"));// 单据编码 - jsonObject.put("AliasFileName", fileName);// 附件别名 - jsonObject.put("SendByte", attachmentBase64(pdfUrl));// 文件字节数组转base64后的字符串 - - String uploadAttachmentResult; - try { - uploadAttachmentResult = k3CloudApi.attachmentUpload(jsonObject.toString()); - JSONObject resultJson = JSON.parseObject(uploadAttachmentResult); - JSONObject Result = resultJson.getJSONObject("Result"); - JSONObject ResponseStatus = Result.getJSONObject("ResponseStatus"); - Boolean isSuccess = ResponseStatus.getBoolean("IsSuccess"); - if (isSuccess) { - dynamicObject.set("shkd_xkfilestatus", "已推送"); - logger.info(entityName + " → 电子回单推送星空,单据编码:" + dynamicObject.getString("billno") + "\n附件上传结果:" + uploadAttachmentResult); - SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - } } \ No newline at end of file