diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyCopyPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyCopyPlugin.java index 9bab021..ea6251e 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyCopyPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyCopyPlugin.java @@ -49,7 +49,7 @@ public class PaymentapplyCopyPlugin extends AbstractBillPlugIn implements Plugi for (int i = 0; i < entity.size(); i++) { DynamicObject dynamicObject = entity.get(i); DynamicObjectCollection dynamicObjectCollection = dynamicObject.getDynamicObjectCollection("subentryentity"); - if(dynamicObjectCollection != null || !dynamicObjectCollection.isEmpty()){ + if(dynamicObjectCollection != null && !dynamicObjectCollection.isEmpty()){ this.getView().setEnable(false,i,"thisapplyoftax"); } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentRegisterFundOpExt.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentRegisterFundOpExt.java new file mode 100644 index 0000000..9795bad --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentRegisterFundOpExt.java @@ -0,0 +1,214 @@ +package zcgj.zcdev.zcdev.pr.plugin.operate; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.utils.StringUtils; +import kd.bos.entity.EntityMetadataCache; +import kd.bos.entity.MainEntityType; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.EndOperationTransactionArgs; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.DeleteServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.ec.contract.opplugin.fund.PaymentRegisterFundOp; + +import java.math.BigDecimal; +import java.util.HashSet; +import java.util.Set; + +public class PaymentRegisterFundOpExt extends PaymentRegisterFundOp { + + private static final Log log = LogFactory.getLog(PaymentRegisterFundOpExt.class); + + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + } + + @Override + public void endOperationTransaction(EndOperationTransactionArgs e) { + String operationKey = e.getOperationKey(); + DynamicObject[] dataEntities = e.getDataEntities(); + switch (operationKey) { + case "audit": + log.info("执行PaymentRegisterFundOpExt的审核操作,开始更新合同,付款类型实付金额"); + this.updateContTypeAmtTotalRealAmt(dataEntities); + log.info("执行PaymentRegisterFundOpExt的审核操作,完成更新合同,付款类型实付金额"); + + log.info("执行PaymentRegisterFundOpExt的审核操作,开始更新请款单实付金额"); + this.updateInApplyRealPayAmt(dataEntities, true); + log.info("执行PaymentRegisterFundOpExt的审核操作,完成更新请款单实付金额"); + break; + case "unaudit": + log.info("执行PaymentRegisterFundOpExt的反审核操作,开始更新合同,付款类型实付金额"); + this.updateContTypeAmtTotalRealAmtWhenUnAudit(dataEntities); + log.info("执行PaymentRegisterFundOpExt的反审核操作,完成更新合同,付款类型实付金额"); + + log.info("执行PaymentRegisterFundOpExt的反审核操作,开始更新请款单实付金额"); + this.updateInApplyRealPayAmt(dataEntities, false); + log.info("执行PaymentRegisterFundOpExt的反审核操作,完成更新请款单实付金额"); + } + } + + @Override + protected void updateInApplyRealPayAmt(DynamicObject[] dataEntities, boolean isAudit) { + // super.updateInApplyRealPayAmt(dataEntities, isAudit); + BigDecimal ratio = BigDecimal.ONE; + if (!isAudit) { + ratio = BigDecimal.ZERO.subtract(ratio); + } + + for(DynamicObject object : dataEntities) { + Long referregisterid = object.getLong("referregisterid");//关联登记单id(付款处理单Id) + QFilter paybillFilter = new QFilter("id", "=", referregisterid); + //付款处理单 + DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", "entry,entry.e_corebillentryseq", new QFilter[]{paybillFilter}); + Set payBillSer = new HashSet<>(); + if(paybill!=null){ + for (DynamicObject dynamicObject : paybill.getDynamicObjectCollection("entry")) { + int corebillentryseq = dynamicObject.getInt("e_corebillentryseq");//核心单据行号 + payBillSer.add(corebillentryseq); + log.info("执行PaymentRegisterFundOpExt:付款处理单涉及核心单据行号:"+corebillentryseq); + } + } + for(DynamicObject entry : object.getDynamicObjectCollection("entryentity")) { //付款登记单 付款信息 + DynamicObject paymentApplyF7 = entry.getDynamicObject("paymentapply");//付款登记单关联 付款申请单 + DynamicObject contract = entry.getDynamicObject("contract");//付款登记单关联 合同 + BigDecimal thisOfTaxAmt = entry.getBigDecimal("thispaymentoftaxamount"); //付款登记单 本次实付金额 + + thisOfTaxAmt = thisOfTaxAmt.multiply(ratio); + String payType = entry.getString("paytype"); //支付类型 + if (paymentApplyF7 != null) { + QFilter paymentApplyFilter = new QFilter("id", "=", paymentApplyF7.getLong("id")); + DynamicObject paymentApply = BusinessDataServiceHelper.loadSingle("ec_paymentapply", "realpayamt,billcompletepay,ismulticurrency,exchangerate,stdrealpayamt,entryentity,entryentity.seq,contract,paymenttype,applyoftaxamount,thisrealpayamt,thiswaitpayamt,completepay", new QFilter[]{paymentApplyFilter}); + DynamicObjectCollection paymentEntryCol = paymentApply.getDynamicObjectCollection("entryentity");//付款申请单分录 + boolean billcompletepay = true; + + for(DynamicObject paymentEntry : paymentEntryCol) { + String applyPayType = paymentEntry.getString("paymenttype"); + DynamicObject applyContract = paymentEntry.getDynamicObject("contract"); + int seq = paymentEntry.getInt("seq"); //付款申请单分录行号 + if (contract != null && applyContract != null + && StringUtils.equals(contract.getString("id"), applyContract.getString("id")) + && StringUtils.equals(payType, applyPayType) + && payBillSer.contains(seq) + ) { + log.info("执行PaymentRegisterFundOpExt:付款申请单分录行号和付款处理单核心单据分录行号匹配成功"); + BigDecimal oldRealPayAmt = paymentEntry.getBigDecimal("thisrealpayamt"); + BigDecimal applyOfTaxAmount = paymentEntry.getBigDecimal("applyoftaxamount"); + BigDecimal thisRealPayAmt = oldRealPayAmt.add(thisOfTaxAmt); + BigDecimal thisWaitPayAmt = applyOfTaxAmount.subtract(thisRealPayAmt); + paymentEntry.set("thisrealpayamt", thisRealPayAmt); + paymentEntry.set("thiswaitpayamt", thisWaitPayAmt); + if (thisRealPayAmt.compareTo(applyOfTaxAmount) >= 0) { + paymentEntry.set("completepay", true); + } else { + paymentEntry.set("completepay", false); + } + } + } + + BigDecimal totalRealpayAmt = BigDecimal.ZERO; + + for(DynamicObject inComeEntry : paymentEntryCol) { + if (!inComeEntry.getBoolean("completepay")) { + billcompletepay = false; + } + + totalRealpayAmt = totalRealpayAmt.add(inComeEntry.getBigDecimal("thisrealpayamt")); + } + + if (paymentApply.getBoolean("ismulticurrency")) { + BigDecimal exchangerate = paymentApply.getBigDecimal("exchangerate"); + BigDecimal stdRealPayAmt = totalRealpayAmt.multiply(exchangerate); + paymentApply.set("stdrealpayamt", stdRealPayAmt); + } + + paymentApply.set("realpayamt", totalRealpayAmt); + paymentApply.set("billcompletepay", billcompletepay); + SaveServiceHelper.save(new DynamicObject[]{paymentApply}); + } + } + } + } + + @Override + protected void updateContTypeAmtTotalRealAmt(DynamicObject[] dataEntities) { + //super.updateContTypeAmtTotalRealAmt(dataEntities); + for(DynamicObject object : dataEntities) { + for(DynamicObject entry : object.getDynamicObjectCollection("entryentity")) { + DynamicObject contract = entry.getDynamicObject("contract"); + BigDecimal thisOfTaxAmt = entry.getBigDecimal("thispaymentoftaxamount"); + String type = entry.getString("paytype"); + QFilter contractFilter = new QFilter("contract", "=", contract.getLong("id")); + QFilter typeFilter = new QFilter("type", "=", type); + DynamicObject node = entry.getDynamicObject("paynode"); + String nodeText = entry.getString("paynodetext"); + if (node != null) { + typeFilter.and("paynode", "=", node.getPkValue()); + } else if (StringUtils.isNotEmpty(nodeText)) { + typeFilter.and("node", "=", nodeText); + } + + DynamicObject[] contTypeAmts = BusinessDataServiceHelper.load("ecpf_conttypeamt", "totalrealamt", new QFilter[]{contractFilter, typeFilter}); + if (contTypeAmts != null && contTypeAmts.length != 0) { + for(DynamicObject contTypeAmt : contTypeAmts) { + BigDecimal totalRealAmt = contTypeAmt.getBigDecimal("totalrealamt"); + contTypeAmt.set("totalrealamt", totalRealAmt.add(thisOfTaxAmt)); + } + + SaveServiceHelper.save(contTypeAmts); + } else { + BigDecimal payRate = entry.getBigDecimal("controlrate"); + MainEntityType entityType = EntityMetadataCache.getDataEntityType("ecpf_conttypeamt"); + DynamicObject newContTypeAmtObj = new DynamicObject(entityType); + newContTypeAmtObj.set("contract", contract); + newContTypeAmtObj.set("type", type); + newContTypeAmtObj.set("ratio", payRate); + newContTypeAmtObj.set("totalrealamt", thisOfTaxAmt); + newContTypeAmtObj.set("paynode", entry.get("paynode")); + newContTypeAmtObj.set("node", entry.get("paynode") == null ? entry.get("paynodetext") : ""); + SaveServiceHelper.save(new DynamicObject[]{newContTypeAmtObj}); + } + } + } + } + + @Override + protected void updateContTypeAmtTotalRealAmtWhenUnAudit(DynamicObject[] dataEntities) { + //super.updateContTypeAmtTotalRealAmtWhenUnAudit(dataEntities); + for(DynamicObject object : dataEntities) { + for(DynamicObject entry : object.getDynamicObjectCollection("entryentity")) { + DynamicObject contract = entry.getDynamicObject("contract"); + BigDecimal thisOfTaxAmt = entry.getBigDecimal("thispaymentoftaxamount"); + String type = entry.getString("paytype"); + QFilter contractFilter = new QFilter("contract", "=", contract.getLong("id")); + QFilter typeFilter = new QFilter("type", "=", type); + DynamicObject node = entry.getDynamicObject("paynode"); + String nodeText = entry.getString("paynodetext"); + if (node != null) { + typeFilter.and("paynode", "=", node.getPkValue()); + } else if (StringUtils.isNotEmpty(nodeText)) { + typeFilter.and("node", "=", nodeText); + } + + DynamicObject[] contTypeAmts = BusinessDataServiceHelper.load("ecpf_conttypeamt", "totalrealamt,totalshowamt,ratio,source", new QFilter[]{contractFilter, typeFilter}); + if (contTypeAmts != null && contTypeAmts.length != 0) { + for(DynamicObject contTypeAmt : contTypeAmts) { + BigDecimal totalRealAmt = contTypeAmt.getBigDecimal("totalrealamt"); + String source = contTypeAmt.getString("source"); + contTypeAmt.set("totalrealamt", totalRealAmt.subtract(thisOfTaxAmt)); + if (StringUtils.isBlank(source) && BigDecimal.ZERO.compareTo(contTypeAmt.getBigDecimal("totalshowamt")) == 0 && BigDecimal.ZERO.compareTo(contTypeAmt.getBigDecimal("totalrealamt")) == 0) { + DeleteServiceHelper.delete("ecpf_conttypeamt", new QFilter[]{new QFilter("id", "=", contTypeAmt.getLong("id"))}); + } + } + + SaveServiceHelper.save(contTypeAmts); + } + } + } + } +}