package com.qianwen.smartman.modules.mdc.service.impl;
|
|
import cn.hutool.core.util.StrUtil;
|
import java.time.LocalDate;
|
import java.util.ArrayList;
|
import java.util.Collection;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
import com.qianwen.smartman.common.constant.DateConstant;
|
import com.qianwen.smartman.common.utils.LocalDateTimeUtils;
|
import com.qianwen.smartman.common.utils.LocalDateUtil;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.smartman.modules.mdc.dto.IntervalDateDto;
|
import com.qianwen.smartman.modules.mdc.enums.StatisticalMethodEnum;
|
import com.qianwen.smartman.modules.mdc.service.IStatisticsService;
|
import com.qianwen.smartman.modules.mdc.utils.MdcConvertUtil;
|
import com.qianwen.smartman.modules.mdc.vo.AnalysisFilterVO;
|
import com.qianwen.smartman.modules.mdc.vo.DateInfo;
|
import com.qianwen.smartman.modules.mdc.vo.SplitFilterListVO;
|
import com.qianwen.smartman.modules.mdc.vo.SplitFilterVO;
|
import org.springframework.stereotype.Service;
|
|
@Service
|
public class StatisticsServiceImpl implements IStatisticsService {
|
@Override // org.springblade.modules.mdc.service.IStatisticsService
|
public SplitFilterListVO organizeQueryConditions(AnalysisFilterVO input) {
|
List<IntervalDateDto> intervalDateDtoList;
|
Map<String, String> shiftKeyNameMap = MdcConvertUtil.keyNameToMap(input.getShiftList());
|
List<DateInfo> result = new ArrayList<>();
|
if (Func.isNotEmpty(input.getIsReverse()) && input.getIsReverse().booleanValue()) {
|
intervalDateDtoList = LocalDateTimeUtils.getIntervalDateReverse(input.getStartDate(), input.getEndDate());
|
} else {
|
intervalDateDtoList = LocalDateTimeUtils.getIntervalDate(input.getStartDate(), input.getEndDate());
|
}
|
if (StatisticalMethodEnum.SHIFT.equals(input.getStatisticalMethod())) {
|
buildShiftData(intervalDateDtoList, shiftKeyNameMap, result);
|
} else if (StatisticalMethodEnum.DAY.equals(input.getStatisticalMethod())) {
|
buildDayData(intervalDateDtoList, result);
|
} else if (StatisticalMethodEnum.WEEK.equals(input.getStatisticalMethod())) {
|
buildWeekData(intervalDateDtoList, result);
|
} else {
|
buildMonthData(intervalDateDtoList, result);
|
}
|
SplitFilterListVO vo = new SplitFilterListVO();
|
vo.setItems( result.stream().map(c -> {
|
SplitFilterVO voItem = new SplitFilterVO();
|
voItem.setTitle(c.getTitle());
|
voItem.setDate(c.getDate());
|
voItem.setMonth(c.getMonth());
|
voItem.setYear(c.getYear());
|
voItem.setShiftIndex(c.getShiftIndex());
|
voItem.setStatisticalMethod(input.getStatisticalMethod());
|
voItem.setWeek(c.getWeek());
|
voItem.setWorkStationList(input.getWorkStationList());
|
return voItem;
|
}).collect(Collectors.toList()));
|
return vo;
|
}
|
|
private void buildMonthData(List<IntervalDateDto> intervalDateDtoList, List<DateInfo> result) {
|
intervalDateDtoList.forEach(intervalDateDto -> {
|
intervalDateDto.getMonthList().forEach(month -> {
|
Integer year = intervalDateDto.getYear();
|
String code = StrUtil.format("{}_{}", new Object[]{year, month});
|
String title = StrUtil.format("{}-{}", new Object[]{year, month});
|
result.add(new DateInfo(code, title, null, null, month, year));
|
});
|
});
|
}
|
|
private void buildWeekData(List<IntervalDateDto> intervalDateDtoList, List<DateInfo> result) {
|
intervalDateDtoList.forEach(intervalDateDto -> {
|
intervalDateDto.getWeekList().forEach(week -> {
|
Integer year = intervalDateDto.getYear();
|
String code = StrUtil.format("{}_{}", new Object[]{year, week});
|
String title = StrUtil.format("{}-{}", new Object[]{year, week});
|
result.add(new DateInfo(code, title, null, week, null, year));
|
});
|
});
|
}
|
|
private void buildDayData(List<IntervalDateDto> intervalDateDtoList, List<DateInfo> result) {
|
IntervalDateDto intervalDateDto = intervalDateDtoList.get(0);
|
List<String> dayList = intervalDateDto.getDayList();
|
dayList.forEach(day -> {
|
LocalDate localDate = LocalDateUtil.stringToLocalDate(day, DateConstant.PATTERN_DATE);
|
Integer week = LocalDateTimeUtils.getWeek(localDate);
|
Integer month = LocalDateTimeUtils.getMonth(localDate);
|
Integer year = LocalDateTimeUtils.getYear(localDate);
|
result.add(new DateInfo(day, day, day, week, month, year));
|
});
|
}
|
|
public void buildShiftData(List<IntervalDateDto> intervalDateDtoList, Map<String, String> shiftKeyNameMap, List<DateInfo> result) {
|
IntervalDateDto intervalDateDto = intervalDateDtoList.get(0);
|
List<String> dayList = intervalDateDto.getDayList();
|
dayList.forEach(day -> {
|
shiftKeyNameMap.forEach((shiftIndex, shiftName) -> {
|
String code = StrUtil.format("{}_{}", new Object[]{day, shiftIndex});
|
String title = StrUtil.format("{}-{}", new Object[]{day, shiftKeyNameMap.get(String.valueOf(shiftIndex))});
|
LocalDate localDate = LocalDateUtil.stringToLocalDate(day, DateConstant.PATTERN_DATE);
|
Integer week = LocalDateTimeUtils.getWeek(localDate);
|
Integer month = LocalDateTimeUtils.getMonth(localDate);
|
Integer year = LocalDateTimeUtils.getYear(localDate);
|
result.add(new DateInfo(code, title, day, week, month, year, Integer.valueOf(shiftIndex)));
|
});
|
});
|
}
|
}
|