From 34304bd9111ba78bd070e8f0b03dfe59c31de396 Mon Sep 17 00:00:00 2001 From: weiyunlong Date: Mon, 19 May 2025 18:19:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=95=86"=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E7=B1=BB"=EF=BC=8C=E5=9C=A8=E4=BB=98?= =?UTF-8?q?=E6=AC=BE=E5=8D=95=E6=94=B6=E6=AC=BE=E4=BA=BA=E4=B8=AD=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=90=8D=E7=A7=B0=20=E4=BB=98=E6=AC=BE=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=8D=95=EF=BC=8C=E9=80=89=E6=8B=A9=E2=80=9C=E7=A5=A8?= =?UTF-8?q?=E6=8D=AE=E2=80=9D=E6=97=B6=EF=BC=8C=E6=B7=BB=E5=8A=A0=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=EF=BC=9A=E2=80=9C=E7=A5=A8=E6=8D=AE=E5=88=B0=E6=9C=9F?= =?UTF-8?q?=E6=97=A5=E2=80=9D=E5=B0=8F=E4=BA=8E=E6=8E=92=E7=A8=8B=E4=BB=98?= =?UTF-8?q?=E6=AC=BE=E6=97=A5=E6=9C=9F=EF=BC=88=E4=BF=AE=E6=94=B9=E6=8E=92?= =?UTF-8?q?=E7=A8=8B=E5=85=A5=E6=AC=BE=E6=97=A5=E6=9C=9F=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E6=8F=90=E9=86=92"=E6=8E=92=E7=A8=8B?= =?UTF-8?q?=E4=BB=98=E6=AC=BE=E6=97=A5=E6=9C=9F=E5=A4=A7=E4=BA=8E=E7=A5=A8?= =?UTF-8?q?=E6=8D=AE=E5=88=B0=E6=9C=9F=E6=97=A5"=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=8E=92=E7=A8=8B=E5=90=88=E5=B9=B6=E6=8F=90=E7=A4=BA=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=B5=84=E9=87=91=E8=AE=A1=E5=88=92=E7=A7=91?= =?UTF-8?q?=E7=9B=AE(=E7=94=B3=E8=AF=B7=E5=8D=95=E5=A4=8D=E9=80=89?= =?UTF-8?q?=E6=A1=86=E9=80=BB=E8=BE=91)=20=E4=BB=98=E6=AC=BE=E5=8D=95?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E8=B4=B9=E6=8E=A7=E6=96=B0=E5=A2=9E=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=20=E5=AE=9A=E6=97=B6=E8=B0=83=E7=94=A8SAP=E5=BA=94?= =?UTF-8?q?=E4=BB=98=E5=87=AD=E8=AF=81=E6=8E=A5=E5=8F=A3=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=BB=98=E6=AC=BE=E7=94=B3=E8=AF=B7=E5=8D=95=EF=BC=8C=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=8F=82=E6=95=B0=E4=BB=85=E4=B8=BA=E4=B8=B4=E6=9C=9F?= =?UTF-8?q?(=E5=BC=80=E5=A7=8B=E6=97=A5=E6=9C=9F,=E7=BB=93=E6=9D=9F?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96)=20s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/form/SchebillcalcFormPlugin.java | 92 +++++++------- .../fi/fi/plugin/form/TextFieldDemo.java | 5 + .../plugin/operate/PayApplySaveOperation.java | 9 +- .../fi/plugin/operate/PaybillOperation.java | 6 + .../operate/SchebillcalcSubmitOperation.java | 113 ++++++++++++++++++ .../task/QuerySapCreatePayApplyTask.java | 27 ++--- 6 files changed, 188 insertions(+), 64 deletions(-) create mode 100644 main/java/shjh/jhzj7/fi/fi/plugin/operate/SchebillcalcSubmitOperation.java diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/SchebillcalcFormPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/SchebillcalcFormPlugin.java index 0d3a41c..fe67553 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/form/SchebillcalcFormPlugin.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/SchebillcalcFormPlugin.java @@ -22,51 +22,51 @@ public class SchebillcalcFormPlugin extends AbstractFormPlugin { @Override public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) { super.afterDoOperation(afterDoOperationEventArgs); - - String operateKey = afterDoOperationEventArgs.getOperateKey(); - if ("submit".equals(operateKey)) { - // 排程处理单提交后,执行相关业务校验 - // 1、 当【排票金额】>0 and 【排票支付方式】=票据背书时,票据到期日均需大于付款排程单到期日信息。应大于 - - // 付款排程明细(entryentity) 排票金额(e_draftamt) 排票支付方式(e_draftpaymethod) 付款排程单号(e_billno) - // 付款排程单(psd_schedulebill, billno, 到期日:shjh_duedate) - Map dateMap = new HashMap<>(); - DynamicObjectCollection entrys = this.getModel().getEntryEntity("entryentity"); - for (DynamicObject entry : entrys) { - BigDecimal eDraftamt = entry.getBigDecimal("e_draftamt"); - String eDraftpaymethod = entry.getString("e_draftpaymethod"); - String eBillno = entry.getString("e_billno"); - if(eDraftamt.compareTo(BigDecimal.ZERO) > 0 && "票据背书".equals(eDraftpaymethod)){ - QFilter qFilter = new QFilter("billno", QCP.equals, eBillno); - DynamicObject psdSchedulebill = BusinessDataServiceHelper.loadSingle("psd_schedulebill", qFilter.toArray()); - if (null != psdSchedulebill) { - Date shjhDuedate = psdSchedulebill.getDate("shjh_duedate"); - dateMap.put(eBillno, shjhDuedate); - } - } - } - Date minDate = null; - for (Map.Entry entry : dateMap.entrySet()) { - if (minDate == null || entry.getValue().before(minDate)) { - minDate = entry.getValue(); - } - } - // minDate 是 dateMap 中日期最小的那个 - if (minDate != null) { - //遍历票面信息(draftinfoentry ) 票据到期日(de_draftbillexpiredate) 结算号(de_draftinfo , cdm_draftbillf7 draftbillexpiredate) - DynamicObjectCollection draftinfoentry = this.getModel().getEntryEntity("draftinfoentry"); - for (int i = 0; i < draftinfoentry.size(); i++) { - DynamicObject dynamicObject = draftinfoentry.get(i); - DynamicObject draftinfo = dynamicObject.getDynamicObject("de_draftinfo"); - if (null != draftinfo) { - draftinfo = BusinessDataServiceHelper.loadSingle(draftinfo.getPkValue(), "cdm_draftbillf7"); - Date draftbillexpiredate = draftinfo.getDate("draftbillexpiredate"); - if (draftbillexpiredate.before(minDate)) { - this.getView().showErrorNotification("遍历票面信息第"+ i +"行,票据到期日均需大于付款排程单到期日信息"); - } - } - } - } - } + //逻辑迁移到shjh.jhzj7.fi.fi.plugin.operate.SchebillcalcSubmitOperation +// String operateKey = afterDoOperationEventArgs.getOperateKey(); +// if ("presubmit".equals(operateKey)) { +// // 排程处理单提交后,执行相关业务校验 +// // 1、 当【排票金额】>0 and 【排票支付方式】=票据背书时,票据到期日均需大于付款排程单到期日信息。应大于 +// +// // 付款排程明细(entryentity) 排票金额(e_draftamt) 排票支付方式(e_draftpaymethod) 付款排程单号(e_billno) +// // 付款排程单(psd_schedulebill, billno, 到期日:shjh_duedate) +// Map dateMap = new HashMap<>(); +// DynamicObjectCollection entrys = this.getModel().getEntryEntity("entryentity"); +// for (DynamicObject entry : entrys) { +// BigDecimal eDraftamt = entry.getBigDecimal("e_draftamt"); +// String eDraftpaymethod = entry.getString("e_draftpaymethod"); +// String eBillno = entry.getString("e_billno"); +// if(eDraftamt.compareTo(BigDecimal.ZERO) > 0 && "draftbook".equals(eDraftpaymethod)){ +// QFilter qFilter = new QFilter("billno", QCP.equals, eBillno); +// DynamicObject psdSchedulebill = BusinessDataServiceHelper.loadSingle("psd_schedulebill", qFilter.toArray()); +// if (null != psdSchedulebill) { +// Date shjhDuedate = psdSchedulebill.getDate("shjh_duedate"); +// dateMap.put(eBillno, shjhDuedate); +// } +// } +// } +// Date minDate = null; +// for (Map.Entry entry : dateMap.entrySet()) { +// if (minDate == null || entry.getValue().before(minDate)) { +// minDate = entry.getValue(); +// } +// } +// // minDate 是 dateMap 中日期最小的那个 +// if (minDate != null) { +// //遍历票面信息(draftinfoentry ) 票据到期日(de_draftbillexpiredate) 结算号(de_draftinfo , cdm_draftbillf7 draftbillexpiredate) +// DynamicObjectCollection draftinfoentry = this.getModel().getEntryEntity("draftinfoentry"); +// for (int i = 0; i < draftinfoentry.size(); i++) { +// DynamicObject dynamicObject = draftinfoentry.get(i); +// DynamicObject draftinfo = dynamicObject.getDynamicObject("de_draftinfo"); +// if (null != draftinfo) { +// draftinfo = BusinessDataServiceHelper.loadSingle(draftinfo.getPkValue(), "cdm_draftbillf7"); +// Date draftbillexpiredate = draftinfo.getDate("draftbillexpiredate"); +// if (draftbillexpiredate.before(minDate)) { +// this.getView().showErrorNotification("遍历票面信息第"+ i +"行,票据到期日均需大于付款排程单到期日信息"); +// } +// } +// } +// } +// } } } diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/TextFieldDemo.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/TextFieldDemo.java index 9b08e5d..969e78e 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/form/TextFieldDemo.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/TextFieldDemo.java @@ -1,5 +1,6 @@ package shjh.jhzj7.fi.fi.plugin.form; +import kd.bos.form.control.Label; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.form.ClientProperties; @@ -19,6 +20,10 @@ public class TextFieldDemo extends AbstractFormPlugin { */ @Override public void afterBindData(EventObject e) { + //供应商"个人支付类",在付款单收款人中显示名称 + Label label = this.getView().getControl("shjh_sjskfs"); + label.setText(""+this.getView().getModel().getValue("shjh_asstactrealname")); + // 获取成本中心和利润中心的控件 BasedataEdit shjh_costcenter = this.getView().getControl("shjh_costcenter"); diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayApplySaveOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayApplySaveOperation.java index 26e0d3b..04375c8 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayApplySaveOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/PayApplySaveOperation.java @@ -156,10 +156,11 @@ public class PayApplySaveOperation extends AbstractOperationServicePlugIn implem JhzjUtils.saveLog(bill.getString("billno"), "付款申请携带资金计划科目(原因码)","" ,queryDyobj(qFilter), true, String.valueOf(BusinessDataServiceHelper.load("shjh_request_account", "id,shjh_membersubject", qFilter.toArray()).length)); + //单子为true 对应配置表是/否 为false 对应配置表否 //是否充值类 boolean shjhWhetherrechargecateg = bill.getBoolean("shjh_whetherrechargecateg"); - if (shjhWhetherrechargecateg) { - QFilter q2 = new QFilter("shjh_czl", QCP.equals, shjhWhetherrechargecateg); + if (!shjhWhetherrechargecateg) { + QFilter q2 = new QFilter("shjh_czl", QCP.equals, false); qFilter = qFilter.and(q2); } JhzjUtils.saveLog(bill.getString("billno"), "付款申请携带资金计划科目(是否充值类)","" @@ -167,8 +168,8 @@ public class PayApplySaveOperation extends AbstractOperationServicePlugIn implem "id,shjh_membersubject", qFilter.toArray()).length)); //是否自行采购 boolean shjhZxcg = bill.getBoolean("shjh_zxcg"); - if (shjhZxcg) { - QFilter q3 = new QFilter("shjh_zxcg", QCP.equals, shjhZxcg); + if (!shjhZxcg) { + QFilter q3 = new QFilter("shjh_zxcg", QCP.equals, false); qFilter = qFilter.and(q3); } JhzjUtils.saveLog(bill.getString("billno"), "付款申请携带资金计划科目(是否自行采购)","" diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/PaybillOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/PaybillOperation.java index d6f1089..53f7bc8 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/PaybillOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/PaybillOperation.java @@ -41,6 +41,12 @@ public class PaybillOperation extends AbstractOperationServicePlugIn implements bill = BusinessDataServiceHelper.loadSingle(bill.getPkValue(), "cas_paybill"); if (null != bill) { DynamicObject paymentidentify = bill.getDynamicObject("paymentidentify");//付款标识 + //SAP付款凭证号为空,不允许推送费控,请先推送sap + String credentialnum = bill.getString("shjh_credentialnum");//SAP付款凭证号 + if (StringUtils.isEmpty(credentialnum)) { + addErrorInfo(bill, "SAP付款凭证号为空,不允许推送费控,请先推送sap"); + isSuccess = false; + } if (null != paymentidentify) { if (!"FKBS02".equals(paymentidentify.getString("number"))) { addErrorInfo(bill, "付款标识不为被动付款"); diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/SchebillcalcSubmitOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/SchebillcalcSubmitOperation.java new file mode 100644 index 0000000..4913a06 --- /dev/null +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/SchebillcalcSubmitOperation.java @@ -0,0 +1,113 @@ +package shjh.jhzj7.fi.fi.plugin.operate; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.validate.AbstractValidator; +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.servicehelper.BusinessDataServiceHelper; +import kd.sdk.plugin.Plugin; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * 排程处理单操作插件 + * shjh_psd_schebillcalc_ext + */ +public class SchebillcalcSubmitOperation extends AbstractOperationServicePlugIn implements Plugin { + + private static final Log log = LogFactory.getLog(SchebillcalcSubmitOperation.class); + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + e.addValidator(new AbstractValidator() { + @Override + public void validate() { + String operateKey = this.getOperateKey(); + if ("presubmit".equals(operateKey)) { + // 付款排程明细(entryentity) 排票金额(e_draftamt) 排票支付方式(e_draftpaymethod) 付款排程单号(e_billno) + // 付款排程单(psd_schedulebill, billno, 到期日:shjh_duedate) + ExtendedDataEntity[] entities = this.getDataEntities(); + for (ExtendedDataEntity entity : entities) { + DynamicObject bill = entity.getDataEntity(); + DynamicObjectCollection entrys = bill.getDynamicObjectCollection("entryentity"); + for (DynamicObject entry : entrys) { + BigDecimal eDraftamt = entry.getBigDecimal("e_draftamt");//排票金额 + String eBillno = entry.getString("e_billno");//付款排程单号 + Date shjhDuedate = null; + //当【排票金额】>0 and 废弃:【排票支付方式】=票据背书时 + if (eDraftamt.compareTo(BigDecimal.ZERO) > 0) { + QFilter qFilter = new QFilter("billno", QCP.equals, eBillno); + //付款排程单 + DynamicObject psdSchedulebill = BusinessDataServiceHelper.loadSingle("psd_schedulebill", qFilter.toArray()); + if (null != psdSchedulebill) { + shjhDuedate = psdSchedulebill.getDate("shjh_duedate");//到期日 + } + } + Date minDate = null; + if (shjhDuedate != null) { + //票据到期日中最小的日期均需大于付款排程单到期日信息 + DynamicObjectCollection eDraftno = entry.getDynamicObjectCollection("e_draftno"); + //票据号 + StringBuilder str = new StringBuilder(); + for (DynamicObject dynamicObject : eDraftno) { + DynamicObject fbasedataid = dynamicObject.getDynamicObject("fbasedataid"); + str.append(fbasedataid.getString("billno")).append(","); + Date currentDate = fbasedataid.getDate("draftbillexpiredate"); + // 跳过 null 日期 + if (currentDate == null) { + continue; + } + // 如果是第一个有效日期,或者当前日期比已记录的最小日期更早 + if (minDate == null || currentDate.before(minDate)) { + minDate = currentDate; + } + } + if (str.length() > 0) { + str.deleteCharAt(str.length() - 1); // 删除最后一个逗号 + } + //risk:如果没有有效票据,则不进行校验 + if (minDate != null && minDate.before(shjhDuedate)) { + // 格式化日期为 yyyy-MM-dd 字符串 + String f1; + String f2; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + f1 = sdf.format(minDate); + f2 = sdf.format(shjhDuedate); + this.addErrorMessage(entity, "付款排程单号为" + eBillno + + "的付款排程明细,票据号:"+str+"。票据最小到期日"+ f1 + "应大于付款排程单到期日" + f2); // 票据到期日中最小的日期均需大于付款排程单到期日信息 + } + } + } + } + } + } + }); + } +} + + +// //遍历票面信息(draftinfoentry ) 票据到期日(de_draftbillexpiredate) 结算号(de_draftinfo , cdm_draftbillf7 draftbillexpiredate) +// DynamicObjectCollection draftinfoentry = bill.getDynamicObjectCollection("draftinfoentry"); +// for (int i = 0; i < draftinfoentry.size(); i++) { +// DynamicObject dynamicObject = draftinfoentry.get(i); +// DynamicObject draftinfo = dynamicObject.getDynamicObject("de_draftinfo"); +// if (null != draftinfo) { +// draftinfo = BusinessDataServiceHelper.loadSingle(draftinfo.getPkValue(), "cdm_draftbillf7"); +// Date draftbillexpiredate = draftinfo.getDate("draftbillexpiredate"); +// //票据到期日均需大于付款排程单到期日信息:应大于 +// if (draftbillexpiredate.before(shjhDuedate)) { +// this.addErrorMessage(entity, "遍历票面信息第"+ i+1 +"行,票据到期日均需大于付款排程单到期日信息"); +// } +// } +// } \ No newline at end of file diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java index a0f2194..575ba30 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java @@ -42,20 +42,19 @@ public class QuerySapCreatePayApplyTask extends AbstractTask { @Override public void execute(RequestContext requestContext, Map map) throws KDException { - String lq = (String)map.get("临期"); -// int daysToAdd = Integer.parseInt(lq); - int daysToAdd = 365;//1600000001 1600000009 - - String dateStr = "2025-01-01"; - DateTimeFormatter format = DateTimeFormatter.ISO_LOCAL_DATE; - LocalDate currentDate = LocalDate.parse(dateStr, format);// 获取当前日期 - -// LocalDate currentDate = LocalDate.now();// 获取当前日期 - LocalDate newDate = currentDate.plusDays(daysToAdd);// 计算新日期 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");// 格式化日期 - - String formattedoldDate = currentDate.format(formatter);//开始日期 - String formattedNewDate = newDate.format(formatter);//结束日期 + // 获取临期天数并转换 + String lq = (String) map.get("临期"); + if (StringUtils.isEmpty(lq)) { + return; + } + int daysToAdd = Integer.parseInt(lq); // 将临期字符串转为整数天数 + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); + LocalDate endDate = currentDate.plusDays(daysToAdd); + // 格式化日期 + String formattedoldDate = currentDate.format(formatter); //开始日期 当前日期 + String formattedNewDate = endDate.format(formatter); //结束日期(当前日期 + 临期天数) JSONArray IT_LIST = new JSONArray(); // 添加SAP应付凭到期日过滤条件