diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/AssistbalanceAutoData.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/AssistbalanceAutoData.java index 69e3ba6..697d707 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/AssistbalanceAutoData.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/common/AssistbalanceAutoData.java @@ -133,6 +133,7 @@ public class AssistbalanceAutoData { DynamicObject assistbalance =BusinessDataServiceHelper.newDynamicObject("zcgj_rpt_assistbalance"); assistbalance.set("zcgj_debitlocal", record.getDebitlocal()); + assistbalance.set("zcgj_beginlocal", record.getBeginlocal()); assistbalance.set("zcgj_creditlocal", record.getCreditlocal()); assistbalance.set("zcgj_yeardebitfor", record.getYeardebitfor()); assistbalance.set("zcgj_yearcreditfor", record.getYearcreditfor()); diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/CasPaybillToEcFundPlanApplyOp.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/CasPaybillToEcFundPlanApplyOp.java new file mode 100644 index 0000000..d2b6023 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/CasPaybillToEcFundPlanApplyOp.java @@ -0,0 +1,126 @@ +package zcgj.zcdev.zcdev.fs.plugin.operate; + +import com.grapecity.documents.excel.B; +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.args.AfterOperationArgs; +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.botp.BFTrackerServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.bos.util.StringUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +/** + * 付款处理单反写资金计划申请实际付款 + */ +public class CasPaybillToEcFundPlanApplyOp extends AbstractOperationServicePlugIn { + + private static final Log log = LogFactory.getLog(CasPaybillToEcFundPlanApplyOp.class); + + @Override + public void endOperationTransaction(EndOperationTransactionArgs e) { + String operationKey = e.getOperationKey(); + DynamicObject[] dataEntities = e.getDataEntities(); + switch (operationKey) { + case "pay"://付款 + log.info("执行CasPaybillToEcFundPlanApplyOp的付款操作,开始更资金计划申请,付款类型实付金额"); + updateInApplyRealPayAmt(dataEntities, true); + break; + case "unpay"://取消付款 + log.info("执行CasPaybillToEcFundPlanApplyOp的取消付款操作,开始更资金计划申请,付款类型实付金额"); + updateInApplyRealPayAmt(dataEntities, false); + break; + } + } + /*public void endOperationTransaction(EndOperationTransactionArgs e) { + }*/ + + protected void updateInApplyRealPayAmt(DynamicObject[] dataEntities, boolean isPay){ + List updateData = new ArrayList<>(); + for (DynamicObject dataEntity : dataEntities) { + long id = dataEntity.getLong("id"); + // idList.add(id); + Map> sourceBills = BFTrackerServiceHelper.findSourceBills("cas_paybill", new Long[]{id}); + HashSet zcgjEcFundingplanapply = sourceBills.get("zcgj_ec_fundingplanapply"); + if(zcgjEcFundingplanapply != null && !zcgjEcFundingplanapply.isEmpty()) { + Long dataId = (Long)zcgjEcFundingplanapply.toArray()[0]; + + //计算实际付款金额 + DynamicObject paybill = BusinessDataServiceHelper.loadSingle(id, "cas_paybill"); + DynamicObject settletype = paybill.getDynamicObject("settletype"); + String typeString = ""; + if(settletype!=null){ + String type = settletype.getString("number"); + if("002".equals(type)){ //司库-对公 + //现金 + typeString = "XJ"; + }else if("JSFS07".equals(type)){ //银行承兑汇票 + //银行承兑 + typeString = "YHCD"; + }else if("JSFS06".equals(type)){ //商业承兑汇票 + //商业承兑 + typeString = "SYCD"; + }else if("JSFS26".equals(type)){ //供应链 + //供应链 + typeString = "GYL"; + }else if("JSFS27".equals(type)){ //其他金融产品 + //其他金融产品 + typeString = "QTJRCP"; + } + } + DynamicObjectCollection entryCpllection = paybill.getDynamicObjectCollection("entry"); + BigDecimal allActamt = BigDecimal.ZERO; + for (DynamicObject entry : entryCpllection) { + BigDecimal eActamt = entry.getBigDecimal("e_actamt");//获取实付金额 + allActamt = allActamt.add(eActamt); + } + + //读取资金计划申请 + DynamicObject fundingplanapply = BusinessDataServiceHelper.loadSingle(dataId, "zcgj_ec_fundingplanapply"); + DynamicObjectCollection zcgjFinApprovedAmount = fundingplanapply.getDynamicObjectCollection("zcgj_fin_approved_amount"); + for (DynamicObject dynamicObject : zcgjFinApprovedAmount) { + String zcgjSetttype = dynamicObject.getString("zcgj_setttype"); + if(typeString.equals(zcgjSetttype)){ + BigDecimal zcgjAmountRecommended = dynamicObject.getBigDecimal("zcgj_amountpaid");//实际付款金额 + BigDecimal amountrecommended = BigDecimal.ZERO; + if(!isPay){ + amountrecommended = allActamt; + allActamt = allActamt.multiply(BigDecimal.ZERO.subtract(BigDecimal.ONE));//取相反数 + } + allActamt = allActamt.add(zcgjAmountRecommended); + dynamicObject.set("zcgj_amountpaid", allActamt);//实付金额 + dynamicObject.set("zcgj_amount_inpayment",amountrecommended);// + + //zcgj_amount_remaining = zcgj_hdamount - zcgj_amount_inpayment - zcgj_amountpaid + //剩余待拨付金额 = 财务核定金额 - 付款处理中金额 - 实付金额 + BigDecimal hdamount = dynamicObject.getBigDecimal("zcgj_hdamount"); + if(hdamount !=null && isPay){ + BigDecimal subtract = hdamount.subtract(amountrecommended).subtract(allActamt); + dynamicObject.set("zcgj_amount_remaining",subtract); + }else if(hdamount != null){ + BigDecimal subtract = hdamount.add(amountrecommended).subtract(allActamt);//实付金额已经成为相反数 + dynamicObject.set("zcgj_amount_remaining",subtract); + } + } + } + updateData.add(fundingplanapply); + } + } + 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/form/AimCostReViewBillPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/AimCostReViewBillPlugin.java new file mode 100644 index 0000000..a5f6eb9 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/AimCostReViewBillPlugin.java @@ -0,0 +1,85 @@ +package zcgj.zcdev.zcdev.pr.plugin.form; + +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType; +import kd.bos.entity.datamodel.events.ChangeData; +import kd.bos.entity.datamodel.events.PropertyChangedArgs; +import kd.bos.form.field.RefBillEdit; +import kd.bos.form.field.events.BeforeF7SelectEvent; +import kd.bos.form.field.events.BeforeF7SelectListener; +import kd.bos.isc.util.misc.StringUtil; +import kd.bos.list.ListShowParameter; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; + +import java.util.ArrayList; +import java.util.EventObject; +import java.util.List; + +/** + * 目标成本评审表单插件 + * 说明:以项目和可用版本过滤工序成本预算字段,且将工序成本预算内的字段赋值到项目成本预算分录中 + */ +public class AimCostReViewBillPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener { + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + RefBillEdit refBillEdit = getView().getControl("zcgj_aimcostbill");//工序成本预算 + refBillEdit.addBeforeF7SelectListener(this); + } + + @Override + public void propertyChanged(PropertyChangedArgs e) { + super.propertyChanged(e); + String key = e.getProperty().getName(); + if (StringUtil.equals(key, "zcgj_aimcostbill")) { + //工序成本预算 + ChangeData[] changeSet = e.getChangeSet(); + ChangeData changeData = changeSet[0]; + DynamicObject aimCostBill = (DynamicObject) changeData.getNewValue();//新值 + DynamicObjectCollection costEntryEntityCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("costentryentity");//项目成本预算分录 + DynamicObjectType costEntryEntityType = costEntryEntityCollection.getDynamicObjectType(); + costEntryEntityCollection.clear(); + if (aimCostBill != null) { + DynamicObject aimCostBillCbs = BusinessDataServiceHelper.loadSingle(aimCostBill.getPkValue(), "ecco_aimcostbillcbs");//工序成本预算单 + if (aimCostBillCbs != null) { + DynamicObject newCostEntryEntity = new DynamicObject(costEntryEntityType); + newCostEntryEntity.set("costbillno", aimCostBillCbs.get("billno"));//单据编号 + newCostEntryEntity.set("costbillname", aimCostBillCbs.get("name"));//单据名称 + newCostEntryEntity.set("costunitproject", aimCostBillCbs.get("unitproject"));//单位工程/标段 + newCostEntryEntity.set("budcost", aimCostBillCbs.get("totalamount"));//预算成本金额 + newCostEntryEntity.set("costexecutable", aimCostBillCbs.get("isenable"));//执行版本 + newCostEntryEntity.set("costversion", aimCostBillCbs.get("versionno"));//版本号 + newCostEntryEntity.set("costfrom", "CBS");//数据来源 + newCostEntryEntity.set("costfromid", aimCostBillCbs.get("id"));//数据id + costEntryEntityCollection.add(newCostEntryEntity); + } + } + this.getView().updateView("costentryentity");//刷新项目成本预算分录 + } else if (StringUtil.equals(key, "project")) { + ChangeData[] changeSet = e.getChangeSet(); + ChangeData changeData = changeSet[0]; + Object newValue = changeData.getNewValue();//新值 + if (newValue == null) { + this.getModel().setValue("zcgj_aimcostbill", null); + } + } + } + + @Override + public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) { + ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); + List qFilter = new ArrayList<>(); + DynamicObject project = (DynamicObject) this.getModel().getValue("project");//项目 + if (project != null) { + qFilter.add(new QFilter("project", "=", project.getPkValue())); + qFilter.add(new QFilter("isenable", "=", true)); + } else { + qFilter.add(new QFilter("project", "=", 1234567890)); + } + formShowParameter.getListFilterParameter().setQFilters(qFilter); + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CostAllocatorBillPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CostAllocatorBillPlugin.java index 697f58f..7f3fbd1 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CostAllocatorBillPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/CostAllocatorBillPlugin.java @@ -11,7 +11,10 @@ import kd.bos.form.control.events.ItemClickEvent; import kd.bos.form.plugin.AbstractFormPlugin; import kd.bos.servicehelper.BusinessDataServiceHelper; +import java.math.BigDecimal; import java.util.EventObject; +import java.util.HashMap; +import java.util.Map; /* * 使用插件注册位置:支出合同结算表单插件 @@ -57,11 +60,12 @@ public class CostAllocatorBillPlugin extends AbstractFormPlugin { newProcessAllocEntity.set("zcgj_amountnotax", listEntry.get("thisamount"));//不含税金额-本期计量金额 newProcessAllocEntity.set("zcgj_rateval", listEntry.get("entrytaxrate"));//税率(%)-税率(%) newProcessAllocEntity.set("zcgj_taxamt", listEntry.get("thistax"));//税额-本期税额 - newProcessAllocEntity.set("zcgj_pa_remark", listEntry.get("desc"));//费用说明-说明 processAllocEntityCollection.add(newProcessAllocEntity); } } } + // 添加合并逻辑:按工序和税率组合合并相同项 + mergeProcessAllocEntriesByProcessAndRate(processAllocEntityCollection); } this.getView().updateView("zcgj_processallocatentity");//工序分摊 } else { @@ -124,14 +128,87 @@ public class CostAllocatorBillPlugin extends AbstractFormPlugin { newProcessAllocEntity.set("zcgj_amountnotax", listEntry.get("thisamount"));//不含税金额-本期计量金额 newProcessAllocEntity.set("zcgj_rateval", listEntry.get("entrytaxrate"));//税率(%)-税率(%) newProcessAllocEntity.set("zcgj_taxamt", listEntry.get("thistax"));//税额-本期税额 - newProcessAllocEntity.set("zcgj_pa_remark", listEntry.get("desc"));//费用说明-说明 processAllocEntityCollection.add(newProcessAllocEntity); } } } } } + // 添加合并逻辑:按工序和税率组合合并相同项 + mergeProcessAllocEntriesByProcessAndRate(processAllocEntityCollection); this.getView().updateView("zcgj_processallocatentity");//工序分摊 } } + + /** + * 按工序和税率组合合并工序分摊条目 + * + * @param processAllocEntityCollection 工序分摊集合 + */ + private void mergeProcessAllocEntriesByProcessAndRate(DynamicObjectCollection processAllocEntityCollection) { + // 使用Map来存储已存在的工序+税率组合,避免嵌套循环 + Map processRateMap = new HashMap<>(); + + for (int i = 0; i < processAllocEntityCollection.size(); i++) { + DynamicObject currentEntry = processAllocEntityCollection.get(i); + Object currentProcess = currentEntry.get("zcgj_pa_process"); // 工序 + Object currentRate = currentEntry.get("zcgj_rateval"); // 税率 + + // 创建唯一键值:工序ID + 税率值 + String key = (currentProcess != null ? currentProcess.toString() : "null") + + "_" + + (currentRate != null ? currentRate.toString() : "null"); + + if (processRateMap.containsKey(key)) { + // 如果已存在相同组合,则合并数值 + DynamicObject existingEntry = processRateMap.get(key); + + // 合并价税合计 + BigDecimal currentAmount = toBigDecimal(existingEntry.get("zcgj_pa_amount")); + BigDecimal nextAmount = toBigDecimal(currentEntry.get("zcgj_pa_amount")); + existingEntry.set("zcgj_pa_amount", currentAmount.add(nextAmount)); + + // 合并不含税金额 + BigDecimal currentAmountNoTax = toBigDecimal(existingEntry.get("zcgj_amountnotax")); + BigDecimal nextAmountNoTax = toBigDecimal(currentEntry.get("zcgj_amountnotax")); + existingEntry.set("zcgj_amountnotax", currentAmountNoTax.add(nextAmountNoTax)); + + // 合并税额 + BigDecimal currentTaxAmt = toBigDecimal(existingEntry.get("zcgj_taxamt")); + BigDecimal nextTaxAmt = toBigDecimal(currentEntry.get("zcgj_taxamt")); + existingEntry.set("zcgj_taxamt", currentTaxAmt.add(nextTaxAmt)); + + // 移除当前条目 + processAllocEntityCollection.remove(i); + i--; // 调整索引 + } else { + // 如果不存在相同组合,则添加到Map中 + processRateMap.put(key, currentEntry); + } + } + } + + /** + * 将对象转换为BigDecimal类型 + * + * @param obj 待转换对象 + * @return BigDecimal值 + */ + private BigDecimal toBigDecimal(Object obj) { + if (obj == null) { + return BigDecimal.ZERO; + } + + if (obj instanceof BigDecimal) { + return (BigDecimal) obj; + } else if (obj instanceof Number) { + return new BigDecimal(obj.toString()); + } else { + try { + return new BigDecimal(obj.toString()); + } catch (NumberFormatException e) { + return BigDecimal.ZERO; + } + } + } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EquipmentCommandBillPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EquipmentCommandBillPlugin.java new file mode 100644 index 0000000..3726c6f --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/EquipmentCommandBillPlugin.java @@ -0,0 +1,133 @@ +package zcgj.zcdev.zcdev.pr.plugin.form; + +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.datamodel.events.ChangeData; +import kd.bos.entity.datamodel.events.PropertyChangedArgs; +import kd.bos.form.field.BasedataEdit; +import kd.bos.form.field.events.BeforeF7SelectEvent; +import kd.bos.form.field.events.BeforeF7SelectListener; +import kd.bos.isc.util.misc.StringUtil; +import kd.bos.list.ListShowParameter; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; + +import java.util.ArrayList; +import java.util.EventObject; +import java.util.List; + +/* + * 设备命令单表单插件 + * 说明:1:设备编码带出资产编码;2:过滤设备编码字段;3:调出调入项目带出调出调入负责人 + */ +public class EquipmentCommandBillPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener { + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + BasedataEdit realCard = this.getControl("zcgj_realcard"); //设备编码 + realCard.addBeforeF7SelectListener(this); + BasedataEdit outProject = this.getControl("zcgj_outproject"); //调出项目 + outProject.addBeforeF7SelectListener(this); + BasedataEdit inProject = this.getControl("zcgj_inproject"); //调入项目 + inProject.addBeforeF7SelectListener(this); +// BasedataEdit outUser = this.getControl("zcgj_outuser"); //调出负责人 +// outUser.addBeforeF7SelectListener(this); +// BasedataEdit inUser = this.getControl("zcgj_inuser"); //调入负责人 +// inUser.addBeforeF7SelectListener(this); + } + + @Override + public void propertyChanged(PropertyChangedArgs e) { + super.propertyChanged(e); + String key = e.getProperty().getName(); + if (StringUtil.equals(key, "zcgj_realcard")) { + //设备编码 + ChangeData[] changeSet = e.getChangeSet(); + ChangeData changeData = changeSet[0]; + int rowIndex = changeData.getRowIndex(); + DynamicObject realCard = (DynamicObject) changeData.getNewValue();//新值 + if (realCard != null) { + String realCardNumber = realCard.getString("number");//设备编码-设备编码 + DynamicObject org = (DynamicObject) realCard.get("org");//管理组织 + QFilter[] qFilters = new QFilter[]{new QFilter("number", QCP.equals, realCardNumber).and("org.id", QCP.equals, org.get("id"))}; + DynamicObject fa_card_real_base = BusinessDataServiceHelper.loadSingle("fa_card_real_base", "id", qFilters);//实物卡片基础资料 + this.getModel().setValue("zcgj_realcardsw", fa_card_real_base, rowIndex);//资产编码 + } else { + this.getModel().setValue("zcgj_realcardsw", null, rowIndex);//资产编码 + } + } else if (StringUtil.equals(key, "zcgj_outorg") || StringUtil.equals(key, "zcgj_inorg")) { + //调出组织,调入组织 + ChangeData[] changeSet = e.getChangeSet(); + ChangeData changeData = changeSet[0]; + Object newValue = changeData.getNewValue();//新值 + Object oldValue = changeData.getOldValue();//旧值 + if (newValue == null || !newValue.equals(oldValue)) { + if (StringUtil.equals(key, "zcgj_outorg")) { + //调出组织 + DynamicObjectCollection dispatchEntryCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_dispatchentry");//调出资产详情分录 + dispatchEntryCollection.clear(); + this.getView().updateView("zcgj_dispatchentry");//刷新分录 + this.getModel().setValue("zcgj_outproject", null);//清空调出项目 + } else { + //调入组织 + this.getModel().setValue("zcgj_inproject", null);//清空调入项目 + } + } + } else if (StringUtil.equals(key, "zcgj_outproject") || StringUtil.equals(key, "zcgj_inproject")) { + //调出项目,调入项目 + ChangeData[] changeSet = e.getChangeSet(); + ChangeData changeData = changeSet[0]; + Object newValue = changeData.getNewValue();//新值 + if (newValue != null) { + DynamicObject newValueDy = (DynamicObject) newValue; + QFilter[] qFilters = new QFilter[]{new QFilter("billno", QCP.equals, newValueDy.getString("number"))}; + DynamicObject ec_project = BusinessDataServiceHelper.loadSingle("ec_project", "id,zcgj_pm", qFilters);//项目 + if (ec_project != null) { + if (StringUtil.equals(key, "zcgj_outproject")) { + //调出项目 + this.getModel().setValue("zcgj_outuser", ec_project.get("zcgj_pm"));//调出负责人 + } else { + this.getModel().setValue("zcgj_inuser", ec_project.get("zcgj_pm"));//调出负责人 + } + } + } + } + } + + @Override + public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) { + String propertyName = beforeF7SelectEvent.getProperty().getName(); + ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); + List qFilter = new ArrayList<>(); + if (StringUtil.equals(propertyName, "zcgj_realcard") || StringUtil.equals(propertyName, "zcgj_outproject")) { + //设备编码、调出项目 + Object outOrg = this.getModel().getValue("zcgj_outorg");//调出组织 + if (outOrg == null) { + this.getView().showErrorNotification("请先填写调出组织!"); + beforeF7SelectEvent.setCancel(true); + return; + } + DynamicObject outOrgDy = (DynamicObject) outOrg; + if (StringUtil.equals(propertyName, "zcgj_realcard")) { + //设备编码 + qFilter.add(new QFilter("org.id", "=", outOrgDy.get("id"))); + } else { + //调出项目 + qFilter.add(new QFilter("fiaccountorg.id", "=", outOrgDy.get("id"))); + } + } else if (StringUtil.equals(propertyName, "zcgj_inproject")) { + //调入项目 + Object inOrg = this.getModel().getValue("zcgj_inorg");//调入组织 + if (inOrg == null) { + this.getView().showErrorNotification("请先填写调入组织!"); + beforeF7SelectEvent.setCancel(true); + return; + } + DynamicObject inOrgDy = (DynamicObject) inOrg; + qFilter.add(new QFilter("fiaccountorg.id", "=", inOrgDy.get("id"))); + } + formShowParameter.getListFilterParameter().setQFilters(qFilter); + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/FundingplanapplyPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/FundingplanapplyPlugin.java index 382b739..bc775ee 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/FundingplanapplyPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/FundingplanapplyPlugin.java @@ -6,6 +6,7 @@ import kd.bos.bill.OperationStatus; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.entity.MulBasedataDynamicObjectCollection; import kd.bos.entity.datamodel.events.BizDataEventArgs; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; @@ -40,22 +41,82 @@ public class FundingplanapplyPlugin extends AbstractBillPlugIn implements Plugin //设置期间 DynamicObject org = (DynamicObject) this.getModel().getValue("zcgj_org"); if(org!=null){ - //查询组织下对应的当前期间数据 + /*//查询组织下对应的当前期间数据 DynamicObject[] orgByCurperiod = BusinessDataServiceHelper.load("gl_accountbook", "org,curperiod", new QFilter[]{new QFilter("enable", QCP.equals, Boolean.TRUE). and("status", QCP.equals, "C").and("org.id", QCP.equals, org.getLong("id"))}); if(orgByCurperiod!=null && orgByCurperiod.length>0){ this.getModel().setValue("zcgj_period",orgByCurperiod[0].getDynamicObject("curperiod")); - } - + }*/ + //设置期间 + carryCurrentPeriodAndDate(); + //初始化值 + initData(org); } - - - } } + /** + * 自动带入 今年最新的 “年初应收余额”和“年初应付余额 + */ + public void initData(DynamicObject org){ + int year = LocalDate.now().getYear(); + + List searchFilterList = new ArrayList<>(); + //查询申请人下的今年的探亲差旅单据 + searchFilterList.add(new QFilter("zcgj_org", QCP.equals, org.getLong("id"))); + searchFilterList.add( new QFilter("zcgj_period.number", QCP.like, year+"%")); + DynamicObject[] load = BusinessDataServiceHelper.load("zcgj_ec_fundingplanapply", + "zcgj_period," + + "zcgj_infundproject_entry.zcgj_in_fundproject,zcgj_infundproject_entry.zcgj_in_custom,zcgj_infundproject_entry.zcgj_iinitialreceivable " + + ",zcgj_outfundproject_entry.zcgj_out_fundproject,zcgj_outfundproject_entry.zcgj_out_supplier,zcgj_outfundproject_entry.zcgj_openingpayable" + + ",createtime", + searchFilterList.toArray(new QFilter[]{}), "createtime desc"); + if(load!=null && load.length>0){ + DynamicObject data = load[0]; + DynamicObjectCollection indataentry = data.getDynamicObjectCollection("zcgj_infundproject_entry"); + DynamicObjectCollection inentry = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_infundproject_entry"); + inentry.clear(); + for (DynamicObject dynamicObject : indataentry) { + DynamicObject newData = inentry.addNew(); + newData.set("zcgj_in_fundproject",dynamicObject.get("zcgj_in_fundproject")); + DynamicObjectCollection collection = new DynamicObjectCollection(); + for (DynamicObject zcgjInCustom :dynamicObject.getDynamicObjectCollection("zcgj_in_custom")) { + DynamicObject basedataObj = zcgjInCustom.getDynamicObject("fbasedataid"); + DynamicObject newObj = new DynamicObject(newData.getDynamicObjectCollection("zcgj_in_custom").getDynamicObjectType()); + newObj.set("fbasedataid", basedataObj); + newObj.set("fbasedataid_id", basedataObj.getPkValue()); + collection.add(newObj); + } + newData.set("zcgj_in_custom",collection); + newData.set("zcgj_iinitialreceivable",dynamicObject.get("zcgj_iinitialreceivable")); + } + this.getView().updateView("zcgj_infundproject_entry"); + + + DynamicObjectCollection outdataentry = data.getDynamicObjectCollection("zcgj_outfundproject_entry"); + DynamicObjectCollection outentry = this.getModel().getDataEntity().getDynamicObjectCollection("zcgj_outfundproject_entry"); + outentry.clear(); + for (DynamicObject dynamicObject : outdataentry) { + DynamicObject newData = outentry.addNew(); + newData.set("zcgj_out_fundproject",dynamicObject.get("zcgj_out_fundproject")); + DynamicObjectCollection collection = new DynamicObjectCollection(); + for (DynamicObject zcgjInCustom : (MulBasedataDynamicObjectCollection) dynamicObject.get("zcgj_out_supplier")) { + DynamicObject basedataObj = zcgjInCustom.getDynamicObject("fbasedataid"); + DynamicObject newObj = new DynamicObject(newData.getDynamicObjectCollection("zcgj_out_supplier").getDynamicObjectType()); + newObj.set("fbasedataid", basedataObj); + newObj.set("fbasedataid_id", basedataObj.getPkValue()); + collection.add(newObj); + } + newData.set("zcgj_out_supplier",collection); + newData.set("zcgj_openingpayable",dynamicObject.get("zcgj_openingpayable")); + } + this.getView().updateView("zcgj_outfundproject_entry"); + } + + } + @Override public void propertyChanged(PropertyChangedArgs e) { super.propertyChanged(e); @@ -81,6 +142,35 @@ public class FundingplanapplyPlugin extends AbstractBillPlugIn implements Plugin this.getView().updateView("zcgj_setttype",rowIndex); } } + }else if(name.equals("zcgj_org")){ + DynamicObject org = (DynamicObject) changeData.getNewValue(); + initData(org); } } + + // 获取某年份的第一天 + public static LocalDate getFirstDayOfYear(int year) { + return LocalDate.of(year, 1, 1); + } + + // 获取某年份的最后一天 + public static LocalDate getLastDayOfYear(int year) { + return LocalDate.of(year, 12, 31); + } + + + protected void carryCurrentPeriodAndDate() { + Calendar cal = Calendar.getInstance(); + int year = cal.get(1); + int month = cal.get(2) + 1; + QFilter yearFilter = new QFilter("periodyear", "=", year); + QFilter monthFilter = new QFilter("periodnumber", "=", month); + DynamicObject bdPeriod = BusinessDataServiceHelper.loadSingle("bd_period", "id,name,begindate,enddate", new QFilter[]{yearFilter, monthFilter}); + if (bdPeriod != null) { + this.getModel().setValue("zcgj_period", bdPeriod.getPkValue()); + //this.getModel().setValue("begindate", bdPeriod.get("begindate")); + // this.getModel().setValue("enddate", bdPeriod.get("enddate")); + } + + } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PeriodCostBillCbsPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PeriodCostBillCbsPlugin.java new file mode 100644 index 0000000..d2c5c60 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PeriodCostBillCbsPlugin.java @@ -0,0 +1,79 @@ +package zcgj.zcdev.zcdev.pr.plugin.form; + +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.datamodel.events.PropertyChangedArgs; +import kd.bos.form.field.BasedataEdit; +import kd.bos.form.field.RefBillEdit; +import kd.bos.form.field.events.BeforeF7SelectEvent; +import kd.bos.form.field.events.BeforeF7SelectListener; +import kd.bos.isc.util.misc.StringUtil; +import kd.bos.list.ListShowParameter; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; + +import java.util.ArrayList; +import java.util.EventObject; +import java.util.List; + +/** + * 工序期间成本预算表单插件 + * 说明:通过项目与期间带出工序成本预算字段内容 + **/ +public class PeriodCostBillCbsPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener { + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + RefBillEdit refBillEdit = getView().getControl("zcgj_aimcostbill");//工序成本预算 + refBillEdit.addBeforeF7SelectListener(this); + } + + @Override + public void propertyChanged(PropertyChangedArgs e) { + super.propertyChanged(e); + String key = e.getProperty().getName(); + if (StringUtil.equals(key, "project") || StringUtil.equals(key, "period")) { + //项目、期间 + DynamicObject project = (DynamicObject) this.getModel().getValue("project");//项目 + DynamicObject period = (DynamicObject) this.getModel().getValue("period");//期间 + if (project != null && period != null) { + int periodYear = (int) period.get("periodyear");//期间-年度 + String periodValue = String.valueOf(periodYear - 2024); + + QFilter filter = new QFilter("project", "=", project.getPkValue()); + filter.and(new QFilter("zcgj_periodyear", "=", periodValue)); + filter.and(new QFilter("isenable", "=", true)); + DynamicObject ecco_aimcostbillcbs = BusinessDataServiceHelper.loadSingle("ecco_aimcostbillcbs", "id", new QFilter[]{filter});//工序成本预算 + this.getModel().setValue("zcgj_aimcostbill", ecco_aimcostbillcbs); + } else { + this.getModel().setValue("zcgj_aimcostbill", null); + } + } + } + + @Override + public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) { + ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); + List qFilter = new ArrayList<>(); + DynamicObject project = (DynamicObject) this.getModel().getValue("project");//项目 + DynamicObject period = (DynamicObject) this.getModel().getValue("period");//期间 + if (project != null && period != null) { + int periodYear = (int) period.get("periodyear");//期间-年度 + String periodValue = String.valueOf(periodYear - 2024); + + QFilter filter = new QFilter("project", "=", project.getPkValue()); + filter.and(new QFilter("zcgj_periodyear", "=", periodValue)); + filter.and(new QFilter("isenable", "=", true)); + DynamicObject ecco_aimcostbillcbs = BusinessDataServiceHelper.loadSingle("ecco_aimcostbillcbs", "id", new QFilter[]{filter});//工序成本预算 + if (ecco_aimcostbillcbs != null) { + qFilter.add(new QFilter("id", QCP.equals, ecco_aimcostbillcbs.get("id"))); + } else { + qFilter.add(new QFilter("id", QCP.equals, 123456)); + } + } else { + qFilter.add(new QFilter("id", QCP.equals, 123456)); + } + formShowParameter.getListFilterParameter().setQFilters(qFilter); + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/AimcostcbsBllSubmitOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/AimCostCbsBllSaveOrSubOp.java similarity index 92% rename from code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/AimcostcbsBllSubmitOp.java rename to code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/AimCostCbsBllSaveOrSubOp.java index c9d8d98..3db9e86 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/AimcostcbsBllSubmitOp.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/AimCostCbsBllSaveOrSubOp.java @@ -1,4 +1,4 @@ -package zcgj.zcdev.zcdev.pr.plugin; +package zcgj.zcdev.zcdev.pr.plugin.operate; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.ExtendedDataEntity; @@ -12,7 +12,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper; import java.math.BigDecimal; //工序成本预算单保存提交操作插件:验证项目和年份的组合是否已经存在(且只有一个) -public class AimcostcbsBllSubmitOp extends AbstractOperationServicePlugIn { +public class AimCostCbsBllSaveOrSubOp extends AbstractOperationServicePlugIn { @Override public void onPreparePropertys(PreparePropertysEventArgs e) { @@ -25,7 +25,7 @@ public class AimcostcbsBllSubmitOp extends AbstractOperationServicePlugIn { @Override public void onAddValidators(AddValidatorsEventArgs e) { super.onAddValidators(e); - e.getValidators().add(new ValidatorExt()); + e.getValidators().add(new AimCostCbsBllSaveOrSubOp.ValidatorExt()); } class ValidatorExt extends AbstractValidator { diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/EquipmentExitOpExt.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/EquipmentExitOpExt.java new file mode 100644 index 0000000..c0a4f8d --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/EquipmentExitOpExt.java @@ -0,0 +1,148 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package zcgj.zcdev.zcdev.pr.plugin.operate; + +import com.alibaba.fastjson.JSONObject; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.BeforeOperationArgs; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.ec.eceq.common.enums.EquipmentUseStatusEnum; +import kd.ec.eceq.common.enums.UseStatusEnum; +import kd.ec.eceq.opplugin.EquipmentHelper; +import kd.ec.eceq.opplugin.validator.EquipExitValidator; + +/** + * 设备退场审核反审核操作按钮 + * 说明:去除不存在设备进厂逻辑 + */ +public class EquipmentExitOpExt extends AbstractOperationServicePlugIn { + public EquipmentExitOpExt() { + } + + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + e.getFieldKeys().add("exitdate"); + e.getFieldKeys().add("entryentity"); + e.getFieldKeys().add("equipmentid"); + e.getFieldKeys().add("equipsnapshot_tag"); + e.getFieldKeys().add("approachrow"); + e.getFieldKeys().add("approachid"); + } + + public void onAddValidators(AddValidatorsEventArgs e) { + e.addValidator(new EquipExitValidator()); + } + + public void beforeExecuteOperationTransaction(BeforeOperationArgs e) { + switch (e.getOperationKey()) { + case "audit": + this.doAudit(e); + break; + case "unaudit": + this.doUnAudit(e); + } + + } + + protected void doAudit(BeforeOperationArgs e) { + DynamicObject[] dataEntities = e.getDataEntities(); + if (dataEntities.length > 0) { + DynamicObject[] var3 = dataEntities; + int var4 = dataEntities.length; + + for(int var5 = 0; var5 < var4; ++var5) { + DynamicObject entity = var3[var5]; + Date exitDate = entity.getDate("exitdate"); + DynamicObjectCollection entry = entity.getDynamicObjectCollection("entryentity"); + ArrayList updateList = new ArrayList(); + ArrayList updateApproachList = new ArrayList(); + Iterator var11 = entry.iterator(); + + while(var11.hasNext()) { + DynamicObject row = (DynamicObject)var11.next(); + long approachRowId = row.getLong("approachrow"); + if (approachRowId == 0L){ + return; + } + DynamicObject approachEquip = BusinessDataServiceHelper.loadSingle(approachRowId, "eceq_approachequipf7"); + boolean isExit = approachEquip.getBoolean("isexit"); + if (!isExit) { + approachEquip.set("isexit", true); + approachEquip.set("exitdate", exitDate); + updateApproachList.add(approachEquip); + DynamicObject equipment = row.getDynamicObject("equipmentid"); + if (equipment != null) { + JSONObject snapshot = EquipmentHelper.generateSnapshot(equipment); + row.set("equipsnapshot_tag", snapshot.toJSONString()); + String property = equipment.getString("property"); + equipment.set("equipstatus", EquipmentUseStatusEnum.FREE.getValue()); + equipment.set("usestatus", UseStatusEnum.EXITED.getValue()); + equipment.set("project", (Object)null); + equipment.set("useorg", (Object)null); + equipment.set("approachdate", (Object)null); + equipment.set("exitdate", exitDate); + updateList.add(equipment); + } + } + } + + SaveServiceHelper.update((DynamicObject[])updateList.toArray(new DynamicObject[0])); + SaveServiceHelper.update((DynamicObject[])updateApproachList.toArray(new DynamicObject[0])); + } + + } + } + + protected void doUnAudit(BeforeOperationArgs e) { + DynamicObject[] dataEntities = e.getDataEntities(); + if (dataEntities.length > 0) { + DynamicObject[] var3 = dataEntities; + int var4 = dataEntities.length; + + for(int var5 = 0; var5 < var4; ++var5) { + DynamicObject entity = var3[var5]; + DynamicObjectCollection entry = entity.getDynamicObjectCollection("entryentity"); + ArrayList updateList = new ArrayList(); + ArrayList updateApproachList = new ArrayList(); + Iterator var10 = entry.iterator(); + + while(var10.hasNext()) { + DynamicObject row = (DynamicObject)var10.next(); + long approachRowId = row.getLong("approachrow"); + if (approachRowId == 0L){ + return; + } + DynamicObject approachEquip = BusinessDataServiceHelper.loadSingle(approachRowId, "eceq_approachequipf7"); + boolean isExit = approachEquip.getBoolean("isexit"); + if (isExit) { + approachEquip.set("isexit", false); + approachEquip.set("exitdate", (Object)null); + updateApproachList.add(approachEquip); + DynamicObject equipment = row.getDynamicObject("equipmentid"); + if (equipment != null) { + String equipSnapshotJsonStr = row.getString("equipsnapshot_tag"); + JSONObject snapshot = JSONObject.parseObject(equipSnapshotJsonStr); + EquipmentHelper.recoverBySnapshot(equipment, snapshot); + updateList.add(equipment); + } + } + } + + SaveServiceHelper.update((DynamicObject[])updateList.toArray(new DynamicObject[0])); + SaveServiceHelper.update((DynamicObject[])updateApproachList.toArray(new DynamicObject[0])); + } + + } + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/FundingplanapplyOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/FundingplanapplyOp.java new file mode 100644 index 0000000..437ce87 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/FundingplanapplyOp.java @@ -0,0 +1,51 @@ +package zcgj.zcdev.zcdev.pr.plugin.operate; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.validate.AbstractValidator; + +import java.util.HashSet; +import java.util.Set; + +public class FundingplanapplyOp extends AbstractOperationServicePlugIn { + + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + e.getFieldKeys().add("zcgj_fin_approved_amount"); + + } + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + //当前所在的组织是属于矿山下的 + e.getValidators().add(new ValidatorExt()); + } + + class ValidatorExt extends AbstractValidator { + @Override + public void validate() { + ExtendedDataEntity[] extendedDataEntities = this.getDataEntities(); + for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) { + DynamicObject dataEntity = extendedDataEntity.getDataEntity(); + DynamicObjectCollection finApprovedAmount = dataEntity.getDynamicObjectCollection("zcgj_fin_approved_amount"); + if (!finApprovedAmount.isEmpty()) { + Set typeSet = new HashSet<>(); + for (DynamicObject dynamicObject : finApprovedAmount) { + String sSetttype = dynamicObject.getString("zcgj_setttype"); + if(typeSet.contains(sSetttype)) { + this.addFatalErrorMessage(extendedDataEntity, "财务部核定金额的结算方式不允许重复!"); + return; + }else{ + typeSet.add(sSetttype); + } + } + } + } + } + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PeriodCostBSaveOrSubOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PeriodCostBSaveOrSubOp.java new file mode 100644 index 0000000..cff5432 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PeriodCostBSaveOrSubOp.java @@ -0,0 +1,56 @@ +package zcgj.zcdev.zcdev.pr.plugin.operate; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.validate.AbstractValidator; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; + +import java.math.BigDecimal; + +/** + * 工序期间成本预算保存提交操作插件; + * 说明:校验项目加期间加版本的组合是否存在,存在便提示不可重复创建 + */ +public class PeriodCostBSaveOrSubOp extends AbstractOperationServicePlugIn { + + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + e.getFieldKeys().add("period");//期间 + e.getFieldKeys().add("project");//项目 + e.getFieldKeys().add("versionno");//版本号 + } + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + e.getValidators().add(new PeriodCostBSaveOrSubOp.ValidatorExt()); + } + + class ValidatorExt extends AbstractValidator { + @Override + public void validate() { + ExtendedDataEntity[] extendedDataEntities = this.getDataEntities(); + for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) { + DynamicObject extendedData = extendedDataEntity.getDataEntity(); + DynamicObject project = extendedData.getDynamicObject("project");//项目 + DynamicObject period = extendedData.getDynamicObject("period");//期间 + BigDecimal versionNo = extendedData.getBigDecimal("versionno");//版本号 + QFilter filter = new QFilter("project", "=", project.getPkValue()); + filter.and(new QFilter("period", "=", period.getPkValue())); + filter.and(new QFilter("versionno", "=", versionNo)); + DynamicObject ecco_periodcostbillcbs = BusinessDataServiceHelper.loadSingle("ecco_periodcostbillcbs", "id", new QFilter[]{filter}); + if (ecco_periodcostbillcbs != null) { + if (extendedData.getPkValue().equals(ecco_periodcostbillcbs.getPkValue())){ + continue; + } + this.addFatalErrorMessage(extendedDataEntity, "该期间的项目已编制预算,请勿重复创建!"); + } + } + } + } +} diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/workflow/OutContractSettleFiConfirmWorkFlowPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/workflow/OutContractSettleFiConfirmWorkFlowPlugin.java index 77c8bcb..e2fb71f 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/workflow/OutContractSettleFiConfirmWorkFlowPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/workflow/OutContractSettleFiConfirmWorkFlowPlugin.java @@ -49,7 +49,6 @@ public class OutContractSettleFiConfirmWorkFlowPlugin implements IWorkflowPlugin outFinaceconfirm.set("zcgj_invoice_org",outContractSettle.getDynamicObject("project").getDynamicObject("projectorg")); outFinaceconfirm.set("zcgj_jscustomer",outContractSettle.getDynamicObject("zcgj_jscustomer")); outFinaceconfirm.set("billstatus","A"); - outFinaceconfirm.set("zcgj_is_reversabillid",true); outFinaceconfirm.set("creator",outContractSettle.getDynamicObject("creator")); DynamicObjectCollection itementry = outContractSettle.getDynamicObjectCollection("itementry");