优化账账相对问题
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