From 11479d90fb25e2b493b239b995648d752f9fddc5 Mon Sep 17 00:00:00 2001 From: zhangzhiguo <421587375@qq.com> Date: Tue, 2 Sep 2025 17:43:59 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=85=A5=E5=BA=93=E5=8D=95=E4=B8=8B=E6=8E=A8?= =?UTF-8?q?=E6=94=AF=E5=87=BA=E5=90=88=E5=90=8C=E7=BB=93=E7=AE=97=E5=8D=95?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rialInAmountToItemEntryWorkFlowPlugin.java | 268 ++++++++++++++++++ 1 file changed, 268 insertions(+) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/workflow/MaterialInAmountToItemEntryWorkFlowPlugin.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/workflow/MaterialInAmountToItemEntryWorkFlowPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/workflow/MaterialInAmountToItemEntryWorkFlowPlugin.java new file mode 100644 index 0000000..6ca1aa7 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/workflow/MaterialInAmountToItemEntryWorkFlowPlugin.java @@ -0,0 +1,268 @@ +package zcgj.zcdev.zcdev.pr.plugin.workflow; + + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.utils.StringUtils; +import kd.bos.entity.datamodel.IDataModel; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.botp.BFTrackerServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.bos.workflow.api.AgentExecution; +import kd.bos.workflow.engine.extitf.IWorkflowPlugin; +import kd.ec.contract.common.enums.DirectionEnum; +import kd.ec.contract.common.enums.PayDirectionEnum; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * 入库单计算支出合同结算单金额插件 + */ +public class MaterialInAmountToItemEntryWorkFlowPlugin implements IWorkflowPlugin { + + @Override + public void notify(AgentExecution execution) { + String eventName = execution.getEventName(); + String businessKey = execution.getBusinessKey(); + String entityNumber = execution.getEntityNumber(); + //入库单 + DynamicObject materialBill = BusinessDataServiceHelper.loadSingle(businessKey, entityNumber); + + Map> sourceBills = BFTrackerServiceHelper.findTargetBills(entityNumber, new Long[]{Long.valueOf(businessKey)}); + HashSet outContractSettleMap = sourceBills.get("ec_out_contract_settle"); + if(outContractSettleMap != null && !outContractSettleMap.isEmpty()) { + Long dataId = (Long) outContractSettleMap.toArray()[0]; + DynamicObject outContractSettle = BusinessDataServiceHelper.loadSingle(dataId, "ec_out_contract_settle"); + sumMaterialInAmountToItemEntry(outContractSettle); + calAllTypeAmount(outContractSettle); + SaveServiceHelper.save(new DynamicObject[]{outContractSettle}); + } + } + + protected void sumMaterialInAmountToItemEntry(DynamicObject outContractSettle) { + DynamicObjectCollection materialInEntry = outContractSettle.getDynamicObjectCollection("materialinentry"); + if (materialInEntry != null && materialInEntry.size() != 0) { + BigDecimal amount = BigDecimal.ZERO; + BigDecimal ofTaxAmount = BigDecimal.ZERO; + boolean isSettleTrans = false; + BigDecimal transAmount = BigDecimal.ZERO; + BigDecimal transOfTaxAmount = BigDecimal.ZERO; + + for(DynamicObject materialInData : materialInEntry) { + BigDecimal materialTaxAmount = materialInData.getBigDecimal("mattaxamount"); + BigDecimal materialNoTaxAmount = materialInData.getBigDecimal("matnotaxamount"); + amount = amount.add(materialNoTaxAmount); + ofTaxAmount = ofTaxAmount.add(materialTaxAmount); + boolean settleTrans = materialInData.getBoolean("istranssettle"); + if (settleTrans) { + BigDecimal transTaxAmount = materialInData.getBigDecimal("transtaxamount"); + BigDecimal transNoTaxAmount = materialInData.getBigDecimal("transnotaxamount"); + transAmount = transAmount.add(transNoTaxAmount); + transOfTaxAmount = transOfTaxAmount.add(transTaxAmount); + isSettleTrans = true; + } + } + + DynamicObjectCollection itementry = outContractSettle.getDynamicObjectCollection("itementry"); + DynamicObject dynamicObject = itementry.get(0); + + dynamicObject.set("oftaxamount", ofTaxAmount); + dynamicObject.set("amount", amount); + + if (BigDecimal.ZERO.compareTo(amount) != 0) { + //this.getPageCache().put("ignoreRateChanged", "1"); + dynamicObject.set("rate", ofTaxAmount.subtract(amount).divide(amount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100))); + } + + dynamicObject.set("taxamt", ofTaxAmount.subtract(amount)); + + //int entryRowCount = this.getModel().getEntryRowCount("itementry"); + if (itementry.size() <= 1) { + if (isSettleTrans) { + DynamicObject dynamicObject1 = itementry.addNew(); + //this.getModel().insertEntryRow("itementry", 1); + dynamicObject1.set("seq",2); + DynamicObject payitem = BusinessDataServiceHelper.loadSingle("ec_payitem", + "id,direction", new QFilter[]{new QFilter("id", QCP.equals,760004250343646208L)});// + dynamicObject1.set("payitem", payitem); + this.fillItemEntryCbs(1,outContractSettle, itementry ); + } + } else { + DynamicObject transSettleItem = itementry.get(1); + //DynamicObject transSettleItem = this.getModel().getEntryRowEntity("itementry", 1); + DynamicObject payItem = transSettleItem.getDynamicObject("payitem"); + boolean hasSettleTrans = false; + if(payItem!=null){ + hasSettleTrans = "YFJS".equals(payItem.getString("number")); + } + if (isSettleTrans && !hasSettleTrans) { + DynamicObject dynamicObject1 = itementry.addNew(); + dynamicObject1.set("seq",2); + //this.getModel().insertEntryRow("itementry", 1); + DynamicObject payitem = BusinessDataServiceHelper.loadSingle("ec_payitem", + "id,direction", new QFilter[]{new QFilter("id", QCP.equals,760004250343646208L)});// + dynamicObject1.set("payitem", payitem); + this.fillItemEntryCbs(1,outContractSettle, itementry); + } else if (!isSettleTrans && hasSettleTrans) { + transSettleItem.set("oftaxamount", transOfTaxAmount); + transSettleItem.set("amount", transAmount); + itementry.remove(1); + //this.getModel().deleteEntryRow("itementry", 1); + } + } + + if (isSettleTrans) { + DynamicObject transSettleItem = itementry.get(1); + transSettleItem.set("oftaxamount", transOfTaxAmount); + transSettleItem.set("amount", transAmount); + if (BigDecimal.ZERO.compareTo(transAmount) != 0) { + transSettleItem.set("rate", transOfTaxAmount.subtract(transAmount).divide(transAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100))); + } + + transSettleItem.set("taxamt", transOfTaxAmount.subtract(transAmount)); + } + } else { + DynamicObjectCollection itementry = outContractSettle.getDynamicObjectCollection("itementry"); + //int entryRowCount = this.getModel().getEntryRowCount("itementry"); + if (itementry.size() > 1) { + DynamicObject transSettleItem = itementry.get(1); + //DynamicObject transSettleItem = this.getModel().getEntryRowEntity("itementry", 1); + DynamicObject payItem = transSettleItem.getDynamicObject("payitem"); + if (payItem != null && "YFJS".equals(payItem.getString("number"))) { + itementry.remove(1); + //this.getModel().deleteEntryRow("itementry", 1); + } + } + itementry.get(0).set("oftaxamount", 0); + //this.getModel().setValue("oftaxamount", 0, 0); + DynamicObject taxRate =outContractSettle.getDynamicObject("taxrate"); + // DynamicObject taxRate = this.getModel().getDataEntity().getDynamicObject("taxrate"); + if (taxRate != null) { + itementry.get(0).set("rate", taxRate.getBigDecimal("taxrate")); + // this.getModel().setValue("rate", taxRate.getBigDecimal("taxrate"), 0); + } + + itementry.get(0).set("taxamt", 0); + } + + } + + protected void fillItemEntryCbs(int row,DynamicObject outContractSettle,DynamicObjectCollection itementry) { + DynamicObject cbs = this.getNeedFillCbs(outContractSettle); + if (cbs != null && !(Boolean)outContractSettle.getBoolean("isonlist")) { + itementry.get(row).set("itementry", cbs.getPkValue()); + //this.getModel().setValue("itemcbs", cbs.getPkValue(), row); + } + } + + protected DynamicObject getNeedFillCbs(DynamicObject outContractSettle) { + DynamicObject project = outContractSettle.getDynamicObject("project"); + DynamicObject contract = outContractSettle.getDynamicObject("contract"); + if (project != null && contract != null) { + boolean isBudgetControl = project.getBoolean("budgetcontrol"); + String controlModel = project.getString("costcontrolmodel"); + if (isBudgetControl && controlModel.contains("1")) { + return contract.getDynamicObject("cbs"); + } + } + + return null; + } + + public static void calAllTypeAmount(DynamicObject outContractSettle) { + //DynamicObject thisSettleObj = thisModel.getDataEntity(); + DynamicObject contract = outContractSettle.getDynamicObject("contract"); + if (contract != null) { + contract = BusinessDataServiceHelper.loadSingle(contract.getPkValue(), "ec_out_contract"); + BigDecimal calOfTaxAmt = BigDecimal.ZERO; + BigDecimal notCalOfTaxAmt = BigDecimal.ZERO; + BigDecimal settleOfTaxAmount = outContractSettle.getBigDecimal("settleoftaxamount"); + BigDecimal totalCalOfTaxAmt = contract.getBigDecimal("totalcaloftaxamt"); + BigDecimal totalNotCalOfTaxAmt = contract.getBigDecimal("totalnotcaloftaxamt"); + BigDecimal totalPlanPayOfTaxAmt = contract.getBigDecimal("totalapplyoftaxamount"); + BigDecimal totalRealPayOfTaxAmt = contract.getBigDecimal("totalrealoftaxamount"); + BigDecimal totalSettleOfTaxAmount = contract.getBigDecimal("totalsettleoftaxamount"); + BigDecimal calOfAmt = BigDecimal.ZERO; + BigDecimal notCalOfAmt = BigDecimal.ZERO; + BigDecimal settleAmount = outContractSettle.getBigDecimal("settleamount"); + BigDecimal totalCalOfAmt = contract.getBigDecimal("totalcalofamt"); + BigDecimal totalNotCalOfAmt = contract.getBigDecimal("totalnotcalofamt"); + BigDecimal totalPlanPayOfAmt = contract.getBigDecimal("totalapplyamount"); + BigDecimal totalRealPayOfAmt = contract.getBigDecimal("totalrealamount"); + BigDecimal totalSettleOfAmount = contract.getBigDecimal("totalsettleamount"); + //thisModel.updateCache(); + for(DynamicObject itemEntry : outContractSettle.getDynamicObjectCollection("itementry")) { + //for(DynamicObject itemEntry : thisModel.getEntryEntity("itementry")) { + DynamicObject payItem = itemEntry.getDynamicObject("payitem"); + if (payItem != null) { + String direction = payItem.getString("direction"); + String paydirection = contract.getString("paydirection"); + if (direction != null) { + if (StringUtils.equals("506427748873442304", String.valueOf(payItem.getPkValue()))) { + if (direction.equals(DirectionEnum.ADD.getValue())) { + calOfTaxAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfTaxAmt.add(itemEntry.getBigDecimal("oftaxamount")) : itemEntry.getBigDecimal("oftaxamount"); + calOfAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfAmt.add(itemEntry.getBigDecimal("amount")) : itemEntry.getBigDecimal("amount"); + } else if (direction.equals(DirectionEnum.SUB.getValue())) { + calOfTaxAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfTaxAmt.subtract(itemEntry.getBigDecimal("oftaxamount")) : BigDecimal.ZERO.subtract(itemEntry.getBigDecimal("oftaxamount")); + calOfAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfTaxAmt.subtract(itemEntry.getBigDecimal("amount")) : BigDecimal.ZERO.subtract(itemEntry.getBigDecimal("amount")); + } + } else if (direction.equals(DirectionEnum.ADD.getValue())) { + notCalOfTaxAmt = notCalOfTaxAmt.add(itemEntry.getBigDecimal("oftaxamount")); + notCalOfAmt = notCalOfAmt.add(itemEntry.getBigDecimal("amount")); + } else if (direction.equals(DirectionEnum.SUB.getValue())) { + notCalOfTaxAmt = notCalOfTaxAmt.subtract(itemEntry.getBigDecimal("oftaxamount")); + notCalOfAmt = notCalOfAmt.subtract(itemEntry.getBigDecimal("amount")); + } + } + } + } + + settleOfTaxAmount = calOfTaxAmt.add(notCalOfTaxAmt); + settleAmount = calOfAmt.add(notCalOfAmt); + totalCalOfTaxAmt = totalCalOfTaxAmt.add(calOfTaxAmt); + totalCalOfAmt = totalCalOfAmt.add(calOfAmt); + totalNotCalOfTaxAmt = totalNotCalOfTaxAmt.add(notCalOfTaxAmt); + totalNotCalOfAmt = totalNotCalOfAmt.add(notCalOfAmt); + totalSettleOfTaxAmount = totalSettleOfTaxAmount.add(settleOfTaxAmount); + totalSettleOfAmount = totalSettleOfAmount.add(settleAmount); + BigDecimal calTaxAmt = calOfTaxAmt.subtract(calOfAmt); + BigDecimal notCalTaxAmt = notCalOfTaxAmt.subtract(notCalOfAmt); + BigDecimal taxAmount = settleOfTaxAmount.subtract(settleAmount); + BigDecimal totalCalTaxAmt = totalCalOfTaxAmt.subtract(totalCalOfAmt); + BigDecimal totalNotCalTaxAmt = totalNotCalOfTaxAmt.subtract(totalNotCalOfAmt); + BigDecimal totalSettleTaxAmount = totalSettleOfTaxAmount.subtract(totalSettleOfAmount); + BigDecimal totalPlanPayTaxAmt = totalPlanPayOfTaxAmt.subtract(totalPlanPayOfAmt); + BigDecimal totalRealPayTaxAmt = totalRealPayOfTaxAmt.subtract(totalRealPayOfAmt); + outContractSettle.set("caloftaxamt", calOfTaxAmt); + outContractSettle.set("notcaloftaxamt", notCalOfTaxAmt); + outContractSettle.set("settleoftaxamount", settleOfTaxAmount); + outContractSettle.set("totalcaloftaxamt", totalCalOfTaxAmt); + outContractSettle.set("totalnotcaloftaxamt", totalNotCalOfTaxAmt); + outContractSettle.set("totalsettleoftaxamount", totalSettleOfTaxAmount); + outContractSettle.set("totalplanpayoftaxamt", totalPlanPayOfTaxAmt); + outContractSettle.set("totalrealpayoftaxamt", totalRealPayOfTaxAmt); + outContractSettle.set("calofamt", calOfAmt); + outContractSettle.set("notcalofamt", notCalOfAmt); + outContractSettle.set("settleamount", settleAmount); + outContractSettle.set("totalcalofamt", totalCalOfAmt); + outContractSettle.set("totalnotcalofamt", totalNotCalOfAmt); + outContractSettle.set("totalsettleofamount", totalSettleOfAmount); + outContractSettle.set("totalplanpayofamt", totalPlanPayOfAmt); + outContractSettle.set("totalrealpayofamt", totalRealPayOfAmt); + outContractSettle.set("caltaxamt", calTaxAmt); + outContractSettle.set("notcaltaxamt", notCalTaxAmt); + outContractSettle.set("taxamount", taxAmount); + outContractSettle.set("totalcaltaxamt", totalCalTaxAmt); + outContractSettle.set("totalnotcaltaxamt", totalNotCalTaxAmt); + outContractSettle.set("totalsettletaxamount", totalSettleTaxAmount); + outContractSettle.set("totalplanpaytaxamt", totalPlanPayTaxAmt); + outContractSettle.set("totalrealpaytaxamt", totalRealPayTaxAmt); + } + } +}