优化账账相对问题
This commit is contained in:
parent
13b4d92f6f
commit
30a5ae7f0d
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding='gb2312'?>
|
||||||
|
<module displayname="gl" name="gl">
|
||||||
|
<dependencies>
|
||||||
|
</dependencies>
|
||||||
|
</module>
|
|
@ -0,0 +1,94 @@
|
||||||
|
package nccloud.web.gl.accountrep.action;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nccloud.framework.service.ServiceLocator;
|
||||||
|
import nccloud.pubitf.gl.account.IAccountReportWebService;
|
||||||
|
|
||||||
|
public class AccountBalanceTotalQueryAction {
|
||||||
|
public AccountBalanceTotalQueryAction() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object doQuery(Map<String, Object> paraMap) throws BusinessException {
|
||||||
|
// 科目余额表数据
|
||||||
|
Map<String, Object> result = ((IAccountReportWebService) ServiceLocator.find(IAccountReportWebService.class)).queryAccBalance(paraMap);
|
||||||
|
// 科目辅助余额表数据
|
||||||
|
Map<String, Object> result1 = ((IAccountReportWebService) ServiceLocator.find(IAccountReportWebService.class)).querySubjAssBalanceBooks(paraMap);
|
||||||
|
List<Map<String, Object>> data = (List<Map<String, Object>>) result.get("data");
|
||||||
|
List<Map<String, Object>> data1 = (List<Map<String, Object>>) result1.get("data");
|
||||||
|
|
||||||
|
// 过滤掉 data1 中 assname 为空的数据
|
||||||
|
data1 = data1.stream()
|
||||||
|
.filter(item -> item.get("assname") != null && !item.get("assname").toString().trim().isEmpty())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 创建一个映射,根据 acccode 快速查找 data 中的元素
|
||||||
|
Map<String, Map<String, Object>> dataMap = data.stream()
|
||||||
|
.collect(Collectors.toMap(item -> (String) item.get("acccode"), item -> item));
|
||||||
|
|
||||||
|
// 构造新的 Map,存储每个父级科目的期末余额之和
|
||||||
|
Map<String, Double> sumMap = new HashMap<>();
|
||||||
|
|
||||||
|
// 构造新的列表
|
||||||
|
List<Map<String, Object>> mergedList = 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 parentAcccode = acccode.substring(0, 4); // 假设父级科目编码是前4位
|
||||||
|
|
||||||
|
Map<String, Object> parentItem = dataMap.get(parentAcccode);
|
||||||
|
if (parentItem != null) {
|
||||||
|
String endlocamountStr = (String) item.get("endlocamount");
|
||||||
|
double endlocamount = parseEndlocamount(endlocamountStr);
|
||||||
|
|
||||||
|
// 更新 sumMap
|
||||||
|
sumMap.put(parentAcccode, sumMap.getOrDefault(parentAcccode, 0.0) + endlocamount);
|
||||||
|
|
||||||
|
// 构造新的 Map
|
||||||
|
Map<String, Object> newItem = new HashMap<>();
|
||||||
|
newItem.put("pacccode", parentAcccode);
|
||||||
|
newItem.put("paccname", parentItem.get("accname"));
|
||||||
|
newItem.put("pendlocamount", parentItem.get("endlocamount"));
|
||||||
|
newItem.put("acccode", acccode);
|
||||||
|
newItem.put("accname", parentItem.get("accname")); // 假设 data1 中没有 accname,使用父级的 accname
|
||||||
|
newItem.put("assname", item.get("assname"));
|
||||||
|
newItem.put("endlocamount", endlocamount);
|
||||||
|
mergedList.add(newItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算每个父级科目的 endlocamount 和所有关联 data1 中 endlocamount 的差值
|
||||||
|
for (Map<String, Object> item : mergedList) {
|
||||||
|
String parentAcccode = (String) item.get("pacccode");
|
||||||
|
double endlocamount = (double) item.get("pendlocamount");
|
||||||
|
double sumEndlocamount = sumMap.get(parentAcccode);
|
||||||
|
double difference = sumEndlocamount - endlocamount;
|
||||||
|
item.put("difference", difference);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 输出合并后的列表
|
||||||
|
for (Map<String, Object> item : mergedList) {
|
||||||
|
System.out.println(item);
|
||||||
|
}
|
||||||
|
return mergedList;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析 endlocamount 字符串为 double 类型
|
||||||
|
private static double parseEndlocamount(String endlocamountStr) {
|
||||||
|
if (endlocamountStr == null || endlocamountStr.isEmpty()) {
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
// 去除逗号
|
||||||
|
endlocamountStr = endlocamountStr.replace(",", "");
|
||||||
|
try {
|
||||||
|
return Double.parseDouble(endlocamountStr);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue