企业成本核算表单插件取数逻辑添加成本金额汇总去重逻辑
This commit is contained in:
parent
a4dc2091a3
commit
b783eca764
|
@ -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,10 +80,42 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 构建去重key - 根据工序或成本中心分别处理
|
||||||
|
String processName = rptAssistBalanceGx.getString("zcgj_processname"); // 工序名称
|
||||||
|
String costCompanyName = rptAssistBalanceGx.getString("zcgj_costcompanyname"); // 成本中心名称
|
||||||
|
Object costType = zcgj_accountcost != null ? zcgj_accountcost.get("zcgj_acccostentry.zcgj_costtype") : null; // 成本项
|
||||||
|
Object secType = zcgj_accountcost != null ? zcgj_accountcost.get("zcgj_acccostentry.zcgj_sectype") : null; // 二级分类
|
||||||
|
|
||||||
|
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);
|
DynamicObject newEntry = new DynamicObject(entryType);
|
||||||
DynamicObjectCollection subEntryEntityCollection = newEntry.getDynamicObjectCollection("zcgj_subentryentity");//成本核算维度明细
|
DynamicObjectCollection subEntryEntityCollection = newEntry.getDynamicObjectCollection("zcgj_subentryentity");//成本核算维度明细
|
||||||
DynamicObjectType subEntryEntityType = subEntryEntityCollection.getDynamicObjectType();
|
DynamicObjectType subEntryEntityType = subEntryEntityCollection.getDynamicObjectType();
|
||||||
DynamicObject newEntrySubEntryEntity = new DynamicObject(subEntryEntityType);
|
DynamicObject newEntrySubEntryEntity = new DynamicObject(subEntryEntityType);
|
||||||
|
|
||||||
if (ec_projects.length != 0) {
|
if (ec_projects.length != 0) {
|
||||||
for (DynamicObject ec_project : ec_projects) {
|
for (DynamicObject ec_project : ec_projects) {
|
||||||
boolean zcgj_init = ec_project.getBoolean("zcgj_init");//默认项目
|
boolean zcgj_init = ec_project.getBoolean("zcgj_init");//默认项目
|
||||||
|
@ -107,9 +145,19 @@ public class EntCostSplitBillPlugin extends AbstractBillPlugIn {
|
||||||
newEntrySubEntryEntity.set("zcgj_costtype", zcgj_accountcost.get("zcgj_acccostentry.zcgj_costtype"));//成本项
|
newEntrySubEntryEntity.set("zcgj_costtype", zcgj_accountcost.get("zcgj_acccostentry.zcgj_costtype"));//成本项
|
||||||
newEntrySubEntryEntity.set("zcgj_sectype1", zcgj_accountcost.get("zcgj_acccostentry.zcgj_sectype"));//二级分类
|
newEntrySubEntryEntity.set("zcgj_sectype1", zcgj_accountcost.get("zcgj_acccostentry.zcgj_sectype"));//二级分类
|
||||||
}
|
}
|
||||||
entryCollection.add(newEntry);
|
newEntry.set("costamount", rptAssistBalanceGx.get("zcgj_debitlocal"));//成本金额
|
||||||
|
|
||||||
|
summaryMap.put(uniqueKey, newEntry);
|
||||||
subEntryEntityCollection.add(newEntrySubEntryEntity);
|
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();
|
||||||
|
|
Loading…
Reference in New Issue