Explorar el Código

资金日报表 统计问题处理

yzc hace 1 año
padre
commit
899805976e

+ 29 - 68
hx-account/src/main/java/com/fjhx/account/service/account/impl/StatementServiceImpl.java

@@ -147,83 +147,44 @@ public class StatementServiceImpl implements StatementService {
 
     @Override
     public List<Map<String, Object>> getTotalList(CapitalDailyDto dto) {
-        Date beginDate, endDate;
-
-        Date date = new Date();
-        try {
-            Date parse = DateUtil.parse(dto.getDateBetween(), "yyyy-MM");
-            if (parse.after(DateUtil.endOfMonth(date))) {
-                throw new ServiceException("统计日期不能大于本月");
-            }
-
-            boolean sameMonth = DateUtil.isSameMonth(parse, date);
-
-            beginDate = DateUtil.beginOfMonth(parse);
-            endDate = sameMonth ? DateUtil.endOfDay(date) : DateUtil.endOfMonth(parse);
-        } catch (DateException dateException) {
-            throw new ServiceException("范围期间日期格式错误,应为 'yyyy-MM' 格式");
-        }
-
-        // 获取归属公司
-        List<Corporation> corporationList = getCorporationList(dto.getCorporationId());
-        if (corporationList.size() == 0) {
-            return new ArrayList<>();
-        }
-
-        // 获取账户
-        List<AccountManagement> managementList = getManagementList(dto.getManagementId(), corporationList);
-        if (managementList.size() == 0) {
-            return new ArrayList<>();
-        }
-
-        // 查询流水记录
-        List<AccountRunningWater> runningWaterList = getRunningWaterList(beginDate, managementList);
-
         List<CapitalDailyBo> capitalDailyBoList = getCapitalDailyBoList(dto);
 
+        List<Map<String, Object>> data = new ArrayList<>();
+        Map<String, List<CapitalDailyBo>> capitalDailyBoMap = capitalDailyBoList.stream().collect(Collectors.groupingBy(CapitalDailyBo::getCurrencyType));
+        //遍历币种
+        for (Map.Entry<String, List<CapitalDailyBo>> entry : capitalDailyBoMap.entrySet()) {
+            BigDecimal income = BigDecimal.ZERO;
+            BigDecimal expenditure = BigDecimal.ZERO;
+            BigDecimal balance = BigDecimal.ZERO;
 
-        Map<String, Map<String, Object>> totalMap = new HashMap<>();
-
-        Map<String, BigDecimal> balanceMap = new HashMap<>();
-        for (CapitalDailyBo capitalDailyBo : capitalDailyBoList) {
-            BigDecimal balance = balanceMap.getOrDefault(capitalDailyBo.getCurrencyType(), BigDecimal.ZERO);
-            balanceMap.put(capitalDailyBo.getCurrencyType(), balance.add(capitalDailyBo.getRemainder()));
-
-
-            List<AccountRunningWater> itemRunningWaterList = runningWaterList.stream().filter(item -> Objects.equals(item.getCurrency(), capitalDailyBo.getCurrencyType())).collect(Collectors.toList());
+            //遍历该币种的所有账户数据
+            List<CapitalDailyBo> value = entry.getValue();
+            List<Map<String, Object>> flowingWaterList = new ArrayList<>();
+            value.forEach(item -> flowingWaterList.addAll(item.getFlowingWaterList()));
 
+            //获取该币种开始时间余额
+            for (CapitalDailyBo capitalDailyBo : value) {
+                balance = balance.add(capitalDailyBo.getRemainder());
+            }
 
-            //收入
-            BigDecimal income = itemRunningWaterList.stream()
-                    .filter(item -> item.getTransactionTime().before(endDate))
-                    .filter(item -> Objects.equals(item.getStatus(), "10"))
-                    .map(AccountRunningWater::getAmount)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            //根据历史获取收入支出统计
+            for (Map<String, Object> stringObjectMap : flowingWaterList) {
+                income = income.add((BigDecimal) stringObjectMap.getOrDefault("income", BigDecimal.ZERO));
+                expenditure = expenditure.add((BigDecimal) stringObjectMap.getOrDefault("expenditure", BigDecimal.ZERO));
+            }
 
-            //支出
-            BigDecimal expenditure = itemRunningWaterList.stream()
-                    .filter(item -> item.getTransactionTime().before(endDate))
-                    .filter(item -> Objects.equals(item.getStatus(), "20"))
-                    .map(AccountRunningWater::getAmount)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            balance = balance.add(income).subtract(expenditure);
 
+            //整理每个币种的 收入 支出 余额
+            Map<String, Object> map1 = new HashMap<>();
+            map1.put("balance", balance);
+            map1.put("income", income);
+            map1.put("expenditure", expenditure);
+            map1.put("currency", entry.getKey());
 
-            //统计成map
-            Map<String, Object> map1 = totalMap.getOrDefault( capitalDailyBo.getCurrencyType(),new HashMap<>());
-            BigDecimal balance1 = (BigDecimal) map1.getOrDefault("balance", BigDecimal.ZERO);
-            balance1 = balance1.add(balanceMap.getOrDefault(capitalDailyBo.getCurrencyType(), BigDecimal.ZERO).add(income).subtract(expenditure));
-            map1.put("balance", balance1);
-            BigDecimal income1 = (BigDecimal) map1.getOrDefault("income", BigDecimal.ZERO);
-            income1 = income1.add(income);
-            map1.put("income", income1);
-            BigDecimal expenditure1 = (BigDecimal) map1.getOrDefault("expenditure", BigDecimal.ZERO);
-            expenditure1 = expenditure1.add(expenditure);
-            map1.put("expenditure", expenditure1);
-            map1.put("currency", capitalDailyBo.getCurrencyType());
-
-            totalMap.put(capitalDailyBo.getCurrencyType(),map1);
+            data.add(map1);
         }
-        return totalMap.values().stream().collect(Collectors.toList());
+        return data;
     }
 
     /**