diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/MaterialinbillReversalamountOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/MaterialinbillReversalamountOp.java new file mode 100644 index 0000000..2718ad3 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/MaterialinbillReversalamountOp.java @@ -0,0 +1,85 @@ +package zcgj.zcdev.zcdev.pr.plugin.operate; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.db.tx.TX; +import kd.bos.db.tx.TXHandle; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +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.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +/** + * 入库单审核时反写付款申请单付款分录冲销金额 + */ +public class MaterialinbillReversalamountOp extends AbstractOperationServicePlugIn { + + private static final Log log = LogFactory.getLog(MaterialinbillReversalamountOp.class); + + public void onPreparePropertys(PreparePropertysEventArgs e) { + e.getFieldKeys().add("zcgj_prepayentry"); + e.getFieldKeys().add("zcgj_prepayentry.zcgj_sourceapplybillid"); + e.getFieldKeys().add("zcgj_prepayentry.zcgj_sourceapplyentryid"); + e.getFieldKeys().add("zcgj_prepayentry.zcgj_boltamount"); + + } + @Override + public void endOperationTransaction(EndOperationTransactionArgs e) { + String operationKey = e.getOperationKey(); + DynamicObject[] dataEntities = e.getDataEntities(); + switch (operationKey) { + case "audit"://审核 + log.info("执行OutFinaceconfirmReversalamountOp的提交操作,开始更新付款申请单付款信息分录冲销金额"); + updateInApplyReversaAmt(dataEntities, true); + break; + case "unaudit"://反审核 + log.info("执行OutFinaceconfirmReversalamountOp的撤销操作,开始更新付款申请单付款信息分录冲销金额"); + updateInApplyReversaAmt(dataEntities, false); + break; + } + } + /*public void endOperationTransaction(EndOperationTransactionArgs e) { + }*/ + + protected void updateInApplyReversaAmt(DynamicObject[] dataEntities, boolean isSubmit){ + List updateData = new ArrayList<>(); + for (DynamicObject dataEntity : dataEntities) { + long id = dataEntity.getLong("id"); + DynamicObjectCollection prepayentryCollection = dataEntity.getDynamicObjectCollection("zcgj_prepayentry");//冲销预付分录 + for (DynamicObject prepay : prepayentryCollection) { + long sourceapplybillid = prepay.getLong("zcgj_sourceapplybillid"); + long sourceapplyentryid = prepay.getLong("zcgj_sourceapplyentryid"); + BigDecimal boltamount = prepay.getBigDecimal("zcgj_boltamount");//支出财务确认单冲销金额 + DynamicObject paymentapply = BusinessDataServiceHelper.loadSingle(sourceapplybillid, "ec_paymentapply");//工程资金付款申请单 + if (paymentapply != null) { + DynamicObjectCollection entryentityCollection = paymentapply.getDynamicObjectCollection("entryentity"); + for (DynamicObject dynamicObject : entryentityCollection) { + BigDecimal thisrealpayamt = dynamicObject.getBigDecimal("thisrealpayamt");//付款申请单本次实付金额 + long pkValue = (long)dynamicObject.getPkValue(); + if(pkValue==sourceapplyentryid){ + BigDecimal zcgjYreversalamount = dynamicObject.getBigDecimal("zcgj_yreversalamount"); + if(!isSubmit){ + boltamount = boltamount.multiply(BigDecimal.ZERO.subtract(BigDecimal.ONE));//取相反数 + } + zcgjYreversalamount = zcgjYreversalamount.add(boltamount); + dynamicObject.set("zcgj_yreversalamount",zcgjYreversalamount); + } + } + } + updateData.add(paymentapply); + } + if(!updateData.isEmpty()){ + try (TXHandle txType = TX.requiresNew("updateAmt")) { + SaveServiceHelper.save(updateData.toArray(new DynamicObject[0])); + } + } + } + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/other/MaterialinbillGetPaymentapplyBotpPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/other/MaterialinbillGetPaymentapplyBotpPlugin.java new file mode 100644 index 0000000..a037033 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/other/MaterialinbillGetPaymentapplyBotpPlugin.java @@ -0,0 +1,41 @@ +package zcgj.zcdev.zcdev.pr.plugin.other; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.botp.plugin.AbstractConvertPlugIn; +import kd.bos.entity.botp.plugin.args.AfterBuildDrawFilterEventArgs; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; + +import java.util.ArrayList; +import java.util.List; + +/** + * 入库单上拉付款申请单botp插件 + */ +public class MaterialinbillGetPaymentapplyBotpPlugin extends AbstractConvertPlugIn { + + @Override + public void afterBuildDrawFilter(AfterBuildDrawFilterEventArgs e) { + //选单过滤 + super.afterBuildDrawFilter(e); + System.out.println("afterBuildDrawFilter——>"); + QFilter plugFilter = e.getPlugFilter();//插件追加的选单条件 + String sourceLayout = e.getSourceLayout();//获取插件设置的选单时打开的源单列表布局 + DynamicObject targetDataEntity = e.getTargetDataEntity();//当前数据包 + DynamicObjectCollection prepayentryCollection = targetDataEntity.getDynamicObjectCollection("zcgj_prepayentry"); + List ids = new ArrayList<>(); + for (DynamicObject dynamicObject : prepayentryCollection) { + long aLong = dynamicObject.getLong("zcgj_sourceapplybillid"); + ids.add(aLong); + } + QFilter filter = new QFilter("id", QCP.not_in, ids); + DynamicObject contract = targetDataEntity.getDynamicObject("contract"); + if(contract != null) { + long contractId = contract.getLong("id"); + filter = filter.and(new QFilter("entryentity.contract", QCP.equals, contractId)); + } + filter = filter.and(new QFilter("entryentity.paymenttype", QCP.equals, "PREPAYMENT")); + e.setPlugFilter(filter); + } +}