|
@@ -0,0 +1,97 @@
|
|
|
|
+package com.ym.mec.biz.service.impl;
|
|
|
|
+
|
|
|
|
+import com.ym.mec.biz.dal.dao.MultiDataSourceHomeStatsDao;
|
|
|
|
+import com.ym.mec.biz.dal.wrapper.MultiDataSourceHomeStatsWrapper;
|
|
|
|
+import com.ym.mec.biz.service.MultiDataSourceHomeStatsService;
|
|
|
|
+import com.ym.mec.util.date.DateUtil;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
+
|
|
|
|
+import javax.annotation.Resource;
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.util.*;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+
|
|
|
|
+@Service
|
|
|
|
+public class MultiDataSourceHomeStatsServiceImpl implements MultiDataSourceHomeStatsService {
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ private MultiDataSourceHomeStatsDao multiDataSourceHomeStatsDao;
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<MultiDataSourceHomeStatsWrapper.summerIncome> summerIncome(MultiDataSourceHomeStatsWrapper.QueryDto queryDto) {
|
|
|
|
+ Date startTime = DateUtil.stringToDate(queryDto.getStartTime(),DateUtil.DEFAULT_PATTERN);
|
|
|
|
+ Date endTime = DateUtil.stringToDate(queryDto.getEndTime(),DateUtil.DEFAULT_PATTERN);
|
|
|
|
+ List<String> dates;
|
|
|
|
+ if(DateUtil.daysBetween(startTime, endTime) <= 31){
|
|
|
|
+ queryDto.setGroupBy("%Y年-%m月-%d日");
|
|
|
|
+ queryDto.setFormat("%Y年%m月%d日");
|
|
|
|
+ dates = DateUtil.getDatesBetweenByDay(startTime, endTime);
|
|
|
|
+ } else if (DateUtil.monthsBetween(startTime, endTime) <= 12) {
|
|
|
|
+ queryDto.setGroupBy("%Y-%m");
|
|
|
|
+ queryDto.setFormat("%Y年%m月");
|
|
|
|
+ dates = DateUtil.getDatesBetweenByMonth(startTime, endTime);
|
|
|
|
+ }else {
|
|
|
|
+ queryDto.setGroupBy("%Y");
|
|
|
|
+ queryDto.setFormat("%Y年");
|
|
|
|
+ dates = DateUtil.getDatesBetweenByYear(startTime, endTime);
|
|
|
|
+ }
|
|
|
|
+ //获取酷乐秀收入
|
|
|
|
+ List<MultiDataSourceHomeStatsWrapper.IncomeByDate> clsIncomeDateList = multiDataSourceHomeStatsDao.clsSummerIncome(queryDto);
|
|
|
|
+ //获取管乐团收入
|
|
|
|
+ List<MultiDataSourceHomeStatsWrapper.IncomeByDate> gytIncomeDateList = multiDataSourceHomeStatsDao.gytSummerIncome(queryDto);
|
|
|
|
+ //获取管乐迷收入
|
|
|
|
+ List<MultiDataSourceHomeStatsWrapper.IncomeByDate> gymIncomeDateList = multiDataSourceHomeStatsDao.gymSummerIncome(queryDto);
|
|
|
|
+
|
|
|
|
+ Map<String, MultiDataSourceHomeStatsWrapper.IncomeByDate> clsMap = clsIncomeDateList.stream().
|
|
|
|
+ collect(Collectors.groupingBy(e -> e.getDate(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
|
|
|
|
+ Set<String> clsKeySet = clsMap.keySet();
|
|
|
|
+ List<MultiDataSourceHomeStatsWrapper.IncomeByDate> clsList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ Map<String, MultiDataSourceHomeStatsWrapper.IncomeByDate> gytMap = gytIncomeDateList.stream().
|
|
|
|
+ collect(Collectors.groupingBy(e -> e.getDate(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
|
|
|
|
+ Set<String> gytKeySet = gytMap.keySet();
|
|
|
|
+ List<MultiDataSourceHomeStatsWrapper.IncomeByDate> gytList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ Map<String, MultiDataSourceHomeStatsWrapper.IncomeByDate> gymMap = gymIncomeDateList.stream().
|
|
|
|
+ collect(Collectors.groupingBy(e -> e.getDate(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
|
|
|
|
+ Set<String> gymKeySet = gymMap.keySet();
|
|
|
|
+ List<MultiDataSourceHomeStatsWrapper.IncomeByDate> gymList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ // 遍历日期列表,补全数据并添加到结果集中
|
|
|
|
+ for (String date : dates) {
|
|
|
|
+ this.addItem(clsKeySet,clsList,date,clsMap);
|
|
|
|
+ this.addItem(gytKeySet,gytList,date,gytMap);
|
|
|
|
+ this.addItem(gymKeySet,gymList,date,gymMap);
|
|
|
|
+ }
|
|
|
|
+ List<MultiDataSourceHomeStatsWrapper.summerIncome> result = new ArrayList<>();
|
|
|
|
+ result.add(this.init("cls",clsList));
|
|
|
|
+ result.add(this.init("gyt",gytList));
|
|
|
|
+ result.add(this.init("gym",gymList));
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private MultiDataSourceHomeStatsWrapper.summerIncome init(String platForm,List<MultiDataSourceHomeStatsWrapper.IncomeByDate> itemList){
|
|
|
|
+ MultiDataSourceHomeStatsWrapper.summerIncome income = new MultiDataSourceHomeStatsWrapper.summerIncome();
|
|
|
|
+ income.setPlatform(platForm);
|
|
|
|
+ income.setTotalAmount(itemList.stream().map(e->e.getTotalAmount()).reduce(BigDecimal.ZERO,BigDecimal::add));
|
|
|
|
+ income.setIncomeByDates(itemList);
|
|
|
|
+ return income;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void addItem(Set<String> keySet,List<MultiDataSourceHomeStatsWrapper.IncomeByDate> itemList,String date,
|
|
|
|
+ Map<String, MultiDataSourceHomeStatsWrapper.IncomeByDate> itemMap){
|
|
|
|
+ if (keySet.contains(date)) {
|
|
|
|
+ // 如果存在对应日期的数据,则添加到结果集中
|
|
|
|
+ itemList.add(itemMap.get(date));
|
|
|
|
+ } else {
|
|
|
|
+ // 如果不存在对应日期的数据,则创建一个新的IncomeByDate对象,并设置totalAmount为0
|
|
|
|
+ MultiDataSourceHomeStatsWrapper.IncomeByDate newIncomeByDate = new MultiDataSourceHomeStatsWrapper.IncomeByDate();
|
|
|
|
+ newIncomeByDate.setDate(date);
|
|
|
|
+ newIncomeByDate.setTotalAmount(BigDecimal.ZERO);
|
|
|
|
+ itemList.add(newIncomeByDate);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}
|