优化账账相对问题
This commit is contained in:
		
							parent
							
								
									2ac318e680
								
							
						
					
					
						commit
						0a39995ce0
					
				|  | @ -50,54 +50,79 @@ public class AccountBalanceTotalQueryAction implements ICommonAction { | |||
|         // 创建一个映射,根据 acccode 快速查找 data 中的元素 | ||||
|         Map<String, Map<String, Object>> dataMap = data.stream() | ||||
|                 .collect(Collectors.toMap(item -> (String) item.get("acccode"), item -> item)); | ||||
| 
 | ||||
|         for (Map<String, Object> item : data) { | ||||
|             String endorint = (String) item.get("endorint"); | ||||
|             BigDecimal endlocamount = parseEndlocamount((String) item.get("endlocamount")) ; | ||||
|             if ("贷".equals(endorint)) { | ||||
|                 item.put("endlocamount", endlocamount.negate()); | ||||
|             } | ||||
|         } | ||||
|         // 构造新的 Map,存储每个父级科目的期末余额之和 | ||||
|         Map<String, BigDecimal> sumMap = new HashMap<>(); | ||||
| 
 | ||||
|         // 构造新的列表 | ||||
|         List<Map<String, Object>> mergedList = new ArrayList<>(); | ||||
|         DecimalFormat decimalFormat = new DecimalFormat("#,##0.00"); | ||||
|         List<BigDecimal> bigDecimals = new ArrayList<>(); | ||||
|         for (Map<String, Object> item : data1) { | ||||
|             Map<String, Object> linkMap = (Map<String, Object>) item.get("link"); | ||||
|             String acccode = (String) linkMap.get("acccode"); | ||||
| 
 | ||||
|             String accname = (String) item.get("accname"); | ||||
|             String parentAcccode = acccode.substring(0, 4); // 假设父级科目编码是前4位 | ||||
| 
 | ||||
|             String parentAcccode = acccode; | ||||
|             Map<String, Object> parentItem = dataMap.get(parentAcccode); | ||||
| 
 | ||||
|             if (parentItem != null) { | ||||
|                 String endlocamountStr = (String) item.get("endlocamount"); | ||||
|                 String endorint = (String) item.get("endorint"); | ||||
|                 BigDecimal endlocamount = parseEndlocamount(endlocamountStr); | ||||
| 
 | ||||
|                 // 更新 sumMap | ||||
|                 sumMap.put(parentAcccode, sumMap.getOrDefault(parentAcccode, BigDecimal.ZERO).add(endlocamount) ); | ||||
|                 // 使用 DecimalFormat 格式化 | ||||
| 
 | ||||
|                 // 构造新的 Map | ||||
|                // 构造新的 Map | ||||
|                 Map<String, Object> newItem = new HashMap<>(); | ||||
|                 newItem.put("endlocamount", decimalFormat.format(endlocamount)); | ||||
| 
 | ||||
|                 // 根据 endorint 调整 endlocamount 的符号 | ||||
|                 if ("贷".equals(endorint)) { | ||||
|                     endlocamount = endlocamount.negate(); | ||||
|                 } | ||||
|                 bigDecimals.add(endlocamount); | ||||
|                 // 更新 sumMap | ||||
|                 sumMap.put(parentAcccode, sumMap.getOrDefault(parentAcccode, BigDecimal.ZERO).add(endlocamount)); | ||||
| 
 | ||||
|                 newItem.put("pacccode", parentAcccode); | ||||
|                 newItem.put("pendorint", parentItem.get("endorint")); | ||||
|                 newItem.put("paccname", parentItem.get("accname")); | ||||
|                 newItem.put("pendlocamount", parentItem.get("endlocamount")); | ||||
|                 newItem.put("acccode", acccode); | ||||
|                 newItem.put("accname", accname); // 假设 data1 中没有 accname,使用父级的 accname | ||||
|                 newItem.put("assname", item.get("assname")); | ||||
|                 newItem.put("endlocamount",decimalFormat.format(endlocamount)); | ||||
|                 newItem.put("endorint", item.get("endorint")); | ||||
| //                newItem.put("endlocamount", decimalFormat.format(endlocamount)); | ||||
|                 mergedList.add(newItem); | ||||
|             } | ||||
|         } | ||||
|         // 计算每个父级科目的 endlocamount 和所有关联 data1 中 endlocamount 的差值 | ||||
|         BigDecimal sum=BigDecimal.valueOf(0); | ||||
|         for (BigDecimal bigDecimal : bigDecimals){ | ||||
|             sum=sum.add(bigDecimal); | ||||
|         } | ||||
|         List<Map<String, Object>> toBeRemoved = new ArrayList<>(); | ||||
| // 计算每个父级科目的 endlocamount 和所有关联 data1 中 endlocamount 的差值 | ||||
|         for (Map<String, Object> item : mergedList) { | ||||
|             String parentAcccode = (String) item.get("pacccode"); | ||||
|             BigDecimal endlocamount = (BigDecimal) parseEndlocamount((String)item.get("pendlocamount")); | ||||
|             BigDecimal endlocamount = (BigDecimal) item.get("pendlocamount"); | ||||
|             BigDecimal sumEndlocamount = sumMap.get(parentAcccode); | ||||
|             BigDecimal difference = sumEndlocamount.subtract(endlocamount); | ||||
|             if (difference.compareTo(BigDecimal.ZERO) == 0) { | ||||
|                 mergedList.remove(item); | ||||
|                 toBeRemoved.add(item); | ||||
|             } else { | ||||
|                 if(endlocamount.compareTo(BigDecimal.ZERO) < 0){ | ||||
|                     item.put("pendlocamount",decimalFormat.format(endlocamount.negate()) ); | ||||
|                 }else{ | ||||
|                     item.put("pendlocamount",decimalFormat.format(endlocamount) ); | ||||
|                 } | ||||
|                 item.put("difference", decimalFormat.format(difference)); | ||||
|             } | ||||
|         } | ||||
|         mergedList.removeAll(toBeRemoved); | ||||
|         for (int i = 1; i < mergedList.size(); i++) { | ||||
|             mergedList.get(i).put("pacccode", ""); | ||||
|             mergedList.get(i).put("paccname", ""); | ||||
|  | @ -131,13 +156,14 @@ public class AccountBalanceTotalQueryAction implements ICommonAction { | |||
|         List<String> pkAccountingBook = (List<String>) params.get("pk_accountingbook"); | ||||
| //1001A1100000000017TP | ||||
|         List<String> pkAccasoa = (List<String>) params.get("pk_accasoa"); | ||||
|         pkAccasoa.add("1001A1100000000017TP"); | ||||
| //        pkAccasoa.add("1001A1100000000017TP"); | ||||
|         String startYear = (String) params.get("startyear"); | ||||
|         String endYear = (String) params.get("endyear"); | ||||
|         String startPeriod = (String) params.get("startperiod"); | ||||
|         String endPeriod = (String) params.get("endperiod"); | ||||
|         String startDate = (String) params.get("startdate"); | ||||
|         String endDate = (String) params.get("enddate"); | ||||
|         String isleave = (String) params.get("isleave"); | ||||
| 
 | ||||
|         // 创建第一个 Map 对象 | ||||
|         Map<String, Object> firstBusiParamJson = new HashMap<>(); | ||||
|  | @ -148,7 +174,7 @@ public class AccountBalanceTotalQueryAction implements ICommonAction { | |||
|         firstBusiParamJson.put("versiondate", "2025-01-02"); | ||||
|         firstBusiParamJson.put("startlvl", "1"); | ||||
|         firstBusiParamJson.put("endlvl", "1"); | ||||
|         firstBusiParamJson.put("isleave", true); | ||||
|         firstBusiParamJson.put("isleave", isleave); | ||||
|         firstBusiParamJson.put("isoutacc", "N"); | ||||
|         firstBusiParamJson.put("startyear", startYear); | ||||
|         firstBusiParamJson.put("endyear", endYear); | ||||
|  | @ -172,7 +198,7 @@ public class AccountBalanceTotalQueryAction implements ICommonAction { | |||
|         firstBusiParamJson.put("twowaybalance", "N"); | ||||
|         firstBusiParamJson.put("istree", "Y"); | ||||
|         firstBusiParamJson.put("qryObjs", new ArrayList<String>(){}); | ||||
|         firstBusiParamJson.put("pk_accasoa", new ArrayList<String>(){}); | ||||
|         firstBusiParamJson.put("pk_accasoa", pkAccasoa); | ||||
| 
 | ||||
| //        firstBusiParamJson.put("pk_accasoa", pkAccasoa);//1001A1100000000017SV | ||||
| 
 | ||||
|  | @ -193,7 +219,7 @@ public class AccountBalanceTotalQueryAction implements ICommonAction { | |||
|         secondBusiParamJson.put("versiondate", null); | ||||
|         secondBusiParamJson.put("startlvl", "1"); | ||||
|         secondBusiParamJson.put("endlvl", "1"); | ||||
|         secondBusiParamJson.put("isleave", false); | ||||
|         secondBusiParamJson.put("isleave", isleave); | ||||
|         secondBusiParamJson.put("isoutacc", "N"); | ||||
|         secondBusiParamJson.put("startyear", startYear); | ||||
|         secondBusiParamJson.put("endyear", endYear); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue