From e15d0451ed0e00246f28cfdf5311736d3d4ae7e3 Mon Sep 17 00:00:00 2001 From: Tao Date: Mon, 15 Dec 2025 11:10:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=82=B9?= =?UTF-8?q?=E6=B1=9F=E6=B6=9B=20=E6=97=B6=E9=97=B4=EF=BC=9A2025-12-15=2011?= =?UTF-8?q?=EF=BC=9A09=20=E6=8F=90=E4=BA=A4=E5=86=85=E5=AE=B9=EF=BC=9ABIP?= =?UTF-8?q?=E6=89=93=E5=9B=9E=E5=A2=9E=E5=8A=A0=E7=BB=88=E6=AD=A2=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E9=87=8D=E8=AF=95=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../list/PaymentProcessingListPlugin.java | 123 ++++++++++++------ 1 file changed, 83 insertions(+), 40 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/list/PaymentProcessingListPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/list/PaymentProcessingListPlugin.java index 4ff5681..d1b914c 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/list/PaymentProcessingListPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/list/PaymentProcessingListPlugin.java @@ -17,6 +17,7 @@ import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.bos.servicehelper.workflow.WorkflowServiceHelper; import kd.sdk.plugin.Plugin; import shkd.sys.sys.mservice.ApiService; @@ -63,51 +64,52 @@ public class PaymentProcessingListPlugin extends AbstractListPlugin implements P if (businessname != null) { String shkd_businessname = businessname.toString(); if (("共享系统".equals(shkd_businessname) || "XK".equals(shkd_businessname)) && (("B".equals(billstatus) || "C".equals(billstatus)))) { - try { - abandonByBusienssKey(loadSingle.getPkValue().toString()); - } catch (Exception ignored) { - } - OperationResult operation; - if ("共享系统".equals(shkd_businessname)) { - DynamicObject[] objects = BusinessDataServiceHelper.load("cas_paybill", - "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,acttradedate," + - "payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," + - "org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," + - "billstatus,bankpaystatus", new QFilter("billno", QCP.equals, loadSingle.getString("billno")).toArray()); - List dynamicObjects = new ArrayList<>(); - String pushResult = ApiService.paymentSlipsJson(objects[0], "BIPRE", dynamicObjects, null); - logger.info("result信息:{}", pushResult); - if (pushResult.contains("成功")) { - SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0])); - } else { - String returnResults = extractMessageFromResult(pushResult); - if (!returnResults.isEmpty()) { - this.getView().showTipNotification("打回失败,失败原因:BIP单据" + returnResults); + boolean outcome = whetherToInterruptTheProcess(loadSingle.getPkValue().toString()); + if (outcome) { + OperationResult operation; + if ("共享系统".equals(shkd_businessname)) { + DynamicObject[] objects = BusinessDataServiceHelper.load("cas_paybill", + "id,billno,actpayamt,entry,entry.e_expenseitem,entry.e_remark,settletype,acttradedate," + + "payeebanknum,payeetype,payeenumber,payeracctbank,payeebank,payeebankname,paymenttype," + + "org,bizdate,description,shkd_pushstatus,shkd_businessnumber,shkd_businessid,shkd_businessname," + + "billstatus,bankpaystatus", new QFilter("billno", QCP.equals, loadSingle.getString("billno")).toArray()); + List dynamicObjects = new ArrayList<>(); + String pushResult = ApiService.paymentSlipsJson(objects[0], "BIPRE", dynamicObjects, null); + logger.info("result信息:{}", pushResult); + if (pushResult.contains("成功")) { + SaveServiceHelper.save(dynamicObjects.toArray(new DynamicObject[0])); } else { - this.getView().showTipNotification("打回失败,请找业务老师处理"); + String returnResults = extractMessageFromResult(pushResult); + if (!returnResults.isEmpty()) { + this.getView().showTipNotification("打回失败,失败原因:BIP单据" + returnResults); + } else { + this.getView().showTipNotification("打回失败,请找业务老师处理"); + } + return; } + } + + if ("B".equals(dynamicObject.getString("billstatus"))) { + operation = OperationServiceHelper.executeOperate("unsubmit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create()); + } else if ("C".equals(dynamicObject.getString("billstatus"))) { + operation = OperationServiceHelper.executeOperate("unaudit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create()); + } else { + this.getView().showTipNotification("单据不为已提交或已审核状态,无法打回"); + logger.info("单据:{}打回失败,失败原因:单据不为已提交或已审核状态", billno); return; } - } - - if ("B".equals(dynamicObject.getString("billstatus"))) { - operation = OperationServiceHelper.executeOperate("unsubmit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create()); - } else if ("C".equals(dynamicObject.getString("billstatus"))) { - operation = OperationServiceHelper.executeOperate("unaudit", "cas_paybill", new DynamicObject[]{dynamicObject}, OperateOption.create()); + List allErrorOrValidateInfo = operation.getAllErrorOrValidateInfo(); + if (!allErrorOrValidateInfo.isEmpty()) { + this.getView().showTipNotification("打回失败,失败原因:撤销(反审核)操作失败 → " + allErrorOrValidateInfo.get(0).getMessage()); + logger.info("单据:{}打回失败,失败原因:撤销(反审核)操作失败 → " + allErrorOrValidateInfo.get(0).getMessage()); + return; + } else { + this.getView().showSuccessNotification("打回成功"); + logger.info("单据:{}打回成功", billno); + list.refresh(); + } } else { - this.getView().showTipNotification("单据不为已提交或已审核状态,无法打回"); - logger.info("单据:{}打回失败,失败原因:单据不为已提交或已审核状态", billno); - return; - } - List allErrorOrValidateInfo = operation.getAllErrorOrValidateInfo(); - if (!allErrorOrValidateInfo.isEmpty()) { - this.getView().showTipNotification("打回失败,失败原因:撤销(反审核)操作失败 → " + allErrorOrValidateInfo.get(0).getMessage()); - logger.info("单据:{}打回失败,失败原因:撤销(反审核)操作失败 → " + allErrorOrValidateInfo.get(0).getMessage()); - return; - } else { - this.getView().showSuccessNotification("打回成功"); - logger.info("单据:{}打回成功", billno); - list.refresh(); + this.getView().showTipNotification("流程中断失败,请找业务老师处理"); } } else { this.getView().showTipNotification("来源系统为(BIP或星空)且单据状态为(提交或审核)才允许打回"); @@ -133,4 +135,45 @@ public class PaymentProcessingListPlugin extends AbstractListPlugin implements P } return ""; // 如果没有找到,则返回空字符串 } + + private boolean whetherToInterruptTheProcess(String billId) { + int maxRetries = 3; + int retryCount = 0; + + while (retryCount < maxRetries) { + try { + // 中断流程 + abandonByBusienssKey(billId); + + // 等待一段时间再检查 + Thread.sleep(1000); // 等待1秒 + + // 判断单据是否在流程中 + boolean inProcess = WorkflowServiceHelper.inProcess(billId); + + // 如果不在流程中,返回true + if (!inProcess) { + logger.info("流程中断成功,单据ID: {}", billId); + return true; + } + + // 如果仍在流程中,增加重试次数 + retryCount++; + logger.warn("流程中断失败,第{}次重试,单据ID: {}", retryCount, billId); + + // 如果还没达到最大重试次数,等待更长时间 + if (retryCount < maxRetries) { + Thread.sleep(1000L * retryCount); // 逐步增加等待时间 + } + + } catch (Exception e) { + logger.error("中断流程时发生异常,重试次数:" + retryCount + ",单据ID: " + billId, e); + retryCount++; + } + } + + // 重试3次后仍然在流程中,返回false + logger.error("流程中断失败,已达最大重试次数,单据ID: {}", billId); + return false; + } } \ No newline at end of file