强共享营运资金分布表修改
This commit is contained in:
parent
8e1145a7c0
commit
3737b86341
|
|
@ -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);//基准日期-余额
|
||||
// --- 第一步:合并相同银行名称的行(排除"合计"行) ---
|
||||
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));
|
||||
}
|
||||
}
|
||||
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 + "%");
|
||||
duplicateRowsToRemove.add(row);
|
||||
} else {
|
||||
System.out.println("除数不能为 0,无法进行计算。");
|
||||
}
|
||||
rowDatum.set("shjh_percentage", amountjz_zb);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Reference in New Issue