use of com.tony.billing.entity.TagInfo 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;
}
use of com.tony.billing.entity.TagInfo in project BillingDubbo by TonyJiangWJ.
the class BudgetServiceImpl method queryBudgetsByCondition.
@Override
public List<BudgetDTO> queryBudgetsByCondition(Budget condition) {
Preconditions.checkNotNull(condition.getUserId(), "userId must not be null");
Preconditions.checkNotNull(condition.getBelongMonth(), "month must not be null");
Preconditions.checkNotNull(condition.getBelongYear(), "year must not be null");
List<Budget> budgets = mapper.findByYearMonth(condition);
return budgets.stream().map((budget) -> {
BudgetDTO dto = new BudgetDTO();
dto.setId(budget.getId());
dto.setBudgetName(budget.getBudgetName());
dto.setBudgetMoney(MoneyUtil.fen2Yuan(budget.getBudgetMoney()));
dto.setYearMonth(YearMonth.of(Integer.parseInt(budget.getBelongYear()), budget.getBelongMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM")));
List<TagInfo> tagInfos = tagInfoMapper.listTagInfoByBudgetId(budget.getId(), budget.getUserId());
dto.setTagInfos(new TagInfoToDtoListSupplier(tagInfos).get());
return dto;
}).collect(Collectors.toList());
}
use of com.tony.billing.entity.TagInfo in project BillingDubbo by TonyJiangWJ.
the class TagInfoServiceImpl method listCommonTagInfos.
@Override
public List<TagInfoDTO> listCommonTagInfos(List<Long> recordIds) {
Preconditions.checkState(CollectionUtils.isNotEmpty(recordIds));
List<TagInfo> commonTags = mapper.listCommonTagInfos(recordIds, recordIds.size());
return new TagInfoToDtoListSupplier(commonTags).get();
}
use of com.tony.billing.entity.TagInfo in project BillingDubbo by TonyJiangWJ.
the class TagInfoController method listTag.
/**
* 列出所有标签
*
* @param request
* @return
*/
@RequestMapping(value = "/tag/list")
public TagInfoListResponse listTag(@ModelAttribute("request") BaseRequest request) {
TagInfoListResponse response = new TagInfoListResponse();
TagInfo tagInfo = new TagInfo();
tagInfo.setUserId(request.getUserId());
List<TagInfo> tagInfos = tagInfoService.listTagInfo(tagInfo);
if (!CollectionUtils.isEmpty(tagInfos)) {
response.setTagInfoList(tagInfos.parallelStream().map(tag -> {
TagInfoDTO model = new TagInfoDTO();
model.setTagName(tag.getTagName());
model.setTagId(tag.getId());
model.setUsageCount(tagInfoService.countTagUsage(tag.getId(), request.getUserId()));
return model;
}).sorted(Comparator.comparing(TagInfoDTO::getUsageCount).reversed()).collect(Collectors.toList()));
}
ResponseUtil.success(response);
return response;
}
use of com.tony.billing.entity.TagInfo in project BillingDubbo by TonyJiangWJ.
the class TagInfoController method listCostTag.
/**
* 列出账单赋值的标签
*
* @param request
* @return
*/
@RequestMapping(value = "/cost/tag/list")
public CostTagListResponse listCostTag(@ModelAttribute("request") @Validated CostTagListRequest request) {
CostTagListResponse response = new CostTagListResponse();
try {
List<TagInfo> costTagList = tagInfoService.listTagInfoByTradeNo(request.getTradeNo());
TagInfoDTO model;
List<TagInfoDTO> result = new ArrayList<>();
for (TagInfo entity : costTagList) {
model = new TagInfoDTO();
model.setTagName(entity.getTagName());
model.setTagId(entity.getId());
result.add(model);
}
if (!CollectionUtils.isEmpty(result)) {
response.setTagInfoModels(result);
ResponseUtil.success(response);
} else {
ResponseUtil.dataNotExisting(response);
}
} catch (Exception e) {
ResponseUtil.sysError(response);
logger.error("/cost/tag/list error", e);
}
return response;
}
Aggregations