From 533be5bc9a962aab51818d831658834dff1d41c0 Mon Sep 17 00:00:00 2001 From: weiyunlong Date: Fri, 14 Mar 2025 17:48:00 +0800 Subject: [PATCH] =?UTF-8?q?=20=201.=E8=A2=AB=E5=8A=A8=E4=BB=98=E6=AC=BE?= =?UTF-8?q?=E5=85=A5=E8=B4=A6=5F=E5=AE=9A=E6=97=B6=E4=BB=8E=E4=BB=98?= =?UTF-8?q?=E6=AC=BE=E5=8D=95=E6=90=BA=E5=B8=A6SAP=E5=BA=94=E4=BB=98?= =?UTF-8?q?=E5=87=AD=E8=AF=81=E5=8D=95=E5=8F=B7=20=20=202.=E8=8B=A5?= =?UTF-8?q?=E6=9D=A5=E6=BA=90=E4=B8=BASAP,=E8=B0=83=E7=94=A8SAP=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=BF=AE=E6=94=B9=E6=8E=A5=E5=8F=A3=5F=5F=E4=BB=98?= =?UTF-8?q?=E6=AC=BE=E7=94=B3=E8=AF=B7=E5=85=B3=E9=97=AD=E8=B0=83=E7=94=A8?= =?UTF-8?q?SAP=E5=87=AD=E8=AF=81=E5=85=B3=E9=97=AD=E6=8E=A5=E5=8F=A3=20=20?= =?UTF-8?q?=203.=E4=BB=98=E6=AC=BE=E6=8E=92=E7=A8=8B=E5=8D=95=E5=88=97?= =?UTF-8?q?=E8=A1=A8:=E9=80=80=E5=8D=95/=E4=BD=9C=E5=BA=9F=E8=B0=83?= =?UTF-8?q?=E9=80=9ASAP=E5=87=AD=E8=AF=81=E9=80=80=E5=8D=95/=E4=BD=9C?= =?UTF-8?q?=E5=BA=9F=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --s --- .../fi/fi/plugin/form/ScheduleListPlugin.java | 80 +++++++++++++++++++ .../operate/PayrequestBillOperation.java | 53 ++++++++++++ .../fi/plugin/task/BeiIntelpayBillTask.java | 30 +++++-- .../fi/fi/webapi/VouchernumControler.java | 2 +- 4 files changed, 157 insertions(+), 8 deletions(-) create mode 100644 main/java/shjh/jhzj7/fi/fi/plugin/form/ScheduleListPlugin.java diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/ScheduleListPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/ScheduleListPlugin.java new file mode 100644 index 0000000..de2ad05 --- /dev/null +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/ScheduleListPlugin.java @@ -0,0 +1,80 @@ +package shjh.jhzj7.fi.fi.plugin.form; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.datamodel.ListSelectedRow; +import kd.bos.entity.datamodel.ListSelectedRowCollection; +import kd.bos.entity.operate.result.OperationResult; +import kd.bos.form.events.AfterDoOperationEventArgs; +import kd.bos.list.plugin.AbstractListPlugin; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.servicehelper.BusinessDataServiceHelper; + +import static shjh.jhzj7.fi.fi.utils.SapUtils.unlocked_status; + +/** + * 付款排程单列表插件 + */ +public class ScheduleListPlugin extends AbstractListPlugin { + + private static final Log log = LogFactory.getLog(ScheduleListPlugin.class); + @Override + public void afterDoOperation(AfterDoOperationEventArgs args) { + super.afterDoOperation(args); + //退单/作废调通SAP凭证退单/作废状态 退单:chargeback 作废:discard + String operateKey = args.getOperateKey(); + OperationResult operationResult = args.getOperationResult(); + if (operationResult.isSuccess()) { + if ("chargeback".equals(operateKey) || "discard".equals(operateKey)) { + String status = "chargeback".equals(operateKey)? "04" : "05"; + processRows(status); + } + } + } + private void processRows(String status) { + ListSelectedRowCollection rows = this.getSelectedRows(); + for (ListSelectedRow row : rows) { + Long pk = (Long) row.getPrimaryKeyValue(); + DynamicObject bill = BusinessDataServiceHelper.loadSingle(pk, "psd_schedulebill"); + if (bill != null) { + String shjhSapuniquevalue = bill.getString("shjh_sapuniquevalue"); + if (shjhSapuniquevalue != null && !shjhSapuniquevalue.isEmpty()) { + JSONArray IT_INPUT = createInputJSONArray(bill, status); + JSONObject jsonObjects = unlocked_status(IT_INPUT, bill.getString("billno")); + String code = jsonObjects.getString("code"); + String action = "04".equals(status)? "退单" : "作废"; + if (!"0".equals(code)) { + log.info("付款排程单:" + bill.getString("billno") + "状态" + action + "失败:" + jsonObjects.getString("msg")); + } else { + log.info("付款排程单:" + bill.getString("billno") + "状态" + action + "成功"); + } + } + } + } + } + + private JSONArray createInputJSONArray(DynamicObject bill, String status) { + JSONArray IT_INPUT = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + String FM_CompanyCode = ""; + if (bill.getDynamicObject("company") != null) { + FM_CompanyCode = bill.getDynamicObject("company").getString("number"); + } + jsonObject.put("bukrs", FM_CompanyCode); + jsonObject.put("belnr", bill.getString("shjh_credentialnum")); + jsonObject.put("gjahr", bill.getString("shjh_voucheryear")); + jsonObject.put("stasus", status); + String cname = ""; + if (null!= bill.getDynamicObject("creator")) { + cname = bill.getDynamicObject("creator").getString("number");//创建人,工号_申请人 + } + //jsonObject.put("cname", cname);//创建人,工号 + jsonObject.put("cname", "GH001657");//todo:创建人,工号 + jsonObject.put("zjddjid", "" + bill.getPkValue()); + jsonObject.put("zjddjbh", bill.getString("billno")); + IT_INPUT.add(jsonObject); + return IT_INPUT; + } +} diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayrequestBillOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayrequestBillOperation.java index 479a96e..3c49e21 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayrequestBillOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayrequestBillOperation.java @@ -1,17 +1,26 @@ package shjh.jhzj7.fi.fi.plugin.operate; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.args.AfterOperationArgs; import kd.bos.entity.plugin.args.BeforeOperationArgs; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.sdk.plugin.Plugin; +import static shjh.jhzj7.fi.fi.utils.SapUtils.unlocked_status; + /** * 付款申请单据操作插件 * @author yuxueliang */ public class PayrequestBillOperation extends AbstractOperationServicePlugIn implements Plugin { + private static final Log log = LogFactory.getLog(PayrequestBillOperation.class); + /** * 操作校验通过之后,开启事务之前,触发此事件; * 插件可以在此事件,对通过校验的数据,进行整理 @@ -35,4 +44,48 @@ public class PayrequestBillOperation extends AbstractOperationServicePlugIn impl } } } + + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + String operationKey = e.getOperationKey(); + if ("closepay".equals(operationKey)) { + DynamicObject[] dataEntities = e.getDataEntities(); + for (DynamicObject bill : dataEntities) { + //若来源为SAP,调用SAP状态修改接口 + String shjhSapuniquevalue = bill.getString("shjh_sapuniquevalue");//获取SAP唯一值 + if (shjhSapuniquevalue!= null && !shjhSapuniquevalue.isEmpty()) { + + //调关闭接口 + JSONArray IT_INPUT = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + String FM_CompanyCode = ""; + if (null!= bill.getDynamicObject("applyorg")) { + FM_CompanyCode = bill.getDynamicObject("applyorg").getString("number");//公司编码_申请付款组织 + } + jsonObject.put("bukrs",FM_CompanyCode);//公司代码_申请付款组织 + jsonObject.put("belnr", bill.getString("shjh_vouchernum"));//会计凭证编号_SAP应付凭证号 + jsonObject.put("gjahr", bill.getString("shjh_voucheryear"));//会计年度_SAP应付凭证会计年度 + jsonObject.put("stasus", "03");//状态 01:锁定,02:解锁,03:关闭,04:退单:05:作废 + String cname = ""; + if (null!= bill.getDynamicObject("creator")) { + cname = bill.getDynamicObject("creator").getString("number");//创建人,工号_申请人 + } +// jsonObject.put("cname", cname);//创建人,工号 + jsonObject.put("cname", "GH001657");//todo:创建人,工号 + jsonObject.put("zjddjid", ""+bill.getPkValue());//金蝶单据ID + jsonObject.put("zjddjbh", bill.getString("billno"));//金蝶单据编号 + IT_INPUT.add(jsonObject); + + JSONObject jsonObjects = unlocked_status(IT_INPUT,bill.getString("billno")); + String code = (String)jsonObjects.get("code"); + if (!"0".equals(code)) { + log.info("付款申请单:"+bill.getString("billno")+"状态关闭失败:" + jsonObject.get("msg")); + }else { + log.info("付款申请单:"+bill.getString("billno")+"状态关闭成功"); + } + } + } + } + } } diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelpayBillTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelpayBillTask.java index 5d08073..fea7743 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelpayBillTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/BeiIntelpayBillTask.java @@ -2,6 +2,7 @@ package shjh.jhzj7.fi.fi.plugin.task; 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.orm.query.QCP; import kd.bos.orm.query.QFilter; @@ -21,16 +22,31 @@ public class BeiIntelpayBillTask extends AbstractTask implements Plugin { @Override public void execute(RequestContext requestContext, Map map) throws KDException { + /* + select fsourcebillnumber from T_CAS_PaymentBill where fbillno = 'PV-202503-000162'; + UPDATE T_CAS_PaymentBill SET shjh_credentialnum = 'cs001' where fbillno = 'PV-202503-000162'; + */ QFilter q1 = new QFilter("debitamount",QCP.large_than, BigDecimal.ZERO); QFilter q2 = new QFilter("shjh_credentialnum", QCP.equals, ""); - DynamicObject[] beiIntelpays = BusinessDataServiceHelper.load("bei_intelpay", "id,billno,shjh_credentialnum", new QFilter[]{q1, q2}); + DynamicObject[] beiIntelpays = BusinessDataServiceHelper.load("bei_intelpay", "id,billno,shjh_credentialnum,recedbillentry," + + "recedbillentry.e_recedbillnumber", new QFilter[]{q1, q2}); for (DynamicObject beiIntelpay : beiIntelpays) { - //获取付款单 - QFilter q3 = new QFilter("sourcebillnumber", QCP.equals, beiIntelpay.getString("billno"));////源单编码 - DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{q3}); - if (null != paybill) { - beiIntelpay.set("shjh_credentialnum",paybill.getString("shjh_credentialnum"));//SAP应付凭证单号 - SaveServiceHelper.save(new DynamicObject[]{beiIntelpay}); + //接收单据信息:recedbillentry + DynamicObjectCollection recedbillentry = beiIntelpay.getDynamicObjectCollection("recedbillentry"); + if (!recedbillentry.isEmpty()) { + DynamicObject object = recedbillentry.get(0); + if (null != object) { + String recedbillnumber = object.getString("e_recedbillnumber");//接收单据编号 + if (null != recedbillnumber && !recedbillnumber.isEmpty()) { + //获取付款单 + QFilter q3 = new QFilter("billno", QCP.equals, recedbillnumber);//单据编号 + DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{q3}); + if (null != paybill) { + beiIntelpay.set("shjh_credentialnum",paybill.getString("shjh_credentialnum"));//SAP应付凭证单号 + SaveServiceHelper.save(new DynamicObject[]{beiIntelpay}); + } + } + } } } } diff --git a/main/java/shjh/jhzj7/fi/fi/webapi/VouchernumControler.java b/main/java/shjh/jhzj7/fi/fi/webapi/VouchernumControler.java index 6316bbf..176a42d 100644 --- a/main/java/shjh/jhzj7/fi/fi/webapi/VouchernumControler.java +++ b/main/java/shjh/jhzj7/fi/fi/webapi/VouchernumControler.java @@ -35,7 +35,7 @@ import static shjh.jhzj7.fi.fi.webapi.ApplyAdjustBillControler.loadOrgByCompanyN public class VouchernumControler { private static final String Apimenthod = "费控-SAP付款凭证号接口"; private static final Log log = LogFactory.getLog(VouchernumControler.class); - private static final String apimenthod = "/paybill_vouchernum"; + private static final String apimenthod = "/sapvouchernum"; @ApiPostMapping(value = apimenthod, desc = "费控-SAP付款凭证号接口") public CustomApiResult paybill_vouchernum(@NotNull @Valid @ApiRequestBody(value = "入参json格式数据") PaybillVoucherNumModel paybillVouchertbill) {