use of com.tony.billing.dto.TagCostInfoDTO in project BillingDubbo by TonyJiangWJ.
the class BudgetServiceImpl method getBudgetReportByMonth.
@Override
public BudgetReportModel getBudgetReportByMonth(String monthInfo, Long userId) {
Preconditions.checkState(YEAR_MONTH_PATTERN.matcher(monthInfo).find(), "参数错误");
BudgetReportModel reportInfo = new BudgetReportModel();
reportInfo.setYearMonthInfo(monthInfo);
String year = monthInfo.substring(0, 4);
Integer month = NumberUtils.toInt(monthInfo.substring(5));
Budget query = new Budget();
query.setBelongYear(year);
query.setBelongMonth(month);
query.setUserId(userId);
List<Budget> budgets = mapper.findByYearMonth(query);
if (CollectionUtils.isNotEmpty(budgets)) {
List<Long> monthTagIds = tagInfoMapper.listTagIdsByBudgetMonth(year, month, userId, null);
List<CostRecord> noBudgetRecords = costRecordMapper.listByMonthAndExceptTagIds(monthInfo, userId, monthTagIds);
if (CollectionUtils.isNotEmpty(noBudgetRecords)) {
reportInfo.setNoBudgetUsed(noBudgetRecords.stream().mapToLong(CostRecord::getMoney).sum());
} else {
logger.info("[{}] 未关联预算账单数据不存在", monthInfo);
}
List<CostRecord> budgetRecords = costRecordMapper.listByMonthAndTagIds(monthInfo, userId, monthTagIds);
if (CollectionUtils.isNotEmpty(budgetRecords)) {
reportInfo.setBudgetUsed(budgetRecords.stream().mapToLong(CostRecord::getMoney).sum());
} else {
logger.info("[{}] 预算关联账单数据不存在", monthInfo);
}
budgets.forEach(b -> {
List<TagInfo> budgetTags = tagInfoMapper.listTagInfoByBudgetId(b.getId(), userId);
Long sum = 0L;
BudgetReportItemDTO item = new BudgetReportItemDTO();
List<CostRecord> costRecords = new ArrayList<>();
if (CollectionUtils.isNotEmpty(budgetTags)) {
item.setTagInfos(budgetTags.parallelStream().map(tag -> {
TagCostInfoDTO costInfoDTO = new TagCostInfoDTO();
List<CostRecord> tagCostRecords = costRecordMapper.listByMonthAndTagIds(monthInfo, userId, Collections.singletonList(tag.getId()));
if (CollectionUtils.isNotEmpty(tagCostRecords)) {
costInfoDTO.setAmount(tagCostRecords.stream().mapToLong(CostRecord::getMoney).sum());
costRecords.addAll(tagCostRecords);
}
costInfoDTO.setTagId(tag.getId());
costInfoDTO.setTagName(tag.getTagName());
return costInfoDTO;
}).collect(Collectors.toList()));
}
item.setVersion(b.getVersion());
item.setId(b.getId());
item.setName(b.getBudgetName());
item.setAmount(b.getBudgetMoney());
if (CollectionUtils.isNotEmpty(costRecords)) {
sum = costRecords.parallelStream().distinct().mapToLong(CostRecord::getMoney).sum();
}
item.setUsed(sum);
item.setRemain(b.getBudgetMoney() - sum);
reportInfo.addBudgetInfos(item);
});
return reportInfo.build();
}
return null;
}
Aggregations