Search in sources :

Example 1 with BudgetReportItemDTO

use of com.tony.billing.dto.BudgetReportItemDTO 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;
}
Also used : TagCostInfoDTO(com.tony.billing.dto.TagCostInfoDTO) ArrayList(java.util.ArrayList) CostRecord(com.tony.billing.entity.CostRecord) BudgetReportItemDTO(com.tony.billing.dto.BudgetReportItemDTO) TagInfo(com.tony.billing.entity.TagInfo) Budget(com.tony.billing.entity.Budget) BudgetReportModel(com.tony.billing.model.BudgetReportModel)

Aggregations

BudgetReportItemDTO (com.tony.billing.dto.BudgetReportItemDTO)1 TagCostInfoDTO (com.tony.billing.dto.TagCostInfoDTO)1 Budget (com.tony.billing.entity.Budget)1 CostRecord (com.tony.billing.entity.CostRecord)1 TagInfo (com.tony.billing.entity.TagInfo)1 BudgetReportModel (com.tony.billing.model.BudgetReportModel)1 ArrayList (java.util.ArrayList)1