|
@@ -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;
|
|
|
}
|
|
|
|
|
|
/**
|