强共享营运资金分布表修改

This commit is contained in:
李贵强 2025-07-08 12:29:50 +08:00
parent 8e1145a7c0
commit 3737b86341
2 changed files with 61 additions and 30 deletions

View File

@ -10,6 +10,10 @@ import kd.sdk.plugin.Plugin;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 报表界面插件
@ -23,37 +27,64 @@ public class StrongOperateFormPlugin extends AbstractReportFormPlugin implements
public void processRowData(String gridPK, DynamicObjectCollection rowData, ReportQueryParam queryParam) {
super.processRowData(gridPK, rowData, queryParam);
//1.计算合计
BigDecimal shjh_amountjz = new BigDecimal("0");//合计_基准日期-余额
for (DynamicObject rowDatum : rowData) {
//合计资金合计()
BigDecimal amountjz = rowDatum.getBigDecimal("shjh_amountjz");
if (null != amountjz) {
shjh_amountjz = shjh_amountjz.add(amountjz);//基准日期-余额
}
}
DynamicObject dynamicObject = new DynamicObject(rowData.getDynamicObjectType());
dynamicObject.set("shjh_bankname", "合计");//组织编码
dynamicObject.set("shjh_amountjz", shjh_amountjz);
dynamicObject.set("shjh_percentage", null);
rowData.add(dynamicObject);
//2.计算每行 资金合计() 占比
for (DynamicObject rowDatum : rowData) {
//合计资金合计()
BigDecimal amountjz = rowDatum.getBigDecimal("shjh_amountjz");
if (null != amountjz) {
//资金合计()占比
// 先乘 100 再相除并保留两位小数
BigDecimal amountjz_zb = new BigDecimal("0");
if (shjh_amountjz.compareTo(BigDecimal.ZERO) != 0) {
// 先乘 100 再相除并保留两位小数
amountjz_zb = amountjz.multiply(new BigDecimal("100")).divide(shjh_amountjz, 2, RoundingMode.HALF_UP);
System.out.println("百分比结果: " + amountjz_zb + "%");
} else {
System.out.println("除数不能为 0无法进行计算。");
// --- 第一步合并相同银行名称的行排除"合计" ---
Map<String, DynamicObject> bankNameToRowMap = new HashMap<>();
List<DynamicObject> duplicateRowsToRemove = new ArrayList<>();
for (DynamicObject row : rowData) {
String bankName = row.getString("shjh_bankname");
if ("合计".equals(bankName)) continue;
if (bankNameToRowMap.containsKey(bankName)) {
// 合并金额
DynamicObject existingRow = bankNameToRowMap.get(bankName);
BigDecimal existingAmount = existingRow.getBigDecimal("shjh_amountjz");
BigDecimal currentAmount = row.getBigDecimal("shjh_amountjz");
if (existingAmount != null && currentAmount != null) {
existingRow.set("shjh_amountjz", existingAmount.add(currentAmount));
}
rowDatum.set("shjh_percentage", amountjz_zb);
duplicateRowsToRemove.add(row);
} else {
bankNameToRowMap.put(bankName, row);
}
}
rowData.removeAll(duplicateRowsToRemove);
// --- 第二步计算资金总和仅非合计行 ---
BigDecimal totalAmount = BigDecimal.ZERO;
for (DynamicObject row : rowData) {
if (!"合计".equals(row.getString("shjh_bankname"))) {
BigDecimal amount = row.getBigDecimal("shjh_amountjz");
if (amount != null) {
totalAmount = totalAmount.add(amount);
}
}
}
// --- 第三步计算每行占比 ---
BigDecimal percentageSum = BigDecimal.ZERO; // 用于验证占比总和
for (DynamicObject row : rowData) {
String bankName = row.getString("shjh_bankname");
if ("合计".equals(bankName)) continue;
BigDecimal amount = row.getBigDecimal("shjh_amountjz");
if (amount != null) {
BigDecimal percentage = BigDecimal.ZERO;
if (totalAmount.compareTo(BigDecimal.ZERO) != 0) {
percentage = amount.multiply(new BigDecimal("100"))
.divide(totalAmount, 2, RoundingMode.HALF_UP);
percentageSum = percentageSum.add(percentage); // 累加占比
}
row.set("shjh_percentage", percentage);
}
}
// --- 添加合计行占比强制设为100% ---
DynamicObject totalRow = new DynamicObject(rowData.getDynamicObjectType());
totalRow.set("shjh_bankname", "合计");
totalRow.set("shjh_amountjz", totalAmount);
totalRow.set("shjh_percentage", new BigDecimal("100")); // 关键修改点
rowData.add(totalRow);
}
}

View File

@ -65,7 +65,7 @@ public class StrongOperateQueryPlugin extends AbstractReportListDataPlugin imple
.finish();
// 再次根据银行编码分组 求和余额
result = result1.groupBy(new String[]{"shjh_orgnumber", "shjh_orgname", "shjh_bankname","banknumber","shjh_companyisshare"}).sum("shjh_amountjz").finish();
result = result1.groupBy(new String[]{"shjh_bankname","banknumber","shjh_companyisshare"}).sum("shjh_amountjz").finish();
} catch (Exception e) {
e.printStackTrace();