Compare commits

..

2 Commits

1 changed files with 79 additions and 31 deletions

View File

@ -12,7 +12,10 @@ import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.QueryServiceHelper;
import java.math.BigDecimal;
import java.util.EventObject; import java.util.EventObject;
import java.util.HashMap;
import java.util.Map;
/** /**
* 企业成本核算表单插件 * 企业成本核算表单插件
@ -51,11 +54,14 @@ public class EntCostSplitBillPlugin extends AbstractBillPlugIn {
filter.and(new QFilter("zcgj_period", QCP.equals, period1.getPkValue()));//期间 filter.and(new QFilter("zcgj_period", QCP.equals, period1.getPkValue()));//期间
filter.and(new QFilter("zcgj_isnew", QCP.equals, true));//是否最新 filter.and(new QFilter("zcgj_isnew", QCP.equals, true));//是否最新
DynamicObjectCollection rptAssistBalanceGxCollection = QueryServiceHelper.query("zcgj_rpt_assistbalancegx", DynamicObjectCollection rptAssistBalanceGxCollection = QueryServiceHelper.query("zcgj_rpt_assistbalancegx",
"id,zcgj_account,zcgj_processname", "id,zcgj_account,zcgj_processname,zcgj_debitlocal,zcgj_costcompanyname",
new QFilter[]{filter});//"核算维度余额取数表(矿山工序维度)" new QFilter[]{filter});//"核算维度余额取数表(矿山工序维度)"
// 在循环开始前定义汇总Map
Map<String, DynamicObject> summaryMap = new HashMap<>();
for (DynamicObject rptAssistBalanceGx : rptAssistBalanceGxCollection) { for (DynamicObject rptAssistBalanceGx : rptAssistBalanceGxCollection) {
QFilter[] qFilter = new QFilter[]{new QFilter("id", QCP.equals, rptAssistBalanceGx.get("zcgj_account"))}; QFilter[] qFilter = new QFilter[]{new QFilter("id", QCP.equals, rptAssistBalanceGx.get("zcgj_account"))};//科目ID
DynamicObject bd_accountview = BusinessDataServiceHelper.loadSingle("bd_accountview", DynamicObject bd_accountview = BusinessDataServiceHelper.loadSingle("bd_accountview",
"id,number,name", qFilter);//"会计科目" "id,number,name", qFilter);//"会计科目"
if (bd_accountview == null) { if (bd_accountview == null) {
@ -74,42 +80,84 @@ public class EntCostSplitBillPlugin extends AbstractBillPlugIn {
if (ec_ecbd_pro_cbs == null && zcgj_accountcost == null && ec_projects.length == 0) { if (ec_ecbd_pro_cbs == null && zcgj_accountcost == null && ec_projects.length == 0) {
continue; continue;
} }
DynamicObject newEntry = new DynamicObject(entryType);
DynamicObjectCollection subEntryEntityCollection = newEntry.getDynamicObjectCollection("zcgj_subentryentity");//成本核算维度明细 // 构建去重key - 根据工序或成本中心分别处理
DynamicObjectType subEntryEntityType = subEntryEntityCollection.getDynamicObjectType(); String processName = rptAssistBalanceGx.getString("zcgj_processname"); // 工序名称
DynamicObject newEntrySubEntryEntity = new DynamicObject(subEntryEntityType); String costCompanyName = rptAssistBalanceGx.getString("zcgj_costcompanyname"); // 成本中心名称
if (ec_projects.length != 0) { Object costType = zcgj_accountcost != null ? zcgj_accountcost.get("zcgj_acccostentry.zcgj_costtype") : null; // 成本项
for (DynamicObject ec_project : ec_projects) { Object secType = zcgj_accountcost != null ? zcgj_accountcost.get("zcgj_acccostentry.zcgj_sectype") : null; // 二级分类
boolean zcgj_init = ec_project.getBoolean("zcgj_init");//默认项目
if (zcgj_init) { String uniqueKey = "";
if (processName != null && !processName.isEmpty()) {
// 存在工序时按照工序+成本项+二级分类去重
uniqueKey = "PROCESS_" + processName + "_" + (costType != null ? costType.toString() : "") + "_" + (secType != null ? secType.toString() : "");
} else if (costCompanyName != null && !costCompanyName.isEmpty()) {
// 存在成本中心时按照成本中心+成本项+二级分类去重
uniqueKey = "COSTCENTER_" + costCompanyName + "_" + (costType != null ? costType.toString() : "") + "_" + (secType != null ? secType.toString() : "");
} else {
// 如果既没有工序也没有成本中心则不进行汇总使用唯一ID
uniqueKey = "NONE_" + rptAssistBalanceGx.getString("id");
}
DynamicObject existingEntry = summaryMap.get(uniqueKey);
if (existingEntry != null) {
// 如果已存在相同key的记录则累加成本金额
Object existingAmount = existingEntry.get("costamount");
Object newAmount = rptAssistBalanceGx.get("zcgj_debitlocal");
// 进行金额累加
BigDecimal totalAmount = new BigDecimal(existingAmount != null ? existingAmount.toString() : "0")
.add(new BigDecimal(newAmount != null ? newAmount.toString() : "0"));
existingEntry.set("costamount", totalAmount);
} else {
// 如果不存在相同key的记录则创建新记录
DynamicObject newEntry = new DynamicObject(entryType);
DynamicObjectCollection subEntryEntityCollection = newEntry.getDynamicObjectCollection("zcgj_subentryentity");//成本核算维度明细
DynamicObjectType subEntryEntityType = subEntryEntityCollection.getDynamicObjectType();
DynamicObject newEntrySubEntryEntity = new DynamicObject(subEntryEntityType);
if (ec_projects.length != 0) {
for (DynamicObject ec_project : ec_projects) {
boolean zcgj_init = ec_project.getBoolean("zcgj_init");//默认项目
if (zcgj_init) {
DynamicObject ec_project_f7 = BusinessDataServiceHelper.loadSingle("ec_project_f7", "id",
new QFilter[]{new QFilter("id", QCP.equals, ec_project.getPkValue())});//项目
newEntry.set("project", ec_project_f7);//"项目"
newEntrySubEntryEntity.set("zcgj_project", ec_project_f7);//项目
break;
}
}
Object project = newEntry.get("project");
if (project == null) {
DynamicObject ec_project_f7 = BusinessDataServiceHelper.loadSingle("ec_project_f7", "id", DynamicObject ec_project_f7 = BusinessDataServiceHelper.loadSingle("ec_project_f7", "id",
new QFilter[]{new QFilter("id", QCP.equals, ec_project.getPkValue())});//项目 new QFilter[]{new QFilter("id", QCP.equals, ec_projects[0].getPkValue())});//项目
newEntry.set("project", ec_project_f7);//"项目" newEntry.set("project", ec_project_f7);//项目
newEntrySubEntryEntity.set("zcgj_project", ec_project_f7);//项目 newEntrySubEntryEntity.set("zcgj_project", ec_project_f7);//项目
break;
} }
} }
Object project = newEntry.get("project"); if (ec_ecbd_pro_cbs != null) {
if (project == null) { newEntry.set("cbs", ec_ecbd_pro_cbs);//成本分解结构
DynamicObject ec_project_f7 = BusinessDataServiceHelper.loadSingle("ec_project_f7", "id", newEntrySubEntryEntity.set("zcgj_cbs", ec_ecbd_pro_cbs);//成本分解结构
new QFilter[]{new QFilter("id", QCP.equals, ec_projects[0].getPkValue())});//项目
newEntry.set("project", ec_project_f7);//项目
newEntrySubEntryEntity.set("zcgj_project", ec_project_f7);//项目
} }
if (zcgj_accountcost != null) {
newEntry.set("costtype", zcgj_accountcost.get("zcgj_acccostentry.zcgj_costtype"));//成本项
newEntry.set("zcgj_sectype", zcgj_accountcost.get("zcgj_acccostentry.zcgj_sectype"));//二级分类
newEntrySubEntryEntity.set("zcgj_costtype", zcgj_accountcost.get("zcgj_acccostentry.zcgj_costtype"));//成本项
newEntrySubEntryEntity.set("zcgj_sectype1", zcgj_accountcost.get("zcgj_acccostentry.zcgj_sectype"));//二级分类
}
newEntry.set("costamount", rptAssistBalanceGx.get("zcgj_debitlocal"));//成本金额
summaryMap.put(uniqueKey, newEntry);
subEntryEntityCollection.add(newEntrySubEntryEntity);
} }
if (ec_ecbd_pro_cbs != null) {
newEntry.set("cbs", ec_ecbd_pro_cbs);//成本分解结构
newEntrySubEntryEntity.set("zcgj_cbs", ec_ecbd_pro_cbs);//成本分解结构
}
if (zcgj_accountcost != null) {
newEntry.set("costtype", zcgj_accountcost.get("zcgj_acccostentry.zcgj_costtype"));//成本项
newEntry.set("zcgj_sectype", zcgj_accountcost.get("zcgj_acccostentry.zcgj_sectype"));//二级分类
newEntrySubEntryEntity.set("zcgj_costtype", zcgj_accountcost.get("zcgj_acccostentry.zcgj_costtype"));//成本项
newEntrySubEntryEntity.set("zcgj_sectype1", zcgj_accountcost.get("zcgj_acccostentry.zcgj_sectype"));//二级分类
}
entryCollection.add(newEntry);
subEntryEntityCollection.add(newEntrySubEntryEntity);
} }
// 清空原集合并添加汇总后的数据
entryCollection.clear();
for (DynamicObject entry : summaryMap.values()) {
entryCollection.add(entry);
}
this.getView().updateView("entryentity");//刷新分录 this.getView().updateView("entryentity");//刷新分录
this.getView().updateView("zcgj_subentryentity");//刷新分录 this.getView().updateView("zcgj_subentryentity");//刷新分录
this.getModel().endInit(); this.getModel().endInit();