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