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