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) {