1.入库单下推支出合同结算单工作流插件

This commit is contained in:
zhangzhiguo 2025-09-02 17:43:59 +08:00
parent 1955726e15
commit 11479d90fb
1 changed files with 268 additions and 0 deletions

View File

@ -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<String, HashSet<Long>> sourceBills = BFTrackerServiceHelper.findTargetBills(entityNumber, new Long[]{Long.valueOf(businessKey)});
HashSet<Long> 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);
}
}
}