From d255d994a666fc1283ade0e82f747190a819e36c Mon Sep 17 00:00:00 2001 From: zzs Date: Wed, 18 Dec 2024 14:19:53 +0800 Subject: [PATCH 01/16] =?UTF-8?q?feat:=E6=9F=A5=E8=AF=A2=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E4=BF=9D=E9=A2=9D=E5=BA=A6=E7=94=B3=E8=AF=B7=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E4=BD=BF=E7=94=A8=E5=AE=A2=E6=88=B7=E4=BF=A1=E4=BF=9D?= =?UTF-8?q?=E9=80=9A=E4=B9=B0=E6=96=B9=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/yem/wm/es/Util/TotalUtil.java | 5 ++++- .../validator/CsrCreditSubmitLineValidator.java | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yem/wm/es/Util/TotalUtil.java b/src/main/java/com/yem/wm/es/Util/TotalUtil.java index 125a3632..80b6f2bf 100644 --- a/src/main/java/com/yem/wm/es/Util/TotalUtil.java +++ b/src/main/java/com/yem/wm/es/Util/TotalUtil.java @@ -293,7 +293,10 @@ public class TotalUtil { if (YEM.isNotEmpty(customer) && YEM.isNotEmpty(method) && YEM.isNotEmpty(company)) { String selectfields = DynamicObjectUtil.getSelectfields("yem_im_csrcreditline", false); selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_im_csrcreditline", "yem_im_info", false); - QFilter qFilter = new QFilter("yem_customer", QCP.equals, customer.getPkValue()); + if (!customer.containsProperty("yem_customer")) { + customer = BusinessDataServiceHelper.loadSingleFromCache(customer.getPkValue(), customer.getDynamicObjectType().getName()); + } + QFilter qFilter = new QFilter("yem_customer.yem_customer", QCP.equals, customer.getString("yem_customer")); qFilter.and(new QFilter("yem_payment.id", QCP.equals, method.getPkValue())); // qFilter.and(new QFilter("org", QCP.equals, company.getPkValue())); qFilter.and(new QFilter("billstatus", QCP.equals, "C")); diff --git a/src/main/java/com/yem/wm/im/csrCreditLine/validator/CsrCreditSubmitLineValidator.java b/src/main/java/com/yem/wm/im/csrCreditLine/validator/CsrCreditSubmitLineValidator.java index 2781d332..00317f52 100644 --- a/src/main/java/com/yem/wm/im/csrCreditLine/validator/CsrCreditSubmitLineValidator.java +++ b/src/main/java/com/yem/wm/im/csrCreditLine/validator/CsrCreditSubmitLineValidator.java @@ -30,7 +30,12 @@ public class CsrCreditSubmitLineValidator extends AbstractValidator { String swiftcode = dataEntity.getString("yem_swiftcode"); Date yearBegin = getYearBegin(bizDate); Date yearLast = getYearLast(bizDate); - QFilter qFilter = new QFilter("yem_customer", QCP.equals, customer.getPkValue()); + + if (!customer.containsProperty("yem_customer")) { + customer = BusinessDataServiceHelper.loadSingleFromCache(customer.getPkValue(), customer.getDynamicObjectType().getName()); + } + QFilter qFilter = new QFilter("yem_customer.yem_customer", QCP.equals, customer.getString("yem_customer")); +// QFilter qFilter = new QFilter("yem_customer", QCP.equals, customer.getPkValue()); // qFilter.and(new QFilter("org", QCP.equals, org.getPkValue())); qFilter.and(new QFilter("yem_bizdate", QCP.large_than, yearBegin)); qFilter.and(new QFilter("yem_bizdate", QCP.less_equals, yearLast)); From 1f2b2b97990a98df9217f947b91199fc187e463c Mon Sep 17 00:00:00 2001 From: zzs Date: Wed, 18 Dec 2024 16:19:28 +0800 Subject: [PATCH 02/16] =?UTF-8?q?feat:=E4=BF=A1=E4=BF=9D=E5=9B=9E=E5=A1=AB?= =?UTF-8?q?=EF=BC=8C=E5=90=88=E5=90=8C=E5=9B=9E=E6=AC=BE=E9=87=91=E9=A2=9D?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dynamic/CreditBackFillEdit.java | 122 +++++++++++++++++- 1 file changed, 118 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/yem/wm/es/storagetrans/dynamic/CreditBackFillEdit.java b/src/main/java/com/yem/wm/es/storagetrans/dynamic/CreditBackFillEdit.java index c66dbde2..1c6ce174 100644 --- a/src/main/java/com/yem/wm/es/storagetrans/dynamic/CreditBackFillEdit.java +++ b/src/main/java/com/yem/wm/es/storagetrans/dynamic/CreditBackFillEdit.java @@ -1,9 +1,13 @@ package com.yem.wm.es.storagetrans.dynamic; +import com.yem.rf.utils.RFUtils; import com.yem.wm.es.Util.CreditBackFillUtils; import com.yem.wm.es.Util.TotalUtil; +import com.yem.wm.es.shippingdetails.util.PaymentControlUtil; import com.yem.wm.utils.CalendarUtils; +import com.yem.wm.utils.RptUtil; import com.yem.wm.utils.YEM; +import kd.bos.algo.DataSet; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.datamodel.IDataModel; @@ -13,17 +17,17 @@ import kd.bos.form.IFormView; import kd.bos.form.control.Control; import kd.bos.form.events.AfterDoOperationEventArgs; import kd.bos.form.plugin.AbstractFormPlugin; +import kd.bos.orm.ORM; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.tmc.cfm.formplugin.bd.PayMentbyInstalments; +import org.apache.commons.compress.utils.Lists; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.Date; -import java.util.EventObject; -import java.util.HashMap; -import java.util.Map; +import java.util.*; /** * @author xwudd @@ -45,6 +49,7 @@ public class CreditBackFillEdit extends AbstractFormPlugin { model.setValue("yem_storagetransno", parentModel.getValue("billno"));//储运托单号 model.setValue("yem_currency", parentModel.getValue("yem_creditcurr"));//信保币别 + model.setValue("yem_settlementcurr", parentModel.getValue("yem_currency"));//结算币别 model.setValue("yem_currencybase", parentModel.getValue("yem_currencybase"));//本位币 model.setValue("yem_actulpreamount", parentModel.getValue("yem_actualsinkamount"));//实际收汇金额汇总 model.setValue("yem_actulpreamountbase", parentModel.getValue("yem_actualsinkamountba"));//实际收汇本位币金额汇总 @@ -115,6 +120,10 @@ public class CreditBackFillEdit extends AbstractFormPlugin { String key = control.getKey(); if ("btnok".equals(key)) { + if (!beforeOkOperationValidator()) { + return; + } + IFormView view = this.getView(); IDataModel model = this.getModel(); DynamicObject dataEntity = model.getDataEntity(true); @@ -172,6 +181,96 @@ public class CreditBackFillEdit extends AbstractFormPlugin { } } + private boolean beforeOkOperationValidator() { + IDataModel model = this.getModel(); + IFormView view = this.getView(); + IFormView parentView = view.getParentView(); + IDataModel parentModel = parentView.getModel(); + DynamicObject dataEntity = model.getDataEntity(true); + StringBuilder sb = new StringBuilder(); + DynamicObjectCollection collection = dataEntity.getDynamicObjectCollection("yem_creditentry"); + // 当前订舱合同回款金额 + Map contractPayAmtMap = new HashMap<>(); + for (DynamicObject d : collection) { + int idx = collection.indexOf(d); + BigDecimal contractpayamt = d.getBigDecimal("yem_contractpayamt"); + String salecontractno = d.getString("yem_salecontractno"); + if (contractPayAmtMap.containsKey(salecontractno)) { + BigDecimal decimal = contractPayAmtMap.get(salecontractno); + decimal = decimal.add(contractpayamt); + contractPayAmtMap.put(salecontractno, decimal); + } else { + contractPayAmtMap.put(salecontractno, contractpayamt); + } + if (contractpayamt.compareTo(BigDecimal.ZERO) <= 0) { + sb.append(String.format("请填写明细信息第 %s 行,合同回款金额!!", idx + 1)).append("\n\r"); + } + } + if (sb.length() > 0) { + view.showErrorNotification(sb.toString()); + return false; + } + + QFilter qFilter = RFUtils.getBaseQFilter(); + + // 当前单涉及需要校验的合同 + Set salesorder = new HashSet<>(); + for (DynamicObject d : collection) { + salesorder.add(d.getString("yem_salecontractno")); + } + qFilter.and("yem_creditdetail.yem_salecontractno.billno", "in", salesorder); + qFilter.and("billno", "not in", parentModel.getValue("billno")); + ArrayList selectfileds = Lists.newArrayList(); + selectfileds.add("yem_creditdetail.yem_salecontractno.billno yem_salecontractno");//外销合同号 + selectfileds.add("yem_creditdetail.yem_contractpayamt yem_contractpayamt");//合同回款金额 + DataSet st = ORM.create().queryDataSet("com.yem.wm.es.storagetrans.dynamic.CreditBackFillEdit.beforeOkOperationValidator", "yem_es_storagetrans", String.join(",", selectfileds), qFilter.toArray()); + st = st.groupBy(new String[]{"yem_salecontractno"}).sum("yem_contractpayamt").finish(); + DynamicObjectCollection dataSetCollection = ORM.create().toPlainDynamicObjectCollection(st); + + // 历史(除去本单)订舱合同回款金额 + 当前订舱合同回款金额 + + for (DynamicObject setObj : dataSetCollection) { + String salecontractno = setObj.getString("yem_salecontractno"); + BigDecimal contractpayamt = setObj.getBigDecimal("yem_contractpayamt"); + if (contractPayAmtMap.containsKey(salecontractno)) { + BigDecimal decimal = contractPayAmtMap.get(salecontractno); + decimal = decimal.add(contractpayamt); + contractPayAmtMap.put(salecontractno, decimal); + } else { + contractPayAmtMap.put(salecontractno, contractpayamt); + } + } + + + StringBuilder amtSb = new StringBuilder(); + + DynamicObject[] load = BusinessDataServiceHelper.load("yem_es_salesorder", "id, billno", new QFilter[]{new QFilter("billno", "in", salesorder)}); + for (DynamicObject object : load) { + for (Map.Entry map : contractPayAmtMap.entrySet()) { + BigDecimal amt = map.getValue(); + String billno = map.getKey(); + if (object.getString("billno").equals(billno)) { + BigDecimal contractClimeAmt = PaymentControlUtil.getContractClimeAmt(object, "F"); + if (amt.compareTo(contractClimeAmt) > 0) { + amtSb.append(String.format("合同号:%s,合同回款总金额:%s元,尾款(账期)认领总金额:%s元,已超额,请认领完成后在操作信保回款。" + , billno + , amt.setScale(4, RoundingMode.HALF_UP).toPlainString() + , contractClimeAmt.setScale(4, RoundingMode.HALF_UP).toPlainString() + )).append("\n\r"); + } + } + } + } + + if (amtSb.length() > 0) { + view.showErrorNotification(amtSb.toString()); + return false; + } + + + return true; + } + /** * 缓存分录数据 * @@ -501,6 +600,21 @@ public class CreditBackFillEdit extends AbstractFormPlugin { this.getModel().setValue("yem_creactuallocamt", creactualamt.multiply(crerate), row); // this.getView().updateView(); } + + // 汇总子分录合同回款金额到分录 + if ("yem_contractpayamt_e".equals(key)) { + DynamicObjectCollection collection = dataEntity.getDynamicObjectCollection("yem_creditentry"); + for (DynamicObject entry : collection) { + int idx = collection.indexOf(entry); + DynamicObjectCollection subEntry = entry.getDynamicObjectCollection("yem_crecollection"); + BigDecimal calc = BigDecimal.ZERO; + for (DynamicObject subObj : subEntry) { + BigDecimal contractpayamt_e = subObj.getBigDecimal("yem_contractpayamt_e"); + calc = calc.add(contractpayamt_e); + } + model.setValue("yem_contractpayamt", calc, idx); + } + } } private void carryCreditInsuranceRate(int rowIndex) { From a996973e015b5589f86f82690cd618712276425b Mon Sep 17 00:00:00 2001 From: zzs Date: Wed, 18 Dec 2024 17:24:24 +0800 Subject: [PATCH 03/16] =?UTF-8?q?feat:=E4=BF=A1=E4=BF=9D=E5=9B=9E=E5=A1=AB?= =?UTF-8?q?=EF=BC=8C=E5=90=88=E5=90=8C=E5=9B=9E=E6=AC=BE=E9=87=91=E9=A2=9D?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=9B=9E=E5=A1=AB=E9=A2=9D=E5=BA=A6=E7=94=B3?= =?UTF-8?q?=E8=AF=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dynamic/CreditBackFillEdit.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/yem/wm/es/storagetrans/dynamic/CreditBackFillEdit.java b/src/main/java/com/yem/wm/es/storagetrans/dynamic/CreditBackFillEdit.java index 1c6ce174..a963c785 100644 --- a/src/main/java/com/yem/wm/es/storagetrans/dynamic/CreditBackFillEdit.java +++ b/src/main/java/com/yem/wm/es/storagetrans/dynamic/CreditBackFillEdit.java @@ -160,14 +160,15 @@ public class CreditBackFillEdit extends AbstractFormPlugin { parentModel.setValue("yem_creditremark", subMap.get("creditRemark"), i);//信保备注 parentModel.setValue("yem_creditquotation", subMap.get("yem_creditquotation"), i); - parentModel.setValue("yem_sinosurerate_cd", subMap.get("yem_sinosurerate_cd")); - parentModel.setValue("yem_term_cd", subMap.get("yem_term_cd")); + parentModel.setValue("yem_sinosurerate_cd", subMap.get("yem_sinosurerate_cd"), i); + parentModel.setValue("yem_term_cd", subMap.get("yem_term_cd"), i); // parentModel.setValue("yem_year_e", subMap.get("year")); dynamicObject.set("yem_year_e", subMap.get("year")); - parentModel.setValue("yem_creditstatus_e", subMap.get("creditstatus")); + parentModel.setValue("yem_creditstatus_e", subMap.get("creditstatus"), i); - parentModel.setValue("yem_insuranceamt_cd", subMap.get("yem_premium"));//保险费 + parentModel.setValue("yem_insuranceamt_cd", subMap.get("yem_premium"), i);//保险费 + parentModel.setValue("yem_contractpayamt", subMap.get("yem_contractpayamt"), i);//合同回款金额 } } subEntryBackFill(); @@ -181,6 +182,17 @@ public class CreditBackFillEdit extends AbstractFormPlugin { } } + /** + * + * ②信保回填弹窗界面:业务手动维护当前收款币别对应的合同回款币别金额,点击确认时,【合同回款金额】必填; + *
+ * ③信保回填弹窗界面,确认时:判断当前合同下的【合同回款金额】汇总值  是否超出收款单认领到该合同尾款的【收款认领金额】汇总值,如果超出,不允许通过,并提示:合同号:***,合同回款总金额:***元,尾款(账期)认领总金额:***元,已超额,请认领完成后在操作信保回款。否则可以通过 + *
+ * + * @link 文档 + * + * @return Boolean + */ private boolean beforeOkOperationValidator() { IDataModel model = this.getModel(); IFormView view = this.getView(); @@ -336,6 +348,8 @@ public class CreditBackFillEdit extends AbstractFormPlugin { map.put("yem_premium", model.getValue("yem_premium", i));//保险费 + map.put("yem_contractpayamt", model.getValue("yem_contractpayamt", i));//合同回款金额 + Long pkValue = dynamicObject.getLong("yem_parententryid"); collectionMap.put(pkValue, map); } @@ -407,6 +421,7 @@ public class CreditBackFillEdit extends AbstractFormPlugin { dynamicObject.set("yem_creditstatus_e", map.get("creditstatus")); dynamicObject.set("yem_premium", map.get("yem_premium")); + dynamicObject.set("yem_contractpayamt", map.get("yem_contractpayamt")); } } SaveServiceHelper.save(new DynamicObject[]{csrCreditLine}); @@ -465,6 +480,7 @@ public class CreditBackFillEdit extends AbstractFormPlugin { addNew.set("yem_crenote", crecollection.getString("yem_crenote"));//收款备注 addNew.set("yem_crecollecurrency", crecollection.getDynamicObject("yem_crecollecurrency"));//收款币别 addNew.set("yem_crecollecamt", crecollection.getBigDecimal("yem_crecollecamt"));//收款金额 + addNew.set("yem_contractpayamt_e", crecollection.getBigDecimal("yem_contractpayamt_e")); } } } else { @@ -517,6 +533,7 @@ public class CreditBackFillEdit extends AbstractFormPlugin { parentAddNer.set("yem_crenote", crecollection.getString("yem_crenote"));//收款备注 parentAddNer.set("yem_crecollecurrency", crecollection.getDynamicObject("yem_crecollecurrency"));//收款币别 parentAddNer.set("yem_crecollecamt", crecollection.getBigDecimal("yem_crecollecamt"));//收款金额 + parentAddNer.set("yem_contractpayamt_e", crecollection.getBoolean("yem_contractpayamt_e"));//合同回款金额 } } BigDecimal creactualamt = BigDecimal.ZERO;// 实际收汇金额 From e599288765eeb718697f7106ca432a19de58ed78 Mon Sep 17 00:00:00 2001 From: zzs Date: Thu, 19 Dec 2024 10:22:50 +0800 Subject: [PATCH 04/16] =?UTF-8?q?feat:=E8=AE=A2=E8=88=B1=E4=B8=8B=E6=8E=A8?= =?UTF-8?q?=E5=AF=84=E5=8D=95=E6=94=BE=E5=8D=95=E5=B8=A6=E5=87=BA=E5=90=88?= =?UTF-8?q?=E5=90=8C=E7=9A=84=E9=94=80=E5=94=AE=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StorgeTransToExportPresentConvert.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/java/com/yem/wm/es/storagetrans/convert/StorgeTransToExportPresentConvert.java b/src/main/java/com/yem/wm/es/storagetrans/convert/StorgeTransToExportPresentConvert.java index c21a7ee3..18facc53 100644 --- a/src/main/java/com/yem/wm/es/storagetrans/convert/StorgeTransToExportPresentConvert.java +++ b/src/main/java/com/yem/wm/es/storagetrans/convert/StorgeTransToExportPresentConvert.java @@ -99,6 +99,26 @@ public class StorgeTransToExportPresentConvert extends AbstractConvertPlugIn addNew.set("yem_debtamt", thisRealityAmt.setScale(2, RoundingMode.HALF_UP));//欠款金额 } } + + // 收汇方式 + DynamicObjectCollection exportpreErw = dataEntity.getDynamicObjectCollection("yem_es_exportpre_erw"); + Set salesorder = new HashSet<>(); + for (DynamicObject d : exportpreErw) { + String contractnum = d.getString("yem_contractnum_c"); + salesorder.add(contractnum); + } + + Map map = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", "id, billno, yem_operator", new QFilter[]{new QFilter("billno", "in", salesorder)}); + for (Map.Entry entry : map.entrySet()) { + DynamicObject order = entry.getValue(); + String billno = order.getString("billno"); + for (DynamicObject d : exportpreErw) { + if (billno.equals(d.getString("yem_contractnum_c"))) { + DynamicObject operator = order.getDynamicObject("yem_operator"); + d.set("yem_operator_e", operator); + } + } + } } } } From 871005c558f58484e47d56933479bfe464a105ef Mon Sep 17 00:00:00 2001 From: zzs Date: Thu, 19 Dec 2024 16:11:44 +0800 Subject: [PATCH 05/16] =?UTF-8?q?feat:=E4=BF=A1=E4=BF=9D=E6=9C=AA=E5=9B=9E?= =?UTF-8?q?=E6=AC=BE=E9=A2=84=E8=AD=A6task?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task/ExportPresentWarningTask.java | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java diff --git a/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java b/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java new file mode 100644 index 00000000..6f51215a --- /dev/null +++ b/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java @@ -0,0 +1,114 @@ +package com.yem.wm.es.exportpresent.task; + +import com.yem.rf.utils.RFUtils; +import com.yem.tws.common1.DateUtils; +import com.yem.wm.utils.DynamicObjectUtil; +import com.yem.wm.utils.YEM; +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.QFilter; +import kd.bos.schedule.executor.AbstractTask; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import org.apache.commons.compress.utils.Lists; + +import java.time.LocalDate; +import java.util.*; + +/** + * @Description: 寄单放单申请收汇方式,增加销售员(根据携带当前行合同上的销售员)、应回款日期(提单日+收款天数),应回款日期不为空时,每10天给销售员发送一次消息提醒:合同:***,寄单放单单号:***,应回款日期为:***,请知悉! + * @Date: 2024/12/19 10:24 + * @Created: by ZZSLL + */ + +public class ExportPresentWarningTask extends AbstractTask { + @Override + public void execute(RequestContext requestContext, Map map) throws KDException { + + boolean isSendMessage = isTenDaysAfter(); + + QFilter qFilter = RFUtils.getBaseQFilter(); + String selectfields = DynamicObjectUtil.getSelectfields("yem_es_exportpresent"); + selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_es_exportpresent", "yem_es_exportpre_erw"); + DynamicObject[] load = BusinessDataServiceHelper.load("yem_es_exportpresent", selectfields, qFilter.toArray()); + // 订舱单号-提单日期 + Map ladingDateMap = new HashMap<>(); + for (DynamicObject d : load) { + DynamicObjectCollection c = d.getDynamicObjectCollection("yem_es_exportpre_erw"); + for (DynamicObject subD : c) { + String shipmentnum = subD.getString("yem_shipmentnum_c"); + ladingDateMap.put(shipmentnum, null); + } + } + + // 查询提单日期 + Map st = BusinessDataServiceHelper.loadFromCache("yem_es_storagetrans", "id, billno, yem_tddate", new QFilter[]{new QFilter("billno", "in", ladingDateMap.keySet())}); + for (DynamicObject value : st.values()) { + String billno = value.getString("billno"); + Date tddate = value.getDate("yem_tddate"); + ladingDateMap.put(billno, tddate); + } + + Map> message = new HashMap<>(); + for (DynamicObject d : load) { + DynamicObjectCollection c = d.getDynamicObjectCollection("yem_es_exportpre_erw"); + for (DynamicObject subD : c) { + String stno = subD.getString("yem_shipmentnum_c"); + if (ladingDateMap.containsKey(stno)) { + Date date = ladingDateMap.get(stno); + if (YEM.isEmpty(date)) continue; + // 计算应回款日期 = 天数 + 提单日期 + int forward = subD.getInt("yem_forward"); + Date added = DateUtils.addDays(date, forward); + subD.set("yem_shdreceivedate", added); + String contractnum = subD.getString("yem_contractnum_c"); + if (isSendMessage) { + DynamicObject operator = subD.getDynamicObject("yem_operator_e"); + if (operator == null) continue; + long sendUser = operator.getLong("id"); + List list; + if (message.containsKey(sendUser)) { + list = message.get(sendUser); + } else { + list = new ArrayList<>(); + } + list.add(String.format("合同:%s,寄单放单单号:%s,应回款日期为:%s,请知悉!\n\r", contractnum, d.getString("billno"), DateUtils.getData(added, "yyyy-MM-dd"))); + message.put(sendUser, list); + } + } + } + } + + Set phone = new HashSet<>(); + phone.add("15771670073"); + ArrayList devUserIds = Lists.newArrayList(); + // 发给开发测试 + DynamicObject[] users = BusinessDataServiceHelper.load("bos_user", "id, name, phone", new QFilter[]{new QFilter("phone", "in", phone)}); + for (DynamicObject user : users) { + devUserIds.add(user.getLong("id")); + } + + for (Map.Entry> sendMsg : message.entrySet()) { + Long userid = sendMsg.getKey(); + List messageContent = sendMsg.getValue(); + ArrayList sendUserId = Lists.newArrayList(); + sendUserId.add(userid); + sendUserId.addAll(devUserIds); + + YEM.sendMessage(sendUserId, "预警消息", "应回款日期预警", String.join("", messageContent), "预警消息"); + } + } + + /** + * 当前日期是否是给定日期的十天后 + * @return Boolean + */ + public static boolean isTenDaysAfter() { + // 起始日期 + LocalDate startDate = LocalDate.of(2024, 12, 1); + long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(startDate, LocalDate.now()); + // 是否是起始日期10天后或,10*n天后 + return daysBetween >= 0 && daysBetween % 10 == 0; + } +} From 330509aed26a208ce16cfcf0fefa14bbc0c5af32 Mon Sep 17 00:00:00 2001 From: zzs Date: Fri, 20 Dec 2024 11:24:58 +0800 Subject: [PATCH 06/16] =?UTF-8?q?feat:=E9=80=89=E8=A3=85=E3=80=81=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E5=A2=9E=E5=8A=A0=E5=AD=97=E6=AE=B5=EF=BC=8C=E9=80=89?= =?UTF-8?q?=E8=A3=85=E6=97=B6=E6=90=BA=E5=B8=A6=E5=88=B0=E5=90=88=E5=90=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java | 7 +++++++ .../com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java b/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java index c7388ed2..89b3b00a 100644 --- a/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java +++ b/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java @@ -77,6 +77,7 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin { model.setValue("yem_parameter", mechanical.getString("yem_parameter"), createRow); model.setValue("yem_remarke", mechanical.getString("yem_remarke"), createRow); model.setValue("yem_entryid", id, createRow); + model.setValue("yem_model_config_c", mechanical.getDynamicObject("yem_model_config_c"), createRow); } } } @@ -114,6 +115,7 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin { model.setValue("yem_specification", optional.getString("yem_specification_o"), entryRow); model.setValue("yem_remarke", optional.getString("yem_remarke"), entryRow); model.setValue("yem_entryid", optional.getPkValue(), entryRow); + model.setValue("yem_model_config_c", optional.getDynamicObject("yem_model_config_c"), entryRow); } } @@ -179,6 +181,11 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin { parentModel.setValue("yem_arguments", model.getValue("yem_parameter", selectRow), optionalRow); parentModel.setValue("yem_remarkss", model.getValue("yem_remarke", selectRow), optionalRow); parentModel.setValue("yem_configentryid", model.getValue("yem_entryid", selectRow), optionalRow); + DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_c", optionalRow); + if (modelConfigR != null) { + parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); + parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); + } } } } diff --git a/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java b/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java index fdfd4406..179b6883 100644 --- a/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java +++ b/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java @@ -107,6 +107,7 @@ public class ReplaceFormPlugIn extends AbstractFormPlugin implements Plugin { // model.setValue("yem_marketraiseprice", replaceable.getBigDecimal("yem_salesmarkup_re"), entryRow); model.setValue("yem_remarke", replaceable.getString("yem_remarkr"), entryRow); model.setValue("yem_entryid", replaceable.getPkValue(), entryRow); + model.setValue("yem_model_config_r", replaceable.getDynamicObject("yem_model_config_r"), entryRow); } } @@ -170,6 +171,11 @@ public class ReplaceFormPlugIn extends AbstractFormPlugin implements Plugin { parentModel.setValue("yem_unitsetnumber", model.getValue("yem_unitsetnumber", selectRow), optionalRow); parentModel.setValue("yem_remarkss", model.getValue("yem_remarke", selectRow), optionalRow); parentModel.setValue("yem_configentryid", model.getValue("yem_entryid", selectRow), optionalRow); + DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_r", optionalRow); + if (modelConfigR != null) { + parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); + parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); + } } } From 3abdb3bb3f4006f9dc484512abefe486881b78ae Mon Sep 17 00:00:00 2001 From: zzs Date: Fri, 20 Dec 2024 11:38:54 +0800 Subject: [PATCH 07/16] =?UTF-8?q?feat:=E9=80=89=E8=A3=85=E3=80=81=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E6=97=A0=E5=AD=97=E6=AE=B5=E8=B7=B3=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java | 8 ++++++-- .../yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java b/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java index 89b3b00a..718c6997 100644 --- a/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java +++ b/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java @@ -77,7 +77,10 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin { model.setValue("yem_parameter", mechanical.getString("yem_parameter"), createRow); model.setValue("yem_remarke", mechanical.getString("yem_remarke"), createRow); model.setValue("yem_entryid", id, createRow); - model.setValue("yem_model_config_c", mechanical.getDynamicObject("yem_model_config_c"), createRow); + DynamicObject dataEntity = model.getDataEntity(true); + if (dataEntity.containsProperty("yem_model_config_c")) { + model.setValue("yem_model_config_c", mechanical.getDynamicObject("yem_model_config_c"), createRow); + } } } } @@ -182,7 +185,8 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin { parentModel.setValue("yem_remarkss", model.getValue("yem_remarke", selectRow), optionalRow); parentModel.setValue("yem_configentryid", model.getValue("yem_entryid", selectRow), optionalRow); DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_c", optionalRow); - if (modelConfigR != null) { + DynamicObject parentDataEntity = parentModel.getDataEntity(true); + if (modelConfigR != null && parentDataEntity.containsProperty("yem_cname_config") && parentDataEntity.containsProperty("yem_ename_config")) { parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); } diff --git a/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java b/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java index 179b6883..c2d29827 100644 --- a/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java +++ b/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java @@ -6,6 +6,7 @@ import com.yem.wm.utils.FunctionalCommon; import com.yem.wm.utils.YEM; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.MainEntityType; import kd.bos.entity.datamodel.IDataModel; import kd.bos.form.FormShowParameter; import kd.bos.form.IFormView; @@ -107,7 +108,9 @@ public class ReplaceFormPlugIn extends AbstractFormPlugin implements Plugin { // model.setValue("yem_marketraiseprice", replaceable.getBigDecimal("yem_salesmarkup_re"), entryRow); model.setValue("yem_remarke", replaceable.getString("yem_remarkr"), entryRow); model.setValue("yem_entryid", replaceable.getPkValue(), entryRow); - model.setValue("yem_model_config_r", replaceable.getDynamicObject("yem_model_config_r"), entryRow); + if (model.getDataEntity(true).containsProperty("yem_model_config_r")) { + model.setValue("yem_model_config_r", replaceable.getDynamicObject("yem_model_config_r"), entryRow); + } } } @@ -172,7 +175,8 @@ public class ReplaceFormPlugIn extends AbstractFormPlugin implements Plugin { parentModel.setValue("yem_remarkss", model.getValue("yem_remarke", selectRow), optionalRow); parentModel.setValue("yem_configentryid", model.getValue("yem_entryid", selectRow), optionalRow); DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_r", optionalRow); - if (modelConfigR != null) { + DynamicObject parentDataEntity = parentModel.getDataEntity(true); + if (modelConfigR != null && parentDataEntity.containsProperty("yem_cname_config") && parentDataEntity.containsProperty("yem_ename_config")) { parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); } From f47b4a70a7df36204f66e1f1aba0b39c1764a5db Mon Sep 17 00:00:00 2001 From: zzs Date: Fri, 20 Dec 2024 14:46:24 +0800 Subject: [PATCH 08/16] =?UTF-8?q?WIP:=E4=BF=A1=E4=BF=9D=E6=9C=AA=E5=9B=9E?= =?UTF-8?q?=E6=AC=BE=E9=A2=84=E8=AD=A6task?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task/ExportPresentWarningTask.java | 79 +++++++++++++++---- 1 file changed, 65 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java b/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java index 6f51215a..4ca58a4c 100644 --- a/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java +++ b/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java @@ -2,6 +2,7 @@ package com.yem.wm.es.exportpresent.task; import com.yem.rf.utils.RFUtils; import com.yem.tws.common1.DateUtils; +import com.yem.wm.es.shippingdetails.util.PaymentControlUtil; import com.yem.wm.utils.DynamicObjectUtil; import com.yem.wm.utils.YEM; import kd.bos.context.RequestContext; @@ -11,8 +12,10 @@ import kd.bos.exception.KDException; import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; import org.apache.commons.compress.utils.Lists; +import java.math.BigDecimal; import java.time.LocalDate; import java.util.*; @@ -26,7 +29,7 @@ public class ExportPresentWarningTask extends AbstractTask { @Override public void execute(RequestContext requestContext, Map map) throws KDException { - boolean isSendMessage = isTenDaysAfter(); +// boolean isSendMessage = isTenDaysAfter(); QFilter qFilter = RFUtils.getBaseQFilter(); String selectfields = DynamicObjectUtil.getSelectfields("yem_es_exportpresent"); @@ -34,11 +37,52 @@ public class ExportPresentWarningTask extends AbstractTask { DynamicObject[] load = BusinessDataServiceHelper.load("yem_es_exportpresent", selectfields, qFilter.toArray()); // 订舱单号-提单日期 Map ladingDateMap = new HashMap<>(); + // 合同号-是否合同回款完成 + Map isClaimFinishedMap = new HashMap<>(); for (DynamicObject d : load) { DynamicObjectCollection c = d.getDynamicObjectCollection("yem_es_exportpre_erw"); for (DynamicObject subD : c) { String shipmentnum = subD.getString("yem_shipmentnum_c"); ladingDateMap.put(shipmentnum, null); + String contractnum = subD.getString("yem_contractnum_c"); + isClaimFinishedMap.put(contractnum, true); + } + } + + Map salesorders = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", "id, billno", new QFilter[]{new QFilter("billno", "in", isClaimFinishedMap.keySet())}); + Map salesorderNo = new HashMap<>(); + for (Map.Entry salesorderEntry : salesorders.entrySet()) { + Long orderId = (Long) salesorderEntry.getKey(); + DynamicObject order = salesorderEntry.getValue(); + salesorderNo.put(order.getString("billno"), orderId); + } + Map stOrder = BusinessDataServiceHelper.loadFromCache("yem_es_storagetrans", "id, billno, yem_es_salescontrac_s.yem_rapamt, yem_es_salescontrac_s.yem_contractnumbers_p", new QFilter[]{new QFilter("yem_es_salescontrac_s.yem_contractnumbers_p", "in", salesorderNo.keySet())}); + // 合同号-收汇金额合计 + Map receiveAmt = new HashMap<>(); + for (DynamicObject stBill : stOrder.values()) { + DynamicObjectCollection collection = stBill.getDynamicObjectCollection("yem_es_salescontrac_s"); + for (DynamicObject d : collection) { + BigDecimal rapamt = d.getBigDecimal("yem_rapamt"); + String contractnumbers = d.getString("yem_contractnumbers_p"); + BigDecimal calc; + if (receiveAmt.containsKey(contractnumbers)) { + calc = receiveAmt.get(contractnumbers).add(rapamt); + } else { + calc = rapamt; + } + receiveAmt.put(contractnumbers, calc); + } + } + for (Map.Entry salesorderEntry : salesorderNo.entrySet()) { + String billno = salesorderEntry.getKey(); + DynamicObject salesorder = salesorders.get(salesorderEntry.getValue()); + if (salesorder == null) continue; + BigDecimal climeAmt = PaymentControlUtil.getContractClimeAmt(salesorder, "F"); + if (receiveAmt.containsKey(billno)) { + BigDecimal receive = receiveAmt.get(billno); + if (receive.compareTo(climeAmt) < 0 && isClaimFinishedMap.containsKey(billno)) { + isClaimFinishedMap.put(billno, false); + } } } @@ -63,19 +107,23 @@ public class ExportPresentWarningTask extends AbstractTask { Date added = DateUtils.addDays(date, forward); subD.set("yem_shdreceivedate", added); String contractnum = subD.getString("yem_contractnum_c"); - if (isSendMessage) { - DynamicObject operator = subD.getDynamicObject("yem_operator_e"); - if (operator == null) continue; - long sendUser = operator.getLong("id"); - List list; - if (message.containsKey(sendUser)) { - list = message.get(sendUser); - } else { - list = new ArrayList<>(); - } - list.add(String.format("合同:%s,寄单放单单号:%s,应回款日期为:%s,请知悉!\n\r", contractnum, d.getString("billno"), DateUtils.getData(added, "yyyy-MM-dd"))); - message.put(sendUser, list); +// if (isSendMessage) { + // 以认领完成 + if (isClaimFinishedMap.containsKey(contractnum) && isClaimFinishedMap.get(contractnum)) { + continue; } + DynamicObject operator = subD.getDynamicObject("yem_operator_e"); + if (operator == null) continue; + long sendUser = operator.getLong("id"); + List list; + if (message.containsKey(sendUser)) { + list = message.get(sendUser); + } else { + list = new ArrayList<>(); + } + list.add(String.format("合同:%s,寄单放单单号:%s,应回款日期为:%s,请知悉!\n\r", contractnum, d.getString("billno"), DateUtils.getData(added, "yyyy-MM-dd"))); + message.put(sendUser, list); +// } } } } @@ -93,15 +141,18 @@ public class ExportPresentWarningTask extends AbstractTask { Long userid = sendMsg.getKey(); List messageContent = sendMsg.getValue(); ArrayList sendUserId = Lists.newArrayList(); - sendUserId.add(userid); +// sendUserId.add(userid);//销售员 sendUserId.addAll(devUserIds); YEM.sendMessage(sendUserId, "预警消息", "应回款日期预警", String.join("", messageContent), "预警消息"); } + + SaveServiceHelper.save(load); } /** * 当前日期是否是给定日期的十天后 + * * @return Boolean */ public static boolean isTenDaysAfter() { From cd747987eb23a62774d46c2c923adb358a75845f Mon Sep 17 00:00:00 2001 From: zzs Date: Fri, 20 Dec 2024 16:31:21 +0800 Subject: [PATCH 09/16] =?UTF-8?q?feat:=E4=BF=A1=E4=BF=9D=E6=9C=AA=E5=9B=9E?= =?UTF-8?q?=E6=AC=BE=E9=A2=84=E8=AD=A6task?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wm/es/exportpresent/task/ExportPresentWarningTask.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java b/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java index 4ca58a4c..d97e8e19 100644 --- a/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java +++ b/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java @@ -32,6 +32,7 @@ public class ExportPresentWarningTask extends AbstractTask { // boolean isSendMessage = isTenDaysAfter(); QFilter qFilter = RFUtils.getBaseQFilter(); + qFilter.and(new QFilter("yem_isladingbill", "=", "A")); String selectfields = DynamicObjectUtil.getSelectfields("yem_es_exportpresent"); selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_es_exportpresent", "yem_es_exportpre_erw"); DynamicObject[] load = BusinessDataServiceHelper.load("yem_es_exportpresent", selectfields, qFilter.toArray()); @@ -45,6 +46,7 @@ public class ExportPresentWarningTask extends AbstractTask { String shipmentnum = subD.getString("yem_shipmentnum_c"); ladingDateMap.put(shipmentnum, null); String contractnum = subD.getString("yem_contractnum_c"); + isClaimFinishedMap.put(contractnum, true); } } @@ -141,10 +143,10 @@ public class ExportPresentWarningTask extends AbstractTask { Long userid = sendMsg.getKey(); List messageContent = sendMsg.getValue(); ArrayList sendUserId = Lists.newArrayList(); -// sendUserId.add(userid);//销售员 + sendUserId.add(userid);//销售员 sendUserId.addAll(devUserIds); - YEM.sendMessage(sendUserId, "预警消息", "应回款日期预警", String.join("", messageContent), "预警消息"); + YEM.sendMessage(sendUserId, "预警消息", "回款预警", String.join("", messageContent), "预警消息"); } SaveServiceHelper.save(load); From 7a3638ca842c1008a9b03ea91a55a6499dbfc46e Mon Sep 17 00:00:00 2001 From: zzs Date: Fri, 20 Dec 2024 17:32:47 +0800 Subject: [PATCH 10/16] =?UTF-8?q?WIP:=E5=AF=84=E5=8D=95=E6=94=BE=E5=8D=95?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExportPresentSubmitsValidator.java | 41 +++++++++++++++++-- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java b/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java index bf58ba20..5ad69048 100644 --- a/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java +++ b/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java @@ -1,5 +1,6 @@ package com.yem.wm.es.exportpresent.validator; +import com.yem.wm.es.shippingdetails.util.PaymentControlUtil; import com.yem.wm.utils.DynamicObjectUtil; import com.yem.wm.utils.YEM; import kd.bos.dataentity.entity.DynamicObject; @@ -11,9 +12,9 @@ import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; + +import static com.yem.wm.fm.gathering.dynamic.GatheringClaimFormPlugin.getPercentagePeriod; /** * @author ljw @@ -29,7 +30,39 @@ public class ExportPresentSubmitsValidator extends AbstractValidator { DynamicObject dataEntity = data.getDataEntity(); // 款项类型 String paymenttype = dataEntity.getString("yem_paymenttype"); - if ("A".equals(paymenttype)) { + // 是否见提单 + String isladingbill = dataEntity.getString("yem_isladingbill"); + + Set salesorder = new HashSet<>(); + DynamicObjectCollection collection = dataEntity.getDynamicObjectCollection("yem_es_exportpre_erf"); + for (DynamicObject d : collection) { + DynamicObject saleorder = d.getDynamicObject("yem_saleorder"); + if (YEM.isNotEmpty(saleorder)) { + salesorder.add(saleorder.getString("billno")); + } + } + + String selectfields = DynamicObjectUtil.getSelectfields("yem_es_salesorder"); + selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_es_salesorder", "yem_es_salescontrac_s"); + Map map = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", selectfields,new QFilter[]{new QFilter("billno", "in", salesorder)}); + // 100%L/C,100%OA、100%DP、100%DA + boolean isRequireValidator = false; + for (Map.Entry salesoerderEntry : map.entrySet()) { + DynamicObject order = salesoerderEntry.getValue(); + DynamicObjectCollection salescontrac = order.getDynamicObjectCollection("yem_es_salescontrac_s"); + for (DynamicObject d : salescontrac) { + DynamicObject rapstyle = d.getDynamicObject("yem_rapstyle_c"); + BigDecimal raprate = d.getBigDecimal("yem_raprate"); + if (YEM.isNotEmpty(rapstyle)) { + String number = rapstyle.getString("number"); + if ("D/A JSFS08 L/C OA D/A".contains(number) && raprate.compareTo(new BigDecimal("100")) == 0) { + isRequireValidator = true; + } + } + } + } + + if ("A".equals(paymenttype) && ("A".equals(isladingbill) || isRequireValidator)) { arrearsVerification(dataEntity, data); } } From a0d082a2cc11dc7b2432d9bb8a3dbf34b3a3ba58 Mon Sep 17 00:00:00 2001 From: zzs Date: Mon, 23 Dec 2024 14:46:31 +0800 Subject: [PATCH 11/16] =?UTF-8?q?feat:=E4=BD=BF=E7=94=A8=E8=AE=A2=E8=88=B1?= =?UTF-8?q?=E4=B8=AD=E9=9D=9E=E9=A2=84=E6=94=B6=E9=87=91=E9=A2=9D=E5=90=88?= =?UTF-8?q?=E8=AE=A1=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E5=9B=9E=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task/ExportPresentWarningTask.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java b/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java index d97e8e19..7a775f27 100644 --- a/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java +++ b/src/main/java/com/yem/wm/es/exportpresent/task/ExportPresentWarningTask.java @@ -58,21 +58,24 @@ public class ExportPresentWarningTask extends AbstractTask { DynamicObject order = salesorderEntry.getValue(); salesorderNo.put(order.getString("billno"), orderId); } - Map stOrder = BusinessDataServiceHelper.loadFromCache("yem_es_storagetrans", "id, billno, yem_es_salescontrac_s.yem_rapamt, yem_es_salescontrac_s.yem_contractnumbers_p", new QFilter[]{new QFilter("yem_es_salescontrac_s.yem_contractnumbers_p", "in", salesorderNo.keySet())}); + Map stOrder = BusinessDataServiceHelper.loadFromCache("yem_es_storagetrans", "id, billno, yem_es_salescontrac_s.yem_rapamt, yem_es_salescontrac_s.yem_contractnumbers_p, yem_es_salescontrac_s.yem_ispre", new QFilter[]{new QFilter("yem_es_salescontrac_s.yem_contractnumbers_p", "in", salesorderNo.keySet())}); // 合同号-收汇金额合计 Map receiveAmt = new HashMap<>(); for (DynamicObject stBill : stOrder.values()) { DynamicObjectCollection collection = stBill.getDynamicObjectCollection("yem_es_salescontrac_s"); for (DynamicObject d : collection) { - BigDecimal rapamt = d.getBigDecimal("yem_rapamt"); - String contractnumbers = d.getString("yem_contractnumbers_p"); - BigDecimal calc; - if (receiveAmt.containsKey(contractnumbers)) { - calc = receiveAmt.get(contractnumbers).add(rapamt); - } else { - calc = rapamt; + boolean ispre = d.getBoolean("yem_ispre"); + if (ispre) { + BigDecimal rapamt = d.getBigDecimal("yem_rapamt"); + String contractnumbers = d.getString("yem_contractnumbers_p"); + BigDecimal calc; + if (receiveAmt.containsKey(contractnumbers)) { + calc = receiveAmt.get(contractnumbers).add(rapamt); + } else { + calc = rapamt; + } + receiveAmt.put(contractnumbers, calc); } - receiveAmt.put(contractnumbers, calc); } } for (Map.Entry salesorderEntry : salesorderNo.entrySet()) { From eae969ce9bed2e1eebd939606b7374fb0f2d9d92 Mon Sep 17 00:00:00 2001 From: zzs Date: Tue, 31 Dec 2024 17:55:05 +0800 Subject: [PATCH 12/16] =?UTF-8?q?feat:=E5=8F=AF=E9=80=89=E8=A3=85=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BF=84=E8=AF=AD=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../im/priceLibrary/form/OptionalFormPlugIn.java | 14 +++++++------- .../im/priceLibrary/form/ReplaceFormPlugIn.java | 15 ++++++++------- .../priceLibrary/form/RetrofittingFormPlugIn.java | 7 +++++++ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java b/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java index 718c6997..9afa573f 100644 --- a/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java +++ b/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java @@ -77,8 +77,7 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin { model.setValue("yem_parameter", mechanical.getString("yem_parameter"), createRow); model.setValue("yem_remarke", mechanical.getString("yem_remarke"), createRow); model.setValue("yem_entryid", id, createRow); - DynamicObject dataEntity = model.getDataEntity(true); - if (dataEntity.containsProperty("yem_model_config_c")) { + if (mechanical.containsProperty("yem_model_config_c")) { model.setValue("yem_model_config_c", mechanical.getDynamicObject("yem_model_config_c"), createRow); } } @@ -119,6 +118,7 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin { model.setValue("yem_remarke", optional.getString("yem_remarke"), entryRow); model.setValue("yem_entryid", optional.getPkValue(), entryRow); model.setValue("yem_model_config_c", optional.getDynamicObject("yem_model_config_c"), entryRow); + model.setValue("yem_ruconfigure_c",optional.getString("yem_ruconfigure_c"),entryRow); } } @@ -177,6 +177,7 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin { parentModel.setValue("yem_configurtype", "A", optionalRow); parentModel.setValue("yem_configurname", model.getValue("yem_profilenamea", selectRow), optionalRow); parentModel.setValue("yem_configurtypeen", model.getValue("yem_configure", selectRow), optionalRow); + parentModel.setValue("yem_configurtyperu", model.getValue("yem_ruconfigure_c", selectRow), optionalRow); parentModel.setValue("yem_specification_o", model.getValue("yem_specification", selectRow), optionalRow); // parentModel.setValue("yem_marketprice", marketPrice, optionalRow); // parentModel.setValue("yem_marketraiseprice", marketRaisePrice, optionalRow); @@ -185,11 +186,10 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin { parentModel.setValue("yem_remarkss", model.getValue("yem_remarke", selectRow), optionalRow); parentModel.setValue("yem_configentryid", model.getValue("yem_entryid", selectRow), optionalRow); DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_c", optionalRow); - DynamicObject parentDataEntity = parentModel.getDataEntity(true); - if (modelConfigR != null && parentDataEntity.containsProperty("yem_cname_config") && parentDataEntity.containsProperty("yem_ename_config")) { - parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); - parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); - } + parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); + parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); + parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow); + } } } diff --git a/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java b/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java index c2d29827..f944d968 100644 --- a/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java +++ b/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java @@ -108,9 +108,10 @@ public class ReplaceFormPlugIn extends AbstractFormPlugin implements Plugin { // model.setValue("yem_marketraiseprice", replaceable.getBigDecimal("yem_salesmarkup_re"), entryRow); model.setValue("yem_remarke", replaceable.getString("yem_remarkr"), entryRow); model.setValue("yem_entryid", replaceable.getPkValue(), entryRow); - if (model.getDataEntity(true).containsProperty("yem_model_config_r")) { - model.setValue("yem_model_config_r", replaceable.getDynamicObject("yem_model_config_r"), entryRow); - } + model.setValue("yem_ruconfigure_c",replaceable.getString("yem_ruconfigure_r"),entryRow); + + model.setValue("yem_model_config_r", replaceable.getDynamicObject("yem_model_config_r"), entryRow); + } } @@ -168,6 +169,7 @@ public class ReplaceFormPlugIn extends AbstractFormPlugin implements Plugin { parentModel.setValue("yem_configurtype", "B", optionalRow); parentModel.setValue("yem_configurname", model.getValue("yem_profilenamea", selectRow), optionalRow); parentModel.setValue("yem_configurtypeen", model.getValue("yem_configure", selectRow), optionalRow); + parentModel.setValue("yem_configurtyperu",model.getValue("yem_ruconfigure_c",selectRow),optionalRow); parentModel.setValue("yem_specification_o", model.getValue("yem_specification", selectRow), optionalRow); // parentModel.setValue("yem_marketprice", marketPrice, optionalRow); // parentModel.setValue("yem_marketraiseprice", marketRaisePrice, optionalRow); @@ -176,10 +178,9 @@ public class ReplaceFormPlugIn extends AbstractFormPlugin implements Plugin { parentModel.setValue("yem_configentryid", model.getValue("yem_entryid", selectRow), optionalRow); DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_r", optionalRow); DynamicObject parentDataEntity = parentModel.getDataEntity(true); - if (modelConfigR != null && parentDataEntity.containsProperty("yem_cname_config") && parentDataEntity.containsProperty("yem_ename_config")) { - parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); - parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); - } + parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); + parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); + parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow); } } diff --git a/src/main/java/com/yem/wm/im/priceLibrary/form/RetrofittingFormPlugIn.java b/src/main/java/com/yem/wm/im/priceLibrary/form/RetrofittingFormPlugIn.java index aec6d261..d04d8779 100644 --- a/src/main/java/com/yem/wm/im/priceLibrary/form/RetrofittingFormPlugIn.java +++ b/src/main/java/com/yem/wm/im/priceLibrary/form/RetrofittingFormPlugIn.java @@ -105,6 +105,8 @@ public class RetrofittingFormPlugIn extends AbstractFormPlugin implements Plugin model.setValue("yem_specification",optional.getString("yem_specification_a"),entryRow); model.setValue("yem_remarke",optional.getString("yem_remarka"),entryRow); model.setValue("yem_entryid",optional.getPkValue(),entryRow); + model.setValue("yem_ruconfigure_c", optional.getString("yem_ruconfigure_a"), entryRow); + model.setValue("yem_model_config_r", optional.getDynamicObject("yem_model_config_a"), entryRow); } } @@ -161,12 +163,17 @@ public class RetrofittingFormPlugIn extends AbstractFormPlugin implements Plugin parentModel.setValue("yem_configurtype","C",optionalRow); parentModel.setValue("yem_configurname",model.getValue("yem_profilenamea",selectRow),optionalRow); parentModel.setValue("yem_configurtypeen",model.getValue("yem_configure",selectRow),optionalRow); + parentModel.setValue("yem_configurtyperu",model.getValue("yem_ruconfigure_c",selectRow),optionalRow); parentModel.setValue("yem_specification_o",model.getValue("yem_specification",selectRow),optionalRow); // parentModel.setValue("yem_marketprice",marketPrice,optionalRow); // parentModel.setValue("yem_marketraiseprice",marketRaisePrice,optionalRow); parentModel.setValue("yem_unitsetnumber", model.getValue("yem_unitsetnumber", selectRow), optionalRow); parentModel.setValue("yem_remarkss",model.getValue("yem_remarke",selectRow),optionalRow); parentModel.setValue("yem_configentryid",model.getValue("yem_entryid",selectRow),optionalRow); + DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_c", optionalRow); + parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); + parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); + parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow); } } From 9bc2063f981fa29e99f1e43f48045b6935fc7497 Mon Sep 17 00:00:00 2001 From: zzs Date: Tue, 31 Dec 2024 18:23:18 +0800 Subject: [PATCH 13/16] =?UTF-8?q?feat:=E5=8F=AF=E9=80=89=E8=A3=85=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BF=84=E8=AF=AD=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wm/im/priceLibrary/form/OptionalFormPlugIn.java | 8 +++++--- .../yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java | 8 +++++--- .../im/priceLibrary/form/RetrofittingFormPlugIn.java | 10 ++++++---- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java b/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java index 9afa573f..7b550093 100644 --- a/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java +++ b/src/main/java/com/yem/wm/im/priceLibrary/form/OptionalFormPlugIn.java @@ -186,9 +186,11 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin { parentModel.setValue("yem_remarkss", model.getValue("yem_remarke", selectRow), optionalRow); parentModel.setValue("yem_configentryid", model.getValue("yem_entryid", selectRow), optionalRow); DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_c", optionalRow); - parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); - parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); - parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow); + if (YEM.isNotEmpty(modelConfigR)) { + parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); + parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); + parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow); + } } } diff --git a/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java b/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java index f944d968..e921acb8 100644 --- a/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java +++ b/src/main/java/com/yem/wm/im/priceLibrary/form/ReplaceFormPlugIn.java @@ -178,9 +178,11 @@ public class ReplaceFormPlugIn extends AbstractFormPlugin implements Plugin { parentModel.setValue("yem_configentryid", model.getValue("yem_entryid", selectRow), optionalRow); DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_r", optionalRow); DynamicObject parentDataEntity = parentModel.getDataEntity(true); - parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); - parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); - parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow); + if (YEM.isNotEmpty(modelConfigR)) { + parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); + parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); + parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow); + } } } diff --git a/src/main/java/com/yem/wm/im/priceLibrary/form/RetrofittingFormPlugIn.java b/src/main/java/com/yem/wm/im/priceLibrary/form/RetrofittingFormPlugIn.java index d04d8779..dbded121 100644 --- a/src/main/java/com/yem/wm/im/priceLibrary/form/RetrofittingFormPlugIn.java +++ b/src/main/java/com/yem/wm/im/priceLibrary/form/RetrofittingFormPlugIn.java @@ -170,10 +170,12 @@ public class RetrofittingFormPlugIn extends AbstractFormPlugin implements Plugin parentModel.setValue("yem_unitsetnumber", model.getValue("yem_unitsetnumber", selectRow), optionalRow); parentModel.setValue("yem_remarkss",model.getValue("yem_remarke",selectRow),optionalRow); parentModel.setValue("yem_configentryid",model.getValue("yem_entryid",selectRow),optionalRow); - DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_c", optionalRow); - parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); - parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); - parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow); + DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_r", optionalRow); + if (YEM.isNotEmpty(modelConfigR)) { + parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow); + parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow); + parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow); + } } } From 91bb471d10908d92d2740e32222c43c65dde932a Mon Sep 17 00:00:00 2001 From: zzs Date: Fri, 3 Jan 2025 18:00:23 +0800 Subject: [PATCH 14/16] =?UTF-8?q?WIP:=E5=AF=84=E5=8D=95=E6=94=BE=E5=8D=95?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExportPresentSubmitsValidator.java | 39 ++++++++++++++++--- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java b/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java index 5ad69048..2eef1b9b 100644 --- a/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java +++ b/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java @@ -12,10 +12,9 @@ import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; -import static com.yem.wm.fm.gathering.dynamic.GatheringClaimFormPlugin.getPercentagePeriod; - /** * @author ljw * @date 2024/9/24 19:04 @@ -44,22 +43,31 @@ public class ExportPresentSubmitsValidator extends AbstractValidator { String selectfields = DynamicObjectUtil.getSelectfields("yem_es_salesorder"); selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_es_salesorder", "yem_es_salescontrac_s"); - Map map = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", selectfields,new QFilter[]{new QFilter("billno", "in", salesorder)}); + Map map = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", selectfields, new QFilter[]{new QFilter("billno", "in", salesorder)}); // 100%L/C,100%OA、100%DP、100%DA boolean isRequireValidator = false; for (Map.Entry salesoerderEntry : map.entrySet()) { DynamicObject order = salesoerderEntry.getValue(); DynamicObjectCollection salescontrac = order.getDynamicObjectCollection("yem_es_salescontrac_s"); + BigDecimal preAmt = BigDecimal.ZERO;//预收金额合计 for (DynamicObject d : salescontrac) { DynamicObject rapstyle = d.getDynamicObject("yem_rapstyle_c"); BigDecimal raprate = d.getBigDecimal("yem_raprate"); + boolean ispre = d.getBoolean("yem_ispre"); + BigDecimal rapamt = d.getBigDecimal("yem_rapamt"); if (YEM.isNotEmpty(rapstyle)) { String number = rapstyle.getString("number"); - if ("D/A JSFS08 L/C OA D/A".contains(number) && raprate.compareTo(new BigDecimal("100")) == 0) { - isRequireValidator = true; + if ("D/A JSFS08 L/C OA D/A".contains(number)) { + if (raprate.compareTo(new BigDecimal("100")) == 0) { + isRequireValidator = true; + } else if (ispre) { + preAmt = preAmt.add(rapamt); + } } } } + + validatorPreAmtClaimFinished(preAmt, order, data); } if ("A".equals(paymenttype) && ("A".equals(isladingbill) || isRequireValidator)) { @@ -68,6 +76,27 @@ public class ExportPresentSubmitsValidator extends AbstractValidator { } } + /** + * 校验合同预收部分金额是否认领完成 + * + * @param preAmt 预收金额 + * @param order 合同 + * @param data + */ + private void validatorPreAmtClaimFinished(BigDecimal preAmt, DynamicObject order, ExtendedDataEntity data) { + if (preAmt.compareTo(BigDecimal.ZERO) == 0) { + return; + } + BigDecimal orderAmt = PaymentControlUtil.getContractClimeAmt(order, "D"); + BigDecimal shipAmt = PaymentControlUtil.getContractClimeAmt(order, "F"); + if (orderAmt.add(shipAmt).compareTo(preAmt) < 0) { + this.addMessage(data, String.format("合同 [ %s ] 预收合计 [ %s ] ,已经认领金额合计 [ %s ],未认领完成,请确认!", + order.getString("billno"), + preAmt.setScale(4, RoundingMode.HALF_UP).toPlainString(), + orderAmt.add(shipAmt).setScale(4, RoundingMode.HALF_UP).toPlainString())); + } + } + private void arrearsVerification(DynamicObject dataEntity, ExtendedDataEntity data) { DynamicObject yemCustomer = dataEntity.getDynamicObject("yem_customer"); if (yemCustomer != null) { From 3432942a580af3a1c98da195ee95395edb74f575 Mon Sep 17 00:00:00 2001 From: zzs Date: Fri, 3 Jan 2025 18:18:48 +0800 Subject: [PATCH 15/16] =?UTF-8?q?WIP:=E5=AF=84=E5=8D=95=E6=94=BE=E5=8D=95?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExportPresentSubmitsValidator.java | 46 +++++++++++++++++-- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java b/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java index 2eef1b9b..2fd20aae 100644 --- a/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java +++ b/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java @@ -44,6 +44,10 @@ public class ExportPresentSubmitsValidator extends AbstractValidator { String selectfields = DynamicObjectUtil.getSelectfields("yem_es_salesorder"); selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_es_salesorder", "yem_es_salescontrac_s"); Map map = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", selectfields, new QFilter[]{new QFilter("billno", "in", salesorder)}); + + if ("A".equals(isladingbill)) { + validatorSalesOrderClaim(data); + } // 100%L/C,100%OA、100%DP、100%DA boolean isRequireValidator = false; for (Map.Entry salesoerderEntry : map.entrySet()) { @@ -57,10 +61,8 @@ public class ExportPresentSubmitsValidator extends AbstractValidator { BigDecimal rapamt = d.getBigDecimal("yem_rapamt"); if (YEM.isNotEmpty(rapstyle)) { String number = rapstyle.getString("number"); - if ("D/A JSFS08 L/C OA D/A".contains(number)) { - if (raprate.compareTo(new BigDecimal("100")) == 0) { - isRequireValidator = true; - } else if (ispre) { + if ("D/A JSFS08 L/C OA D/A".contains(number) && raprate.compareTo(new BigDecimal("100")) == 0) { + if (ispre) { preAmt = preAmt.add(rapamt); } } @@ -70,12 +72,46 @@ public class ExportPresentSubmitsValidator extends AbstractValidator { validatorPreAmtClaimFinished(preAmt, order, data); } - if ("A".equals(paymenttype) && ("A".equals(isladingbill) || isRequireValidator)) { + if ("A".equals(paymenttype)) { arrearsVerification(dataEntity, data); } } } + /** + * 校验订舱关联合同是否 + * + * @param data + */ + private void validatorSalesOrderClaim(ExtendedDataEntity data) { + DynamicObject dataEntity = data.getDataEntity(); + DynamicObjectCollection c = dataEntity.getDynamicObjectCollection("yem_es_exportpre_el"); + Set or = new HashSet<>(); + for (DynamicObject d : c) { + or.add(d.getString("yem_contractnum")); + } + + StringBuilder sb = new StringBuilder(); + + Map map = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", "id, billno, yem_offeramount", new QFilter[]{new QFilter("billno", "in", or)}); + for (Map.Entry ors : map.entrySet()) { + DynamicObject order = ors.getValue(); + BigDecimal climeAmt = PaymentControlUtil.getContractClimeAmt(order, null); + BigDecimal offeramount = order.getBigDecimal("yem_offeramount"); + if (climeAmt.compareTo(offeramount) < 0) { + sb.append(String.format("合同号:%s,合同金额:%s 元,已认领金额:%s 元,请全部认领后提交单据!", + order.getString("billno"), + offeramount.setScale(4, RoundingMode.HALF_UP).toPlainString(), + climeAmt.setScale(4, RoundingMode.HALF_UP).toPlainString()) + ).append("\n\r"); + } + } + + if (sb.length() > 0) { + this.addMessage(data, sb.toString()); + } + } + /** * 校验合同预收部分金额是否认领完成 * From 89cc1bca4edd76daa3212924ee85d84b4584ff8d Mon Sep 17 00:00:00 2001 From: zzs Date: Sat, 4 Jan 2025 16:10:48 +0800 Subject: [PATCH 16/16] =?UTF-8?q?WIP:=E5=AF=84=E5=8D=95=E6=94=BE=E5=8D=95?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExportPresentSubmitValidator.java | 111 ++++++++++++++++-- .../ExportPresentSubmitsValidator.java | 104 +--------------- 2 files changed, 106 insertions(+), 109 deletions(-) diff --git a/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitValidator.java b/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitValidator.java index 9b827d9a..90b6cb0d 100644 --- a/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitValidator.java +++ b/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitValidator.java @@ -1,15 +1,21 @@ package com.yem.wm.es.exportpresent.validator; import com.yem.wm.es.shippingdetails.util.PaymentControlUtil; +import com.yem.wm.utils.DynamicObjectUtil; +import com.yem.wm.utils.YEM; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.ExtendedDataEntity; import kd.bos.entity.validate.AbstractValidator; +import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import static com.yem.wm.es.contractamtlist.util.FunUtil.getPayBills; import static com.yem.wm.es.contractamtlist.util.FunUtil.getShipBills; @@ -20,25 +26,112 @@ import static com.yem.wm.es.contractamtlist.util.FunUtil.getShipBills; * @Created by ZZSLL */ -public class ExportPresentSubmitValidator extends AbstractValidator -{ +public class ExportPresentSubmitValidator extends AbstractValidator { @Override - public void validate() - { + public void validate() { ExtendedDataEntity[] dataEntities = this.getDataEntities(); for (ExtendedDataEntity data : dataEntities) { DynamicObject dataEntity = data.getDataEntity(); // 款项类型 String paymenttype = dataEntity.getString("yem_paymenttype"); + + // 是否见提单 + String isladingbill = dataEntity.getString("yem_isladingbill"); + // 收汇信息 + DynamicObjectCollection receiveC = dataEntity.getDynamicObjectCollection("yem_es_exportpre_erf"); + DynamicObjectCollection detailC = dataEntity.getDynamicObjectCollection("yem_es_exportpre_el"); + + Set salesOrder = new HashSet<>(); + for (DynamicObject d : detailC) { + salesOrder.add(d.getString("yem_contractnum")); + } + String selectfields = DynamicObjectUtil.getSelectfields("yem_es_salesorder"); + selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_es_salesorder", "yem_es_salescontrac_s"); + Map orders = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", selectfields, new QFilter[]{new QFilter("billno", "in", salesOrder)}); + if ("A".equals(paymenttype)) { - arrearsVerification(dataEntity, data); + + if ("A".equals(isladingbill)) { + prePayAmtValidator(data, orders, detailC, receiveC); + } } } } - private void arrearsVerification(DynamicObject dataEntity, ExtendedDataEntity data) - { - DynamicObjectCollection collection = dataEntity.getDynamicObjectCollection("yem_es_exportpre_erf"); + /** + * 0、见提单并且100%L/C,100%OA、100%DP、100%DA并且没有预收款:判断预收款项是否认领完成 + * 0、见提单并且100%L/C,100%OA、100%DP、100%DA并且有预收款:只判断预收款项是否认领完成 + * 通过或不进行1234校验 + * 1、见提单并且正常款项:判断合同是否认领完成 + * 2、见提单并且特殊款项:判断合同是否认领完成 + * 1或2通过不进行后续校验 + * 3、未件提单并且正常款项:判断合同是否认领完成 + * 4、未件提单并且特殊款项:判断合同是否认领完成 + * 3或4通过不进行后续校验 + * + */ + private void prePayAmtValidator(ExtendedDataEntity data, Map orders, DynamicObjectCollection detailC, DynamicObjectCollection receiveC) { + StringBuilder sb = new StringBuilder(); + for (Map.Entry entry : orders.entrySet()) { + DynamicObject order = entry.getValue(); + BigDecimal shipPreRapRate = PaymentControlUtil.getShipPreRapRate(order); + BigDecimal procPreRapRate = PaymentControlUtil.getProcPreRapRate(order); + // 该合同是否包含预付 + boolean isPre = shipPreRapRate.add(procPreRapRate).compareTo(BigDecimal.ZERO) > 0; + DynamicObjectCollection collection = order.getDynamicObjectCollection("yem_es_salescontrac_s"); + boolean isSpecialRapStyle = false; + for (DynamicObject d : collection) { + DynamicObject rapstyle = d.getDynamicObject("yem_rapstyle_c"); + if (YEM.isNotEmpty(rapstyle) && "D/A JSFS08 L/C OA D/A".contains(rapstyle.getString("number"))) { + isSpecialRapStyle = true; + } + } + + // 合同金额 + BigDecimal offeramount = order.getBigDecimal("yem_offeramount"); + String billno = order.getString("billno"); + // 合同已认领金额 + BigDecimal climeAmt = PaymentControlUtil.getContractClimeAmt(order, ""); + // 只判断预付款是否认领完成 + if (isSpecialRapStyle && isPre) { + BigDecimal climeAmtShip = PaymentControlUtil.getContractClimeAmt(order, "D"); + BigDecimal climeAmtProc = PaymentControlUtil.getContractClimeAmt(order, "E"); + + BigDecimal climePreAmt = climeAmtShip.add(climeAmtProc); + + BigDecimal shipAmt = PaymentControlUtil.getAdvancePayment(shipPreRapRate, offeramount); + BigDecimal procAmt = PaymentControlUtil.getAdvancePayment(procPreRapRate, offeramount); + + BigDecimal orderPreAmt = shipAmt.add(procAmt); + + if (climePreAmt.compareTo(orderPreAmt) < 0) { + sb.append(String.format("合同 [ %s ] ,合同预收金额 [ %s ], 合同预收已认领金额合计 [ %s ],合同预收款未认领完成,请核对后提交!(L/C、OA、DP、DA)", + billno, + orderPreAmt.setScale(4, RoundingMode.HALF_UP).toPlainString(), + climePreAmt.setScale(4, RoundingMode.HALF_UP).toPlainString())).append("\r\n"); + } + } else { + if (climeAmt.compareTo(offeramount) < 0) { + boolean passed = arrearsVerification(data.getDataEntity(), data, receiveC); + if (!passed) { + sb.append(String.format("合同 [ %s ] ,合同金额 [ %s ], 合同已认领金额合计 [ %s ],合同未认领完成,请核对后提交!", + billno, + offeramount.setScale(4, RoundingMode.HALF_UP).toPlainString(), + climeAmt.setScale(4, RoundingMode.HALF_UP).toPlainString())).append("\r\n"); + } + } + } + } + + if (sb.length() > 0) { + this.addErrorMessage(data, String.valueOf(sb)); + } + } + + /** + * 走储备申请或者走欠条申请,但是款项未认领完成,不允许提交寄单放单 + */ + private boolean arrearsVerification(DynamicObject dataEntity, ExtendedDataEntity data, DynamicObjectCollection collection) { StringBuilder sb = new StringBuilder(); for (DynamicObject dynamicObject : collection) { DynamicObject saleOrder = dynamicObject.getDynamicObject("yem_saleorder"); @@ -62,5 +155,7 @@ public class ExportPresentSubmitValidator extends AbstractValidator if (sb.length() > 0) { this.addErrorMessage(data, String.valueOf(sb)); } + + return sb.length() == 0; } } diff --git a/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java b/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java index 2fd20aae..bf58ba20 100644 --- a/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java +++ b/src/main/java/com/yem/wm/es/exportpresent/validator/ExportPresentSubmitsValidator.java @@ -1,6 +1,5 @@ package com.yem.wm.es.exportpresent.validator; -import com.yem.wm.es.shippingdetails.util.PaymentControlUtil; import com.yem.wm.utils.DynamicObjectUtil; import com.yem.wm.utils.YEM; import kd.bos.dataentity.entity.DynamicObject; @@ -12,8 +11,9 @@ import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; /** * @author ljw @@ -29,110 +29,12 @@ public class ExportPresentSubmitsValidator extends AbstractValidator { DynamicObject dataEntity = data.getDataEntity(); // 款项类型 String paymenttype = dataEntity.getString("yem_paymenttype"); - // 是否见提单 - String isladingbill = dataEntity.getString("yem_isladingbill"); - - Set salesorder = new HashSet<>(); - DynamicObjectCollection collection = dataEntity.getDynamicObjectCollection("yem_es_exportpre_erf"); - for (DynamicObject d : collection) { - DynamicObject saleorder = d.getDynamicObject("yem_saleorder"); - if (YEM.isNotEmpty(saleorder)) { - salesorder.add(saleorder.getString("billno")); - } - } - - String selectfields = DynamicObjectUtil.getSelectfields("yem_es_salesorder"); - selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_es_salesorder", "yem_es_salescontrac_s"); - Map map = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", selectfields, new QFilter[]{new QFilter("billno", "in", salesorder)}); - - if ("A".equals(isladingbill)) { - validatorSalesOrderClaim(data); - } - // 100%L/C,100%OA、100%DP、100%DA - boolean isRequireValidator = false; - for (Map.Entry salesoerderEntry : map.entrySet()) { - DynamicObject order = salesoerderEntry.getValue(); - DynamicObjectCollection salescontrac = order.getDynamicObjectCollection("yem_es_salescontrac_s"); - BigDecimal preAmt = BigDecimal.ZERO;//预收金额合计 - for (DynamicObject d : salescontrac) { - DynamicObject rapstyle = d.getDynamicObject("yem_rapstyle_c"); - BigDecimal raprate = d.getBigDecimal("yem_raprate"); - boolean ispre = d.getBoolean("yem_ispre"); - BigDecimal rapamt = d.getBigDecimal("yem_rapamt"); - if (YEM.isNotEmpty(rapstyle)) { - String number = rapstyle.getString("number"); - if ("D/A JSFS08 L/C OA D/A".contains(number) && raprate.compareTo(new BigDecimal("100")) == 0) { - if (ispre) { - preAmt = preAmt.add(rapamt); - } - } - } - } - - validatorPreAmtClaimFinished(preAmt, order, data); - } - if ("A".equals(paymenttype)) { arrearsVerification(dataEntity, data); } } } - /** - * 校验订舱关联合同是否 - * - * @param data - */ - private void validatorSalesOrderClaim(ExtendedDataEntity data) { - DynamicObject dataEntity = data.getDataEntity(); - DynamicObjectCollection c = dataEntity.getDynamicObjectCollection("yem_es_exportpre_el"); - Set or = new HashSet<>(); - for (DynamicObject d : c) { - or.add(d.getString("yem_contractnum")); - } - - StringBuilder sb = new StringBuilder(); - - Map map = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", "id, billno, yem_offeramount", new QFilter[]{new QFilter("billno", "in", or)}); - for (Map.Entry ors : map.entrySet()) { - DynamicObject order = ors.getValue(); - BigDecimal climeAmt = PaymentControlUtil.getContractClimeAmt(order, null); - BigDecimal offeramount = order.getBigDecimal("yem_offeramount"); - if (climeAmt.compareTo(offeramount) < 0) { - sb.append(String.format("合同号:%s,合同金额:%s 元,已认领金额:%s 元,请全部认领后提交单据!", - order.getString("billno"), - offeramount.setScale(4, RoundingMode.HALF_UP).toPlainString(), - climeAmt.setScale(4, RoundingMode.HALF_UP).toPlainString()) - ).append("\n\r"); - } - } - - if (sb.length() > 0) { - this.addMessage(data, sb.toString()); - } - } - - /** - * 校验合同预收部分金额是否认领完成 - * - * @param preAmt 预收金额 - * @param order 合同 - * @param data - */ - private void validatorPreAmtClaimFinished(BigDecimal preAmt, DynamicObject order, ExtendedDataEntity data) { - if (preAmt.compareTo(BigDecimal.ZERO) == 0) { - return; - } - BigDecimal orderAmt = PaymentControlUtil.getContractClimeAmt(order, "D"); - BigDecimal shipAmt = PaymentControlUtil.getContractClimeAmt(order, "F"); - if (orderAmt.add(shipAmt).compareTo(preAmt) < 0) { - this.addMessage(data, String.format("合同 [ %s ] 预收合计 [ %s ] ,已经认领金额合计 [ %s ],未认领完成,请确认!", - order.getString("billno"), - preAmt.setScale(4, RoundingMode.HALF_UP).toPlainString(), - orderAmt.add(shipAmt).setScale(4, RoundingMode.HALF_UP).toPlainString())); - } - } - private void arrearsVerification(DynamicObject dataEntity, ExtendedDataEntity data) { DynamicObject yemCustomer = dataEntity.getDynamicObject("yem_customer"); if (yemCustomer != null) {