项目工序动态成本分析表二开优化

This commit is contained in:
xuhaihui 2025-12-08 17:51:10 +08:00
parent 93cfdf1fad
commit 6333878a1e
1 changed files with 55 additions and 14 deletions

View File

@ -42,6 +42,7 @@ import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.orm.ORM;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.permission.api.HasPermOrgResult;
import kd.bos.servicehelper.BusinessDataServiceHelper;
@ -56,6 +57,9 @@ import kd.ec.contract.common.utils.CurrencyFormatUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.jetbrains.annotations.NotNull;
/*
* 项目工序动态成本分析表二开
*/
public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements BeforeF7SelectListener, HyperLinkClickListener {
public static final String QUERY_PROJECT = "queryProject";
public static final String CBS_CACHE = "cbsCache";
@ -293,8 +297,13 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
protected void query() {
DynamicObject project = (DynamicObject) this.getModel().getValue("project");
Object zcgj_periodyear = this.getModel().getValue("zcgj_periodyear");//年度-二开添加
if (project == null) {
this.getView().showTipNotification(ResManager.loadKDString("请先选择项目。", "CbsDynamicCostFormPlugin_0", "ec-ecco-formplugin", new Object[0]));
//二开添加
} else if (zcgj_periodyear == null) {
this.getView().showTipNotification(ResManager.loadKDString("请先选择年度。", "CbsDynamicCostFormPlugin_0", "ec-ecco-formplugin", new Object[0]));
//二开添加
} else {
JSONArray unitProjectCbsArray = this.getCbsCache();
JSONArray queryCbsArray = this.getQueryCbsCache();
@ -349,7 +358,8 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
this.fillTreeList(treeEntries, firstLevelJsonObject, 0L, subJsonObject, cbsMap, unitProjectMap);
Map<String, BigDecimal> aimCostMap = new HashMap(16);
this.queryAimCost(project, unitProjectIds, aimCostMap);
// this.queryAimCost(project, unitProjectIds, aimCostMap);//系统代码
this.queryAimCost(project, unitProjectIds, aimCostMap, zcgj_periodyear);//二开替换
Map<String, BigDecimal> confirmCostMap = new HashMap(16);
Map<String, BigDecimal> notSplitCostMap = new HashMap(16);
Map<String, BigDecimal> notConfirmCostMap = new HashMap(16);
@ -633,8 +643,24 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
}
protected void queryCostData(DynamicObject project, Map<String, BigDecimal> confirmCostMap, Map<String, BigDecimal> notSplitCostMap, Map<String, BigDecimal> notConfirmCostMap) {
Object zcgj_periodyear = this.getModel().getValue("zcgj_periodyear");
int periodYear = 0;
if (zcgj_periodyear.equals("1")) {
periodYear = 2025;
} else if (zcgj_periodyear.equals("2")) {
periodYear = 2026;
} else if (zcgj_periodyear.equals("3")) {
periodYear = 2027;
} else if (zcgj_periodyear.equals("4")) {
periodYear = 2028;
} else if (zcgj_periodyear.equals("5")) {
periodYear = 2029;
} else if (zcgj_periodyear.equals("6")) {
periodYear = 2030;
}
QFilter costFilter = new QFilter("project", "=", project.getPkValue());
costFilter.and("billstatus", "in", new String[]{BillStatusEnum.AUDIT.getValue(), BillStatusEnum.SUBMIT.getValue()});
costFilter.and("period.periodyear", QCP.equals, periodYear);//会计期间-年度--二开添加
DynamicObjectCollection contractCostBills = QueryServiceHelper.query("ecco_contractcost", "billstatus,entryentity.settleid,entryentity.splitbilltype,entryentity.subentryentity.unitproject,entryentity.subentryentity.procbs,entryentity.subentryentity.amount", new QFilter[]{costFilter});
Set<Long> splitReferenceMeasureSet = new HashSet(16);
Set<Long> splitReferenceSettleSet = new HashSet(16);
@ -776,7 +802,10 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
}
}
DynamicObjectCollection costAdjustBills = QueryServiceHelper.query("ecco_costadjust", "billstatus,entryentity.subentryentity.subunitproject,entryentity.subentryentity.procbs,entryentity.subentryentity.afteradjustbalance", new QFilter[]{costFilter});
QFilter costFilter1 = new QFilter("project", "=", project.getPkValue());
costFilter1.and("billstatus", "in", new String[]{BillStatusEnum.AUDIT.getValue(), BillStatusEnum.SUBMIT.getValue()});
costFilter1.and("adjustperiod.periodyear", QCP.equals, periodYear);//会计期间-年度--二开添加
DynamicObjectCollection costAdjustBills = QueryServiceHelper.query("ecco_costadjust", "billstatus,entryentity.subentryentity.subunitproject,entryentity.subentryentity.procbs,entryentity.subentryentity.afteradjustbalance", new QFilter[]{costFilter1});
Iterator var72 = costAdjustBills.iterator();
while (var72.hasNext()) {
@ -796,7 +825,7 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
}
}
DynamicObjectCollection equipmentCostBills = QueryServiceHelper.query("eceq_costsplit", "billstatus,settlesplitentity.settleid,settlesplitentity.costsplitentity.unitproject,settlesplitentity.costsplitentity.procbs,settlesplitentity.costsplitentity.splitamount", new QFilter[]{costFilter});
DynamicObjectCollection equipmentCostBills = QueryServiceHelper.query("eceq_costsplit", "billstatus,settlesplitentity.settleid,settlesplitentity.costsplitentity.unitproject,settlesplitentity.costsplitentity.procbs,settlesplitentity.costsplitentity.splitamount", new QFilter[]{costFilter1});
Set<Long> splitReferenceEqSettleSet = new HashSet(16);
Iterator var79 = equipmentCostBills.iterator();
@ -824,6 +853,7 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
settleFilter.and("id", "not in", splitReferenceSettleSet);
settleFilter.and("project", "=", project.getPkValue());
settleFilter.and("billstatus", "in", new String[]{BillStatusEnum.AUDIT.getValue(), BillStatusEnum.SUBMIT.getValue()});
settleFilter.and("period.periodyear", QCP.equals, periodYear);//会计期间-年度--二开添加
Map<Object, DynamicObject> settleBills = BusinessDataServiceHelper.loadFromCache("ec_out_contract_settle", new QFilter[]{settleFilter});
Set<Long> notSplitClaimSet = new HashSet(16);
Set<Long> notConfirmClaimSet = new HashSet(16);
@ -932,11 +962,12 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
measureFilter.and("id", "not in", notConfirmMeasureSet);
measureFilter.and("project", "=", project.getPkValue());
measureFilter.and("billstatus", "in", new String[]{BillStatusEnum.AUDIT.getValue(), BillStatusEnum.SUBMIT.getValue()});
measureFilter.and("period.periodyear", QCP.equals, periodYear);//会计期间-年度--二开添加
Map<Object, DynamicObject> measureBills = BusinessDataServiceHelper.loadFromCache("ec_outcontractmeasure", new QFilter[]{measureFilter});
this.processMeasureBills(notConfirmCostMap, measureBills);
Map<Object, DynamicObject> notSplitMeasureBills = BusinessDataServiceHelper.loadFromCache("ec_outcontractmeasure", new QFilter[]{(new QFilter("id", "in", notSplitMeasureSet)).and("id", "not in", splitReferenceMeasureSet)});
Map<Object, DynamicObject> notSplitMeasureBills = BusinessDataServiceHelper.loadFromCache("ec_outcontractmeasure", new QFilter[]{(new QFilter("id", "in", notSplitMeasureSet)).and("id", "not in", splitReferenceMeasureSet).and("period.periodyear", QCP.equals, periodYear)});
this.processMeasureBills(notSplitCostMap, notSplitMeasureBills);
Map<Object, DynamicObject> notConfirmMeasureBills = BusinessDataServiceHelper.loadFromCache("ec_outcontractmeasure", new QFilter[]{(new QFilter("id", "in", notConfirmMeasureSet)).and("id", "not in", splitReferenceMeasureSet)});
Map<Object, DynamicObject> notConfirmMeasureBills = BusinessDataServiceHelper.loadFromCache("ec_outcontractmeasure", new QFilter[]{(new QFilter("id", "in", notConfirmMeasureSet)).and("id", "not in", splitReferenceMeasureSet).and("period.periodyear", QCP.equals, periodYear)});
this.processMeasureBills(notConfirmCostMap, notConfirmMeasureBills);
QFilter claimFilter = new QFilter("contract.isincost", "=", "1");
claimFilter.and("issettle", "=", "0");
@ -945,11 +976,12 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
claimFilter.and("id", "not in", notConfirmClaimSet);
claimFilter.and("project", "=", project.getPkValue());
claimFilter.and("billstatus", "in", new String[]{BillStatusEnum.AUDIT.getValue(), BillStatusEnum.SUBMIT.getValue()});
claimFilter.and("period.periodyear", QCP.equals, periodYear);//会计期间-年度--二开添加
Map<Object, DynamicObject> claimBills = BusinessDataServiceHelper.loadFromCache("ec_outclaimbill", new QFilter[]{claimFilter});
this.processClaimBills(notConfirmCostMap, claimBills);
Map<Object, DynamicObject> notSplitClaimBills = BusinessDataServiceHelper.loadFromCache("ec_outclaimbill", new QFilter[]{new QFilter("id", "in", notSplitClaimSet)});
Map<Object, DynamicObject> notSplitClaimBills = BusinessDataServiceHelper.loadFromCache("ec_outclaimbill", new QFilter[]{new QFilter("id", "in", notSplitClaimSet).and("period.periodyear", QCP.equals, periodYear)});
this.processClaimBills(notSplitCostMap, notSplitClaimBills);
Map<Object, DynamicObject> notConfirmClaimBills = BusinessDataServiceHelper.loadFromCache("ec_outclaimbill", new QFilter[]{new QFilter("id", "in", notConfirmClaimSet)});
Map<Object, DynamicObject> notConfirmClaimBills = BusinessDataServiceHelper.loadFromCache("ec_outclaimbill", new QFilter[]{new QFilter("id", "in", notConfirmClaimSet).and("period.periodyear", QCP.equals, periodYear)});
this.processClaimBills(notConfirmCostMap, notConfirmClaimBills);
QFilter visaFilter = new QFilter("contract.isincost", "=", "1");
visaFilter.and("issettle", "=", "0");
@ -958,11 +990,12 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
visaFilter.and("id", "not in", notConfirmVisaSet);
visaFilter.and("project", "=", project.getPkValue());
visaFilter.and("billstatus", "in", new String[]{BillStatusEnum.AUDIT.getValue(), BillStatusEnum.SUBMIT.getValue()});
visaFilter.and("period.periodyear", QCP.equals, periodYear);//会计期间-年度--二开添加
Map<Object, DynamicObject> visaBills = BusinessDataServiceHelper.loadFromCache("ec_outvisabill", new QFilter[]{visaFilter});
this.processVisaBills(notConfirmCostMap, visaBills);
Map<Object, DynamicObject> notSplitVisaBills = BusinessDataServiceHelper.loadFromCache("ec_outvisabill", new QFilter[]{new QFilter("id", "in", notSplitVisaSet)});
Map<Object, DynamicObject> notSplitVisaBills = BusinessDataServiceHelper.loadFromCache("ec_outvisabill", new QFilter[]{new QFilter("id", "in", notSplitVisaSet).and("period.periodyear", QCP.equals, periodYear)});
this.processVisaBills(notSplitCostMap, notSplitVisaBills);
Map<Object, DynamicObject> notConfirmVisaBills = BusinessDataServiceHelper.loadFromCache("ec_outvisabill", new QFilter[]{new QFilter("id", "in", notConfirmVisaSet)});
Map<Object, DynamicObject> notConfirmVisaBills = BusinessDataServiceHelper.loadFromCache("ec_outvisabill", new QFilter[]{new QFilter("id", "in", notConfirmVisaSet).and("period.periodyear", QCP.equals, periodYear)});
this.processVisaBills(notConfirmCostMap, notConfirmVisaBills);
QFilter performFilter = new QFilter("contract.isincost", "=", "1");
performFilter.and("id", "not in", notSplitPerformSet);
@ -981,6 +1014,7 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
matOutFilter.and("iscompleted", "=", "0");
matOutFilter.and("billno", "not in", splitReferenceOutBillNoSet);
matOutFilter.and("billstatus", "in", new String[]{BillStatusEnum.AUDIT.getValue(), BillStatusEnum.SUBMIT.getValue()});
matOutFilter.and("period.periodyear", QCP.equals, periodYear);//会计期间-年度--二开添加
DynamicObjectCollection matOutBills = QueryServiceHelper.query("ecma_materialoutbill", "billstatus,entryentity.unitproject,entryentity.procbs,entryentity.amount", new QFilter[]{matOutFilter});
this.processMaterialBills(notSplitCostMap, notConfirmCostMap, matOutBills);
QFilter matInFilter = new QFilter("project", "=", project.getPkValue());
@ -989,6 +1023,7 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
matInFilter.and("iscompleted", "=", "0");
matInFilter.and("billno", "not in", splitReferenceInBillNoSet);
matInFilter.and("billstatus", "in", new String[]{BillStatusEnum.AUDIT.getValue(), BillStatusEnum.SUBMIT.getValue()});
matInFilter.and("period.periodyear", QCP.equals, periodYear);//会计期间-年度--二开添加
DynamicObjectCollection matInBills = QueryServiceHelper.query("ecma_materialinbill", "billstatus,entryentity.unitproject,entryentity.procbs,entryentity.amount", new QFilter[]{matInFilter});
this.processMaterialBills(notSplitCostMap, notConfirmCostMap, matInBills);
QFilter eqSettleFilter = new QFilter("billstatus", "=", BillStatusEnum.AUDIT.getValue());
@ -998,25 +1033,28 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
eqSettleFilter.and("id", "not in", splitReferenceEqSettleSet);
eqSettleFilter.and("id", "not in", notSplitEqSettleSet);
eqSettleFilter.and("id", "not in", notConfirmEqSettleSet);
eqSettleFilter.and("period.periodyear", QCP.equals, periodYear);//会计期间-年度--二开添加
DynamicObjectCollection eqSettleBills = QueryServiceHelper.query("eceq_settle", "unitproject,entryentity.procbs,entryentity.amount", new QFilter[]{eqSettleFilter});
this.processEqSettleBills(notSplitCostMap, eqSettleBills);
eqSettleBills = QueryServiceHelper.query("eceq_settle", "unitproject,entryentity.procbs,entryentity.amount", new QFilter[]{new QFilter("id", "in", notSplitEqSettleSet)});
eqSettleBills = QueryServiceHelper.query("eceq_settle", "unitproject,entryentity.procbs,entryentity.amount", new QFilter[]{new QFilter("id", "in", notSplitEqSettleSet).and("period.periodyear", QCP.equals, periodYear)});
this.processEqSettleBills(notSplitCostMap, eqSettleBills);
eqSettleFilter = new QFilter("project", "=", project.getPkValue());
eqSettleFilter.and("billstatus", "=", BillStatusEnum.SUBMIT.getValue());
eqSettleBills = QueryServiceHelper.query("eceq_settle", "unitproject,entryentity.procbs,entryentity.amount", new QFilter[]{eqSettleFilter});
this.processEqSettleBills(notConfirmCostMap, eqSettleBills);
eqSettleBills = QueryServiceHelper.query("eceq_settle", "unitproject,entryentity.procbs,entryentity.amount", new QFilter[]{new QFilter("id", "in", notConfirmEqSettleSet)});
eqSettleBills = QueryServiceHelper.query("eceq_settle", "unitproject,entryentity.procbs,entryentity.amount", new QFilter[]{new QFilter("id", "in", notConfirmEqSettleSet).and("period.periodyear", QCP.equals, periodYear)});
this.processEqSettleBills(notConfirmCostMap, eqSettleBills);
}
protected void queryAimCost(DynamicObject project, Set<Long> unitProjectIds, Map<String, BigDecimal> aimCostMap) {
// protected void queryAimCost(DynamicObject project, Set<Long> unitProjectIds, Map<String, BigDecimal> aimCostMap) {//系统代码
protected void queryAimCost(DynamicObject project, Set<Long> unitProjectIds, Map<String, BigDecimal> aimCostMap, Object zcgj_periodyear) {//二开替代
QFilter aimCostFilter = new QFilter("project", "=", project.getPkValue());
if (project.getBoolean("editonunit") && !unitProjectIds.isEmpty()) {
/* if (project.getBoolean("editonunit") && !unitProjectIds.isEmpty()) {
aimCostFilter.and("unitproject", "in", unitProjectIds);
}
}*///二开注释掉的
aimCostFilter.and("isenable", "=", "1");
aimCostFilter.and("zcgj_periodyear", "=", zcgj_periodyear);//二开添加
DynamicObject[] aimCostBills = BusinessDataServiceHelper.load("ecco_aimcostbillcbs", "unitproject,treeentryentity,treeentryentity.cbs,treeentryentity.pdamount", new QFilter[]{aimCostFilter});
DynamicObject[] var6 = aimCostBills;
int var7 = aimCostBills.length;
@ -1304,9 +1342,11 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
protected void showAimCostBill(int rowIndex) {
DynamicObject unitProject = (DynamicObject) this.getModel().getValue("unitproject", rowIndex);
DynamicObject project = (DynamicObject) this.getModel().getValue("project");
Object zcgj_periodyear = this.getModel().getValue("zcgj_periodyear");//年度-二开添加
QFilter aimCostFilter = new QFilter("project", "=", project.getPkValue());
aimCostFilter.and("unitproject", "=", unitProject == null ? 0L : unitProject.getPkValue());
aimCostFilter.and("isenable", "=", "1");
aimCostFilter.and("zcgj_periodyear", "=", zcgj_periodyear);//二开添加
DynamicObject aimCostBill = QueryServiceHelper.queryOne("ecco_aimcostbillcbs", "id", new QFilter[]{aimCostFilter});
if (aimCostBill != null) {
BillShowParameter showParameter = OpenPageUtils.buildBillShowParam(aimCostBill.getLong("id"), "ecco_aimcostbillcbs");
@ -1317,6 +1357,7 @@ public class CbsDynamicCostFormPluginExt extends AbstractFormPlugin implements B
protected void showPeriodDetailCost(int rowIndex, String splitType) {
Map<String, Object> paramMap = new HashMap();
Object zcgj_periodyear = this.getModel().getValue("zcgj_periodyear");//年度--二开添加
DynamicObject cbs = (DynamicObject) this.getModel().getValue("cbs", rowIndex);
if (cbs != null && cbs.getBoolean("isleaf")) {
paramMap.put("projectId", this.getPageCache().get("queryProject"));