优化账账相对问题

This commit is contained in:
lihao 2025-01-03 17:58:16 +08:00
parent 2ac318e680
commit 0a39995ce0
1 changed files with 43 additions and 17 deletions

View File

@ -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<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);
}
}
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);