diff --git a/gl/src/client/nccloud/web/gl/accountrep/action/AccountBalanceTotalQueryAction.java b/gl/src/client/nccloud/web/gl/accountrep/action/AccountBalanceTotalQueryAction.java index 141a5e5..c8f9577 100644 --- a/gl/src/client/nccloud/web/gl/accountrep/action/AccountBalanceTotalQueryAction.java +++ b/gl/src/client/nccloud/web/gl/accountrep/action/AccountBalanceTotalQueryAction.java @@ -50,54 +50,79 @@ public class AccountBalanceTotalQueryAction implements ICommonAction { // 创建一个映射,根据 acccode 快速查找 data 中的元素 Map> dataMap = data.stream() .collect(Collectors.toMap(item -> (String) item.get("acccode"), item -> item)); - + for (Map 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 sumMap = new HashMap<>(); // 构造新的列表 List> mergedList = new ArrayList<>(); DecimalFormat decimalFormat = new DecimalFormat("#,##0.00"); + List bigDecimals = new ArrayList<>(); for (Map item : data1) { Map linkMap = (Map) 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 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 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> toBeRemoved = new ArrayList<>(); +// 计算每个父级科目的 endlocamount 和所有关联 data1 中 endlocamount 的差值 for (Map 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 pkAccountingBook = (List) params.get("pk_accountingbook"); //1001A1100000000017TP List pkAccasoa = (List) 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 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(){}); - firstBusiParamJson.put("pk_accasoa", new ArrayList(){}); + 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);