强共享营运资金分布表修改
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,无法进行计算。"); | ||||
|                 bankNameToRowMap.put(bankName, row); | ||||
|             } | ||||
|                 rowDatum.set("shjh_percentage", amountjz_zb); | ||||
|         } | ||||
|         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