|
@@ -0,0 +1,854 @@
|
|
|
+package com.xxh.cloud.data.statistics.framework.modules.query.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.base.entity.*;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.base.service.*;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.helper.DataStatisticHelper;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.DataQueryService;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.ConsultationDayItemStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.ConsultationDayStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.DeptStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.DiseaseInfoStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.FollowUpDayItemStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.FollowUpDayStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.InDayItemStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.InDayStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.MergeDayStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.PatientInfoStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.PushDayItemStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.PushDayStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.VisitDayItemStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.bos.VisitDayStatBO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.dto.StatisticsQueryDTO;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.query.service.bean.vo.*;
|
|
|
+import com.xxh.cloud.data.statistics.framework.modules.task.mapper.StatisticsDataQueryByBizMapper;
|
|
|
+import com.xxh.cloud.framework.common.constant.YN;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class DataQueryServiceImpl implements DataQueryService {
|
|
|
+ @Autowired
|
|
|
+ private DiagnosisPatientDayInfoService diagnosisPatientDayInfoService;
|
|
|
+ @Autowired
|
|
|
+ private PotentialPatientNotDiagnosisDayInfoService potentialPatientNotDiagnosisDayInfoService;
|
|
|
+ @Autowired
|
|
|
+ private PatientInpatientLossDayInfoService patientInpatientLossDayInfoService;
|
|
|
+ @Autowired
|
|
|
+ private PatientFollowupDayInfoService patientFollowupDayInfoService;
|
|
|
+ @Autowired
|
|
|
+ private FirstDiseaseDayInfoService firstDiseaseDayInfoService;
|
|
|
+ @Resource
|
|
|
+ private StatisticsDataQueryByBizMapper statisticsDataQueryByBizMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private VisitDayInfoService visitDayInfoService;
|
|
|
+ @Autowired
|
|
|
+ private InDayInfoService inDayInfoService;
|
|
|
+ @Autowired
|
|
|
+ private PushDayInfoService pushDayInfoService;
|
|
|
+ @Autowired
|
|
|
+ private ConsultationDayInfoService consultationDayInfoService;
|
|
|
+ @Autowired
|
|
|
+ private FollowUpDayInfoService followUpDayInfoService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DiagnosisPatientDayBO> listDiagnosisPatientDay(StatisticsQueryDTO params) {
|
|
|
+ QueryWrapper<DiagnosisPatientDayInfo> qw = this.getQueryWrapper(params);
|
|
|
+ List<DiagnosisPatientDayInfo> list = diagnosisPatientDayInfoService.list(qw);
|
|
|
+ if (CollUtil.isEmpty(list)) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ Set<String> diseaseIds = new HashSet<>();
|
|
|
+ Set<String> deptCodes = new HashSet<>();
|
|
|
+ list.forEach(item->{
|
|
|
+ diseaseIds.add(item.getDiseaseId());
|
|
|
+ deptCodes.add(item.getDeptCode());
|
|
|
+ });
|
|
|
+ Map<String, DiseaseInfoStatBO> diseaseMap = this.queryDiseaseInfo(diseaseIds);
|
|
|
+ Map<String, DeptStatBO> deptMap = this.queryDeptInfo(deptCodes);
|
|
|
+
|
|
|
+ return list.stream().map(item-> DataStatisticHelper.getDiagnosisPatientDay(item, diseaseMap, deptMap)).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<PotentialPatientNotDiagnosisDayBO> listPotentialPatientNotDiagnosisDay(StatisticsQueryDTO params) {
|
|
|
+ QueryWrapper<PotentialPatientNotDiagnosisDayInfo> qw = this.getQueryWrapper(params);
|
|
|
+ List<PotentialPatientNotDiagnosisDayInfo> list = potentialPatientNotDiagnosisDayInfoService.list(qw);
|
|
|
+ Set<String> diseaseIds = new HashSet<>();
|
|
|
+ list.forEach(item->{
|
|
|
+ diseaseIds.add(item.getDiseaseId());
|
|
|
+ });
|
|
|
+ Map<String, DiseaseInfoStatBO> diseaseMap = this.queryDiseaseInfo(diseaseIds);
|
|
|
+
|
|
|
+ return list.stream().map(item-> DataStatisticHelper.getPotentialPatientNotDiagnosisDay(item, diseaseMap)).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<PatientFollowupDayBO> listPatientFollowupDay(StatisticsQueryDTO params) {
|
|
|
+ QueryWrapper<PatientFollowupDayInfo> qw = this.getQueryWrapper(params);
|
|
|
+ List<PatientFollowupDayInfo> list = patientFollowupDayInfoService.list(qw);
|
|
|
+ return list.stream().map(DataStatisticHelper::getPatientFollowupDay).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<PatientInpatientLossDayBO> listPatientInpatientLossDay(StatisticsQueryDTO params) {
|
|
|
+ QueryWrapper<PatientInpatientLossDayInfo> qw = this.getQueryWrapper(params);
|
|
|
+ List<PatientInpatientLossDayInfo> list = patientInpatientLossDayInfoService.list(qw);
|
|
|
+ return list.stream().map(DataStatisticHelper::getPatientInpatientLossDay).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<FirstDiseaseDayBO> listFirstDiseaseDay(StatisticsQueryDTO params) {
|
|
|
+ QueryWrapper<FirstDiseaseDayInfo> qw = this.getQueryWrapper(params);
|
|
|
+ List<FirstDiseaseDayInfo> list = firstDiseaseDayInfoService.list(qw);
|
|
|
+ Set<String> diseaseIds = new HashSet<>();
|
|
|
+ list.forEach(item->{
|
|
|
+ diseaseIds.add(item.getDiseaseId());
|
|
|
+ });
|
|
|
+ Map<String, DiseaseInfoStatBO> diseaseMap = this.queryDiseaseInfo(diseaseIds);
|
|
|
+ return list.stream().map(item-> DataStatisticHelper.getFirstDiseaseDayBO(item, diseaseMap)).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ private <T> QueryWrapper<T> getQueryWrapper(StatisticsQueryDTO params){
|
|
|
+ QueryWrapper<T> qw = new QueryWrapper<T>();
|
|
|
+ if (StrUtil.isNotEmpty(params.getDataTime())) {
|
|
|
+ qw.eq("data_time", params.getDataTime());
|
|
|
+ } else if (params.getDays() > 0) {
|
|
|
+ qw.orderByDesc("data_time").last(" limit " + params.getDays());
|
|
|
+ } else {
|
|
|
+ qw.ge(StrUtil.isNotEmpty(params.getStartDay()), "data_time", params.getStartDay())
|
|
|
+ .le(StrUtil.isNotEmpty(params.getEndDay()), "data_time", params.getEndDay())
|
|
|
+ .orderByDesc("data_time");
|
|
|
+ }
|
|
|
+ return qw;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private Map<String, DiseaseInfoStatBO> queryDiseaseInfo(Set<String> diseaseIds){
|
|
|
+ List<DiseaseInfoStatBO> diseaseList = statisticsDataQueryByBizMapper.queryDiseaseInfo(new QueryWrapper<DiseaseInfoStatBO>()
|
|
|
+ .eq("rows_status", YN.YES.getCode())
|
|
|
+ .in("id", diseaseIds));
|
|
|
+ if (CollUtil.isEmpty(diseaseList)) {
|
|
|
+ return new HashMap<>();
|
|
|
+ }
|
|
|
+ Map<String, DiseaseInfoStatBO> map = new HashMap<>();
|
|
|
+ map.putAll(diseaseList.stream().collect(Collectors.toMap(DiseaseInfoStatBO::getId, item -> item)));
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, DeptStatBO> queryDeptInfo(Set<String> codes){
|
|
|
+ List<DeptStatBO> deptList = statisticsDataQueryByBizMapper.queryDeptInfo(new QueryWrapper<DeptStatBO>()
|
|
|
+ .in("id", codes));
|
|
|
+ if (CollUtil.isEmpty(deptList)) {
|
|
|
+ return new HashMap<>();
|
|
|
+ }
|
|
|
+ Map<String, DeptStatBO> map = new HashMap<>();
|
|
|
+ map.putAll(deptList.stream().collect(Collectors.toMap(DeptStatBO::getId, item -> item)));
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, PatientInfoStatBO> queryPatientInfo(Set<String> patientIds){
|
|
|
+ List<PatientInfoStatBO> patientList = statisticsDataQueryByBizMapper.queryPatientInfo(new QueryWrapper<PatientInfoStatBO>()
|
|
|
+ .in("id", patientIds));
|
|
|
+ if (CollUtil.isEmpty(patientIds)) {
|
|
|
+ return new HashMap<>();
|
|
|
+ }
|
|
|
+ Map<String, PatientInfoStatBO> map = new HashMap<>();
|
|
|
+ map.putAll(patientList.stream().collect(Collectors.toMap(PatientInfoStatBO::getPatientId, item -> item)));
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public MergeDayStatBO mergeStatData(StatisticsQueryDTO params) {
|
|
|
+ MergeDayStatBO data = new MergeDayStatBO();
|
|
|
+
|
|
|
+ // 根据标准科室查询业务科室
|
|
|
+ if (CollUtil.isNotEmpty(params.getStandardDeptCodes())) {
|
|
|
+ List<String> deptIds = statisticsDataQueryByBizMapper.queryDeptInfoByStandard(new QueryWrapper<Void>()
|
|
|
+ .eq("rows_status", YN.YES.getCode())
|
|
|
+ .in("dept_id", params.getStandardDeptCodes())
|
|
|
+ );
|
|
|
+
|
|
|
+ if (CollUtil.isNotEmpty(deptIds)) {
|
|
|
+ if (null == params.getDeptCodes()) {
|
|
|
+ params.setDeptCodes(new ArrayList<>());
|
|
|
+ }
|
|
|
+ params.getDeptCodes().addAll(deptIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 就诊
|
|
|
+ StatisticsQueryDTO visitParams = new StatisticsQueryDTO();
|
|
|
+ BeanUtil.copyProperties(params, visitParams);
|
|
|
+ VisitDayStatBO visitData = this.listVisitDay(visitParams);
|
|
|
+ // 就诊同比
|
|
|
+ visitParams.setStartDay(DateUtil.offsetMonth(DateUtil.parseDate(visitParams.getStartDay()), -12).toDateStr());
|
|
|
+ visitParams.setEndDay(DateUtil.offsetMonth(DateUtil.parseDate(visitParams.getEndDay()), -12).toDateStr());
|
|
|
+ if (StrUtil.isNotBlank(visitParams.getYear())) {
|
|
|
+ visitParams.setYear(String.valueOf(Integer.valueOf(visitParams.getYear()) - 1));
|
|
|
+ }
|
|
|
+ VisitDayStatBO onYearVisitData = this.listVisitDay(visitParams);
|
|
|
+ if (null != onYearVisitData) {
|
|
|
+ visitData.setOnYearItemNum(onYearVisitData.getItemNum());
|
|
|
+ }
|
|
|
+ data.setVisitInfo(visitData);
|
|
|
+
|
|
|
+ // 住院
|
|
|
+ StatisticsQueryDTO inParams = new StatisticsQueryDTO();
|
|
|
+ BeanUtil.copyProperties(params, inParams);
|
|
|
+ InDayStatBO inData = this.listInDay(inParams);
|
|
|
+ // 住院同比
|
|
|
+ inParams.setStartDay(DateUtil.offsetMonth(DateUtil.parseDate(inParams.getStartDay()), -12).toDateStr());
|
|
|
+ inParams.setEndDay(DateUtil.offsetMonth(DateUtil.parseDate(inParams.getEndDay()), -12).toDateStr());
|
|
|
+ if (StrUtil.isNotBlank(inParams.getYear())) {
|
|
|
+ inParams.setYear(String.valueOf(Integer.valueOf(inParams.getYear()) - 1));
|
|
|
+ }
|
|
|
+ InDayStatBO onYearInData = this.listInDay(inParams);
|
|
|
+ if (null != onYearInData) {
|
|
|
+ inData.setOnYearItemNum(onYearInData.getItemNum());
|
|
|
+ }
|
|
|
+ data.setInInfo(inData);
|
|
|
+
|
|
|
+ // 服务
|
|
|
+ StatisticsQueryDTO pushParams = new StatisticsQueryDTO();
|
|
|
+ BeanUtil.copyProperties(params, pushParams);
|
|
|
+ PushDayStatBO pushData = this.listPushServeDay(pushParams);
|
|
|
+ data.setPushInfo(pushData);
|
|
|
+
|
|
|
+ // 会诊
|
|
|
+ StatisticsQueryDTO consultationParams = new StatisticsQueryDTO();
|
|
|
+ BeanUtil.copyProperties(params, consultationParams);
|
|
|
+ ConsultationDayStatBO consultationData = this.listConsultationDay(consultationParams);
|
|
|
+ data.setConsultationInfo(consultationData);
|
|
|
+
|
|
|
+ // 随访
|
|
|
+ StatisticsQueryDTO followUpParams = new StatisticsQueryDTO();
|
|
|
+ BeanUtil.copyProperties(params, followUpParams);
|
|
|
+ FollowUpDayStatBO followUpData = this.listFollowUpDay(followUpParams);
|
|
|
+ data.setFollowUpInfo(followUpData);
|
|
|
+
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public VisitDayStatBO listVisitDay(StatisticsQueryDTO params) {
|
|
|
+ if (StrUtil.isNotBlank(params.getYear())) {
|
|
|
+ params.setDateType("y");
|
|
|
+ params.setStartDay(params.getYear() + "-01-01");
|
|
|
+ params.setEndDay(params.getYear() + "-12-31");
|
|
|
+ }
|
|
|
+ if (StrUtil.isBlank(params.getStartDay())) {
|
|
|
+ params.setDateType("y");
|
|
|
+ params.setYear(String.valueOf(DateUtil.date().year()));
|
|
|
+ params.setStartDay(DateUtil.beginOfYear(DateUtil.date()).toDateStr());
|
|
|
+ params.setEndDay(DateUtil.endOfYear(DateUtil.date()).toDateStr());
|
|
|
+ }
|
|
|
+ if (StrUtil.isBlank(params.getEndDay())) {
|
|
|
+ params.setEndDay(DateUtil.offsetDay(DateUtil.date(), 1).toDateStr());
|
|
|
+ }
|
|
|
+ QueryWrapper<VisitDayInfo> qw = new QueryWrapper<VisitDayInfo>()
|
|
|
+ .eq(StrUtil.isNotBlank(params.getDataTime()), "data_time", params.getDataTime())
|
|
|
+ .ge(StrUtil.isNotEmpty(params.getStartDay()), "data_time", params.getStartDay())
|
|
|
+ .le(StrUtil.isNotEmpty(params.getEndDay()), "data_time", params.getEndDay());
|
|
|
+
|
|
|
+ Map<String, Integer> itemMap = new HashMap<>();
|
|
|
+ if ("y".equals(params.getDateType()) && StrUtil.isNotBlank(params.getYear())) { // 年,按当月统计
|
|
|
+ for (int i = 1; i <= 12; i++) {
|
|
|
+ String m = i < 10 ? "-0" + i : "-" + i;
|
|
|
+ itemMap.put(params.getYear() + m, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, Object>> dataList = visitDayInfoService.listMaps(qw
|
|
|
+ .select("DATE_FORMAT(data_time, '%Y-%m') `date`", "SUM(num) num")
|
|
|
+ .in(CollUtil.isNotEmpty(params.getDeptCodes()), "dept_code", params.getDeptCodes())
|
|
|
+ .groupBy("`date`")
|
|
|
+ );
|
|
|
+ if (CollUtil.isNotEmpty(dataList)) {
|
|
|
+ dataList.forEach(i -> {
|
|
|
+ itemMap.put(i.get("date").toString(), Integer.valueOf(i.get("num").toString()));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else if (StrUtil.isNotBlank(params.getStartDay()) && StrUtil.isNotBlank(params.getEndDay())) { // 月、周,按天统计
|
|
|
+ DateTime d = DateUtil.parseDate(params.getStartDay());
|
|
|
+ long days = DateUtil.betweenDay(DateUtil.parseDate(params.getStartDay()), DateUtil.parseDate(params.getEndDay()), true);
|
|
|
+ for (int i = 0; i <= days; i++) {
|
|
|
+ itemMap.put(DateUtil.offsetDay(d, i).toDateStr(), 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, Object>> dataList = visitDayInfoService.listMaps(qw
|
|
|
+ .select("DATE_FORMAT(data_time, '%Y-%m-%d') `date`", "SUM(num) num")
|
|
|
+ .in(CollUtil.isNotEmpty(params.getDeptCodes()), "dept_code", params.getDeptCodes())
|
|
|
+ .groupBy("`date`")
|
|
|
+ );
|
|
|
+ if (CollUtil.isNotEmpty(dataList)) {
|
|
|
+ dataList.forEach(i -> {
|
|
|
+ itemMap.put(i.get("date").toString(), Integer.valueOf(i.get("num").toString()));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ VisitDayStatBO data = new VisitDayStatBO();
|
|
|
+ data.setTotalNum(0);
|
|
|
+
|
|
|
+ List<VisitDayItemStatBO> itemList = new ArrayList<>();
|
|
|
+ if (CollUtil.isNotEmpty(itemMap)) {
|
|
|
+ itemMap.forEach((k, v) -> {
|
|
|
+ VisitDayItemStatBO b = new VisitDayItemStatBO();
|
|
|
+ b.setDate(k);
|
|
|
+ b.setNum(v);
|
|
|
+ itemList.add(b);
|
|
|
+
|
|
|
+ data.setTotalNum(data.getTotalNum() + v);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ Comparator<VisitDayItemStatBO> dateComparator = Comparator.comparing(VisitDayItemStatBO::getDate);
|
|
|
+ itemList.sort(dateComparator);
|
|
|
+
|
|
|
+ data.setItemNum(itemList);
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public InDayStatBO listInDay(StatisticsQueryDTO params) {
|
|
|
+ if (StrUtil.isNotBlank(params.getYear())) {
|
|
|
+ params.setDateType("y");
|
|
|
+ params.setStartDay(params.getYear() + "-01-01");
|
|
|
+ params.setEndDay(params.getYear() + "-12-31");
|
|
|
+ }
|
|
|
+ if (StrUtil.isBlank(params.getStartDay())) {
|
|
|
+ params.setDateType("y");
|
|
|
+ params.setYear(String.valueOf(DateUtil.date().year()));
|
|
|
+ params.setStartDay(DateUtil.beginOfYear(DateUtil.date()).toDateStr());
|
|
|
+ params.setEndDay(DateUtil.endOfYear(DateUtil.date()).toDateStr());
|
|
|
+ }
|
|
|
+ if (StrUtil.isBlank(params.getEndDay())) {
|
|
|
+ params.setEndDay(DateUtil.offsetDay(DateUtil.date(), 1).toDateStr());
|
|
|
+ }
|
|
|
+ QueryWrapper<InDayInfo> qw = new QueryWrapper<InDayInfo>()
|
|
|
+ .eq(StrUtil.isNotBlank(params.getDataTime()), "data_time", params.getDataTime())
|
|
|
+ .ge(StrUtil.isNotEmpty(params.getStartDay()), "data_time", params.getStartDay())
|
|
|
+ .le(StrUtil.isNotEmpty(params.getEndDay()), "data_time", params.getEndDay());
|
|
|
+
|
|
|
+ Map<String, Integer> itemMap = new HashMap<>();
|
|
|
+ if ("y".equals(params.getDateType()) && StrUtil.isNotBlank(params.getYear())) { // 年,按当月统计
|
|
|
+ for (int i = 1; i <= 12; i++) {
|
|
|
+ String m = i < 10 ? "-0" + i : "-" + i;
|
|
|
+ itemMap.put(params.getYear() + m, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, Object>> dataList = inDayInfoService.listMaps(qw
|
|
|
+ .select("DATE_FORMAT(data_time, '%Y-%m') `date`", "SUM(num) num")
|
|
|
+ .in(CollUtil.isNotEmpty(params.getDeptCodes()), "dept_code", params.getDeptCodes())
|
|
|
+ .groupBy("`date`")
|
|
|
+ );
|
|
|
+ if (CollUtil.isNotEmpty(dataList)) {
|
|
|
+ dataList.forEach(i -> {
|
|
|
+ itemMap.put(i.get("date").toString(), Integer.valueOf(i.get("num").toString()));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else if (StrUtil.isNotBlank(params.getStartDay()) && StrUtil.isNotBlank(params.getEndDay())) { // 月、周,按天统计
|
|
|
+ DateTime d = DateUtil.parseDate(params.getStartDay());
|
|
|
+ long days = DateUtil.betweenDay(DateUtil.parseDate(params.getStartDay()), DateUtil.parseDate(params.getEndDay()), true);
|
|
|
+ for (int i = 0; i <= days; i++) {
|
|
|
+ itemMap.put(DateUtil.offsetDay(d, i).toDateStr(), 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, Object>> dataList = inDayInfoService.listMaps(qw
|
|
|
+ .select("DATE_FORMAT(data_time, '%Y-%m-%d') `date`", "SUM(num) num")
|
|
|
+ .in(CollUtil.isNotEmpty(params.getDeptCodes()), "dept_code", params.getDeptCodes())
|
|
|
+ .groupBy("`date`")
|
|
|
+ );
|
|
|
+ if (CollUtil.isNotEmpty(dataList)) {
|
|
|
+ dataList.forEach(i -> {
|
|
|
+ itemMap.put(i.get("date").toString(), Integer.valueOf(i.get("num").toString()));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ InDayStatBO data = new InDayStatBO();
|
|
|
+ data.setTotalNum(0);
|
|
|
+
|
|
|
+ List<InDayItemStatBO> itemList = new ArrayList<>();
|
|
|
+ if (CollUtil.isNotEmpty(itemMap)) {
|
|
|
+ itemMap.forEach((k, v) -> {
|
|
|
+ InDayItemStatBO b = new InDayItemStatBO();
|
|
|
+ b.setDate(k);
|
|
|
+ b.setNum(v);
|
|
|
+ itemList.add(b);
|
|
|
+
|
|
|
+ data.setTotalNum(data.getTotalNum() + v);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ Comparator<InDayItemStatBO> dateComparator = Comparator.comparing(InDayItemStatBO::getDate);
|
|
|
+ itemList.sort(dateComparator);
|
|
|
+
|
|
|
+ data.setItemNum(itemList);
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PushDayStatBO listPushServeDay(StatisticsQueryDTO params) {
|
|
|
+ if (StrUtil.isNotBlank(params.getYear())) {
|
|
|
+ params.setDateType("y");
|
|
|
+ params.setStartDay(params.getYear() + "-01-01");
|
|
|
+ params.setEndDay(params.getYear() + "-12-31");
|
|
|
+ }
|
|
|
+ if (StrUtil.isBlank(params.getStartDay())) {
|
|
|
+ params.setDateType("y");
|
|
|
+ params.setYear(String.valueOf(DateUtil.date().year()));
|
|
|
+ params.setStartDay(DateUtil.beginOfYear(DateUtil.date()).toDateStr());
|
|
|
+ params.setEndDay(DateUtil.endOfYear(DateUtil.date()).toDateStr());
|
|
|
+ }
|
|
|
+ if (StrUtil.isBlank(params.getEndDay())) {
|
|
|
+ params.setEndDay(DateUtil.offsetDay(DateUtil.date(), 1).toDateStr());
|
|
|
+ }
|
|
|
+ QueryWrapper<PushDayInfo> qw = new QueryWrapper<PushDayInfo>()
|
|
|
+ .eq(StrUtil.isNotBlank(params.getDataTime()), "data_time", params.getDataTime())
|
|
|
+ .ge(StrUtil.isNotEmpty(params.getStartDay()), "data_time", params.getStartDay())
|
|
|
+ .le(StrUtil.isNotEmpty(params.getEndDay()), "data_time", params.getEndDay());
|
|
|
+
|
|
|
+ Map<String, Map<String, Integer>> itemMap = new HashMap<>();
|
|
|
+ if ("y".equals(params.getDateType()) && StrUtil.isNotBlank(params.getYear())) { // 年,按当月统计
|
|
|
+ for (int i = 1; i <= 12; i++) {
|
|
|
+ String m = i < 10 ? "-0" + i : "-" + i;
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("pushNum", 0);
|
|
|
+ map.put("pushSuccessNum", 0);
|
|
|
+ map.put("pushFailFollowNum", 0);
|
|
|
+ map.put("pushFailUserNum", 0);
|
|
|
+ map.put("pushFailNum", 0);
|
|
|
+ map.put("pushInvalidNum", 0);
|
|
|
+ map.put("pushTimeoutNum", 0);
|
|
|
+ map.put("pushBlackListNum", 0);
|
|
|
+ map.put("pushAbnormalNum", 0);
|
|
|
+ map.put("readNum", 0);
|
|
|
+ itemMap.put(params.getYear() + m, map);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, Object>> dataList = pushDayInfoService.listMaps(qw
|
|
|
+ .select("DATE_FORMAT(data_time, '%Y-%m') `date`",
|
|
|
+ "SUM(num) pushNum", "SUM(push_success_num) pushSuccessNum",
|
|
|
+ "SUM(push_fail_follow_num) pushFailFollowNum",
|
|
|
+ "SUM(push_fail_user_num) pushFailUserNum",
|
|
|
+ "SUM(push_fail_num) pushFailNum",
|
|
|
+ "SUM(push_invalid_num) pushInvalidNum",
|
|
|
+ "SUM(push_timeout_num) pushTimeoutNum",
|
|
|
+ "SUM(push_black_list_num) pushBlackListNum",
|
|
|
+ "SUM(push_abnormal_num) pushAbnormalNum",
|
|
|
+ "SUM(read_num) readNum")
|
|
|
+ // .in(CollUtil.isNotEmpty(params.getDeptCodes()), "dept_code", params.getDeptCodes())
|
|
|
+ .groupBy("`date`")
|
|
|
+ );
|
|
|
+ if (CollUtil.isNotEmpty(dataList)) {
|
|
|
+ dataList.forEach(i -> {
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("pushNum", Integer.valueOf(i.get("pushNum").toString()));
|
|
|
+ map.put("pushSuccessNum", Integer.valueOf(i.get("pushSuccessNum").toString()));
|
|
|
+ map.put("pushFailFollowNum", Integer.valueOf(i.get("pushFailFollowNum").toString()));
|
|
|
+ map.put("pushFailUserNum", Integer.valueOf(i.get("pushFailUserNum").toString()));
|
|
|
+ map.put("pushFailNum", Integer.valueOf(i.get("pushFailNum").toString()));
|
|
|
+ map.put("pushInvalidNum", Integer.valueOf(i.get("pushInvalidNum").toString()));
|
|
|
+ map.put("pushTimeoutNum", Integer.valueOf(i.get("pushTimeoutNum").toString()));
|
|
|
+ map.put("pushBlackListNum", Integer.valueOf(i.get("pushBlackListNum").toString()));
|
|
|
+ map.put("pushAbnormalNum", Integer.valueOf(i.get("pushAbnormalNum").toString()));
|
|
|
+ map.put("readNum", Integer.valueOf(i.get("readNum").toString()));
|
|
|
+ itemMap.put(i.get("date").toString(), map);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else if (StrUtil.isNotBlank(params.getStartDay()) && StrUtil.isNotBlank(params.getEndDay())) { // 月、周,按天统计
|
|
|
+ DateTime d = DateUtil.parseDate(params.getStartDay());
|
|
|
+ long days = DateUtil.betweenDay(DateUtil.parseDate(params.getStartDay()), DateUtil.parseDate(params.getEndDay()), true);
|
|
|
+ for (int i = 0; i <= days; i++) {
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("pushNum", 0);
|
|
|
+ map.put("pushSuccessNum", 0);
|
|
|
+ map.put("pushFailFollowNum", 0);
|
|
|
+ map.put("pushFailUserNum", 0);
|
|
|
+ map.put("pushFailNum", 0);
|
|
|
+ map.put("pushInvalidNum", 0);
|
|
|
+ map.put("pushTimeoutNum", 0);
|
|
|
+ map.put("pushBlackListNum", 0);
|
|
|
+ map.put("pushAbnormalNum", 0);
|
|
|
+ map.put("readNum", 0);
|
|
|
+ itemMap.put(DateUtil.offsetDay(d, i).toDateStr(), map);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, Object>> dataList = pushDayInfoService.listMaps(qw
|
|
|
+ .select("DATE_FORMAT(data_time, '%Y-%m-%d') `date`",
|
|
|
+ "SUM(num) pushNum", "SUM(push_success_num) pushSuccessNum",
|
|
|
+ "SUM(push_fail_follow_num) pushFailFollowNum",
|
|
|
+ "SUM(push_fail_user_num) pushFailUserNum",
|
|
|
+ "SUM(push_fail_num) pushFailNum",
|
|
|
+ "SUM(push_invalid_num) pushInvalidNum",
|
|
|
+ "SUM(push_timeout_num) pushTimeoutNum",
|
|
|
+ "SUM(push_black_list_num) pushBlackListNum",
|
|
|
+ "SUM(push_abnormal_num) pushAbnormalNum",
|
|
|
+ "SUM(read_num) readNum")
|
|
|
+ // .in(CollUtil.isNotEmpty(params.getDeptCodes()), "dept_code", params.getDeptCodes())
|
|
|
+ .groupBy("`date`")
|
|
|
+ );
|
|
|
+ if (CollUtil.isNotEmpty(dataList)) {
|
|
|
+ dataList.forEach(i -> {
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("pushNum", Integer.valueOf(i.get("pushNum").toString()));
|
|
|
+ map.put("pushSuccessNum", Integer.valueOf(i.get("pushSuccessNum").toString()));
|
|
|
+ map.put("pushFailFollowNum", Integer.valueOf(i.get("pushFailFollowNum").toString()));
|
|
|
+ map.put("pushFailUserNum", Integer.valueOf(i.get("pushFailUserNum").toString()));
|
|
|
+ map.put("pushFailNum", Integer.valueOf(i.get("pushFailNum").toString()));
|
|
|
+ map.put("pushInvalidNum", Integer.valueOf(i.get("pushInvalidNum").toString()));
|
|
|
+ map.put("pushTimeoutNum", Integer.valueOf(i.get("pushTimeoutNum").toString()));
|
|
|
+ map.put("pushBlackListNum", Integer.valueOf(i.get("pushBlackListNum").toString()));
|
|
|
+ map.put("pushAbnormalNum", Integer.valueOf(i.get("pushAbnormalNum").toString()));
|
|
|
+ map.put("readNum", Integer.valueOf(i.get("readNum").toString()));
|
|
|
+ itemMap.put(i.get("date").toString(), map);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Integer> pushFailItem = new HashMap<>();
|
|
|
+ pushFailItem.put("pushFailFollowNum", 0);
|
|
|
+ pushFailItem.put("pushFailUserNum", 0);
|
|
|
+ pushFailItem.put("pushFailNum", 0);
|
|
|
+ pushFailItem.put("pushInvalidNum", 0);
|
|
|
+ pushFailItem.put("pushTimeoutNum", 0);
|
|
|
+ pushFailItem.put("pushBlackListNum", 0);
|
|
|
+ pushFailItem.put("pushAbnormalNum", 0);
|
|
|
+
|
|
|
+ PushDayStatBO data = new PushDayStatBO();
|
|
|
+ data.setPushTotalNum(0);
|
|
|
+ data.setSuccessTotalNum(0);
|
|
|
+ data.setFailTotalNum(0);
|
|
|
+ data.setReadNum(0);
|
|
|
+ data.setFailItem(pushFailItem);
|
|
|
+
|
|
|
+ List<PushDayItemStatBO> pushNumItemList = new ArrayList<>();
|
|
|
+ List<PushDayItemStatBO> pushSuccessNumItemList = new ArrayList<>();
|
|
|
+ List<PushDayItemStatBO> pushFailNumItemList = new ArrayList<>();
|
|
|
+ List<PushDayItemStatBO> readNumItemList = new ArrayList<>();
|
|
|
+ if (CollUtil.isNotEmpty(itemMap)) {
|
|
|
+ itemMap.forEach((k, v) -> {
|
|
|
+ PushDayItemStatBO pushNumItem = new PushDayItemStatBO();
|
|
|
+ pushNumItem.setDate(k);
|
|
|
+ pushNumItem.setNum(v.get("pushNum"));
|
|
|
+ pushNumItemList.add(pushNumItem);
|
|
|
+ data.setPushTotalNum(data.getPushTotalNum() + pushNumItem.getNum());
|
|
|
+
|
|
|
+ PushDayItemStatBO pushSuccessNumItem = new PushDayItemStatBO();
|
|
|
+ pushSuccessNumItem.setDate(k);
|
|
|
+ pushSuccessNumItem.setNum(v.get("pushSuccessNum"));
|
|
|
+ pushSuccessNumItemList.add(pushSuccessNumItem);
|
|
|
+ data.setSuccessTotalNum(data.getSuccessTotalNum() + pushSuccessNumItem.getNum());
|
|
|
+
|
|
|
+ pushFailItem.put("pushFailFollowNum", pushFailItem.get("pushFailFollowNum") + v.get("pushFailFollowNum"));
|
|
|
+ pushFailItem.put("pushFailUserNum", pushFailItem.get("pushFailUserNum") + v.get("pushFailUserNum"));
|
|
|
+ pushFailItem.put("pushFailNum", pushFailItem.get("pushFailNum") + v.get("pushFailNum"));
|
|
|
+ pushFailItem.put("pushInvalidNum", pushFailItem.get("pushInvalidNum") + v.get("pushInvalidNum"));
|
|
|
+ pushFailItem.put("pushTimeoutNum", pushFailItem.get("pushTimeoutNum") + v.get("pushTimeoutNum"));
|
|
|
+ pushFailItem.put("pushBlackListNum", pushFailItem.get("pushBlackListNum") + v.get("pushBlackListNum"));
|
|
|
+ pushFailItem.put("pushAbnormalNum", pushFailItem.get("pushAbnormalNum") + v.get("pushAbnormalNum"));
|
|
|
+
|
|
|
+ PushDayItemStatBO pushFailNumItem = new PushDayItemStatBO();
|
|
|
+ pushFailNumItem.setDate(k);
|
|
|
+ pushFailNumItem.setNum(v.get("pushFailFollowNum") + v.get("pushFailUserNum") + v.get("pushFailNum") + v.get("pushInvalidNum") + v.get("pushTimeoutNum") + v.get("pushBlackListNum") + v.get("pushAbnormalNum"));
|
|
|
+ pushFailNumItemList.add(pushFailNumItem);
|
|
|
+ data.setFailTotalNum(data.getFailTotalNum() + pushFailNumItem.getNum());
|
|
|
+
|
|
|
+ PushDayItemStatBO readNumItem = new PushDayItemStatBO();
|
|
|
+ readNumItem.setDate(k);
|
|
|
+ readNumItem.setNum(v.get("readNum"));
|
|
|
+ readNumItemList.add(readNumItem);
|
|
|
+ data.setReadNum(data.getReadNum() + readNumItem.getNum());
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ Comparator<PushDayItemStatBO> dateComparator = Comparator.comparing(PushDayItemStatBO::getDate);
|
|
|
+ pushNumItemList.sort(dateComparator);
|
|
|
+ pushSuccessNumItemList.sort(dateComparator);
|
|
|
+ pushFailNumItemList.sort(dateComparator);
|
|
|
+ readNumItemList.sort(dateComparator);
|
|
|
+
|
|
|
+ data.setPushItemNum(pushNumItemList);
|
|
|
+ data.setSuccessItemNum(pushSuccessNumItemList);
|
|
|
+ data.setFailItemNum(pushFailNumItemList);
|
|
|
+ data.setReadItemNum(readNumItemList);
|
|
|
+
|
|
|
+ // if (null != data.getPushTotalNum() && data.getPushTotalNum() > 0) {
|
|
|
+ // data.setReadRadio(new BigDecimal(data.getReadNum()).divide(new BigDecimal(data.getPushTotalNum()), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal("100")) + "%");
|
|
|
+ // }
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ConsultationDayStatBO listConsultationDay(StatisticsQueryDTO params) {
|
|
|
+ if (StrUtil.isNotBlank(params.getYear())) {
|
|
|
+ params.setDateType("y");
|
|
|
+ params.setStartDay(params.getYear() + "-01-01");
|
|
|
+ params.setEndDay(params.getYear() + "-12-31");
|
|
|
+ }
|
|
|
+ if (StrUtil.isBlank(params.getStartDay())) {
|
|
|
+ params.setDateType("y");
|
|
|
+ params.setYear(String.valueOf(DateUtil.date().year()));
|
|
|
+ params.setStartDay(DateUtil.beginOfYear(DateUtil.date()).toDateStr());
|
|
|
+ params.setEndDay(DateUtil.endOfYear(DateUtil.date()).toDateStr());
|
|
|
+ }
|
|
|
+ if (StrUtil.isBlank(params.getEndDay())) {
|
|
|
+ params.setEndDay(DateUtil.offsetDay(DateUtil.date(), 1).toDateStr());
|
|
|
+ }
|
|
|
+ QueryWrapper<ConsultationDayInfo> qw = new QueryWrapper<ConsultationDayInfo>()
|
|
|
+ .eq(StrUtil.isNotBlank(params.getDataTime()), "data_time", params.getDataTime())
|
|
|
+ .ge(StrUtil.isNotEmpty(params.getStartDay()), "data_time", params.getStartDay())
|
|
|
+ .le(StrUtil.isNotEmpty(params.getEndDay()), "data_time", params.getEndDay());
|
|
|
+
|
|
|
+ Map<String, Map<String, Integer>> itemMap = new HashMap<>();
|
|
|
+ if ("y".equals(params.getDateType()) && StrUtil.isNotBlank(params.getYear())) { // 年,按当月统计
|
|
|
+ for (int i = 1; i <= 12; i++) {
|
|
|
+ String m = i < 10 ? "-0" + i : "-" + i;
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("consultationTotalNum", 0);
|
|
|
+ map.put("changeTotalNum", 0);
|
|
|
+ map.put("followTotalNum", 0);
|
|
|
+ map.put("abandonTotalNum", 0);
|
|
|
+ itemMap.put(params.getYear() + m, map);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, Object>> dataList = consultationDayInfoService.listMaps(qw
|
|
|
+ .select("DATE_FORMAT(data_time, '%Y-%m') `date`", "SUM(open_num) consultationTotalNum", "SUM(change_num) changeTotalNum", "SUM(follow_up_num) followTotalNum", "SUM(abandon_num) abandonTotalNum")
|
|
|
+ .in(CollUtil.isNotEmpty(params.getDeptCodes()), "dept_code", params.getDeptCodes())
|
|
|
+ .groupBy("`date`")
|
|
|
+ );
|
|
|
+ if (CollUtil.isNotEmpty(dataList)) {
|
|
|
+ dataList.forEach(i -> {
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("consultationTotalNum", Integer.valueOf(i.get("consultationTotalNum").toString()));
|
|
|
+ map.put("changeTotalNum", Integer.valueOf(i.get("changeTotalNum").toString()));
|
|
|
+ map.put("followTotalNum", Integer.valueOf(i.get("followTotalNum").toString()));
|
|
|
+ map.put("abandonTotalNum", Integer.valueOf(i.get("abandonTotalNum").toString()));
|
|
|
+ itemMap.put(i.get("date").toString(), map);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else if (StrUtil.isNotBlank(params.getStartDay()) && StrUtil.isNotBlank(params.getEndDay())) { // 月、周,按天统计
|
|
|
+ DateTime d = DateUtil.parseDate(params.getStartDay());
|
|
|
+ long days = DateUtil.betweenDay(DateUtil.parseDate(params.getStartDay()), DateUtil.parseDate(params.getEndDay()), true);
|
|
|
+ for (int i = 0; i <= days; i++) {
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("consultationTotalNum", 0);
|
|
|
+ map.put("changeTotalNum", 0);
|
|
|
+ map.put("followTotalNum", 0);
|
|
|
+ map.put("abandonTotalNum", 0);
|
|
|
+ itemMap.put(DateUtil.offsetDay(d, i).toDateStr(), map);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, Object>> dataList = consultationDayInfoService.listMaps(qw
|
|
|
+ .select("DATE_FORMAT(data_time, '%Y-%m-%d') `date`", "SUM(open_num) consultationTotalNum", "SUM(change_num) changeTotalNum", "SUM(follow_up_num) followTotalNum", "SUM(abandon_num) abandonTotalNum")
|
|
|
+ .in(CollUtil.isNotEmpty(params.getDeptCodes()), "dept_code", params.getDeptCodes())
|
|
|
+ .groupBy("`date`")
|
|
|
+ );
|
|
|
+ if (CollUtil.isNotEmpty(dataList)) {
|
|
|
+ dataList.forEach(i -> {
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("consultationTotalNum", Integer.valueOf(i.get("consultationTotalNum").toString()));
|
|
|
+ map.put("changeTotalNum", Integer.valueOf(i.get("changeTotalNum").toString()));
|
|
|
+ map.put("followTotalNum", Integer.valueOf(i.get("followTotalNum").toString()));
|
|
|
+ map.put("abandonTotalNum", Integer.valueOf(i.get("abandonTotalNum").toString()));
|
|
|
+ itemMap.put(i.get("date").toString(), map);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ConsultationDayStatBO data = new ConsultationDayStatBO();
|
|
|
+ data.setConsultationTotalNum(0);
|
|
|
+ data.setChangeTotalNum(0);
|
|
|
+ data.setFollowTotalNum(0);
|
|
|
+ data.setAbandonTotalNum(0);
|
|
|
+
|
|
|
+ List<ConsultationDayItemStatBO> consultationItemList = new ArrayList<>();
|
|
|
+ List<ConsultationDayItemStatBO> changeItemList = new ArrayList<>();
|
|
|
+ List<ConsultationDayItemStatBO> followItemList = new ArrayList<>();
|
|
|
+ List<ConsultationDayItemStatBO> abandonItemList = new ArrayList<>();
|
|
|
+ if (CollUtil.isNotEmpty(itemMap)) {
|
|
|
+ itemMap.forEach((k, v) -> {
|
|
|
+ ConsultationDayItemStatBO consultationNumItem = new ConsultationDayItemStatBO();
|
|
|
+ consultationNumItem.setDate(k);
|
|
|
+ consultationNumItem.setNum(v.get("consultationTotalNum"));
|
|
|
+ consultationItemList.add(consultationNumItem);
|
|
|
+ data.setConsultationTotalNum(data.getConsultationTotalNum() + consultationNumItem.getNum());
|
|
|
+
|
|
|
+ ConsultationDayItemStatBO changeNumItem = new ConsultationDayItemStatBO();
|
|
|
+ changeNumItem.setDate(k);
|
|
|
+ changeNumItem.setNum(v.get("changeTotalNum"));
|
|
|
+ changeItemList.add(changeNumItem);
|
|
|
+ data.setChangeTotalNum(data.getChangeTotalNum() + changeNumItem.getNum());
|
|
|
+
|
|
|
+ ConsultationDayItemStatBO followNumItem = new ConsultationDayItemStatBO();
|
|
|
+ followNumItem.setDate(k);
|
|
|
+ followNumItem.setNum(v.get("followTotalNum"));
|
|
|
+ followItemList.add(followNumItem);
|
|
|
+ data.setFollowTotalNum(data.getFollowTotalNum() + followNumItem.getNum());
|
|
|
+
|
|
|
+ ConsultationDayItemStatBO abandonNumItem = new ConsultationDayItemStatBO();
|
|
|
+ abandonNumItem.setDate(k);
|
|
|
+ abandonNumItem.setNum(v.get("abandonTotalNum"));
|
|
|
+ abandonItemList.add(abandonNumItem);
|
|
|
+ data.setAbandonTotalNum(data.getAbandonTotalNum() + abandonNumItem.getNum());
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ Comparator<ConsultationDayItemStatBO> dateComparator = Comparator.comparing(ConsultationDayItemStatBO::getDate);
|
|
|
+ consultationItemList.sort(dateComparator);
|
|
|
+ changeItemList.sort(dateComparator);
|
|
|
+ followItemList.sort(dateComparator);
|
|
|
+ abandonItemList.sort(dateComparator);
|
|
|
+
|
|
|
+ data.setConsultationItemNum(consultationItemList);
|
|
|
+ data.setChangeItemNum(changeItemList);
|
|
|
+ data.setFollowItemNum(followItemList);
|
|
|
+ data.setAbandonItemNum(abandonItemList);
|
|
|
+
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public FollowUpDayStatBO listFollowUpDay(StatisticsQueryDTO params) {
|
|
|
+ if (StrUtil.isNotBlank(params.getYear())) {
|
|
|
+ params.setDateType("y");
|
|
|
+ params.setStartDay(params.getYear() + "-01-01");
|
|
|
+ params.setEndDay(params.getYear() + "-12-31");
|
|
|
+ }
|
|
|
+ if (StrUtil.isBlank(params.getStartDay())) {
|
|
|
+ params.setDateType("y");
|
|
|
+ params.setYear(String.valueOf(DateUtil.date().year()));
|
|
|
+ params.setStartDay(DateUtil.beginOfYear(DateUtil.date()).toDateStr());
|
|
|
+ params.setEndDay(DateUtil.endOfYear(DateUtil.date()).toDateStr());
|
|
|
+ }
|
|
|
+ if (StrUtil.isBlank(params.getEndDay())) {
|
|
|
+ params.setEndDay(DateUtil.offsetDay(DateUtil.date(), 1).toDateStr());
|
|
|
+ }
|
|
|
+ QueryWrapper<FollowUpDayInfo> qw = new QueryWrapper<FollowUpDayInfo>()
|
|
|
+ .eq(StrUtil.isNotBlank(params.getDataTime()), "data_time", params.getDataTime())
|
|
|
+ .ge(StrUtil.isNotEmpty(params.getStartDay()), "data_time", params.getStartDay())
|
|
|
+ .le(StrUtil.isNotEmpty(params.getEndDay()), "data_time", params.getEndDay());
|
|
|
+
|
|
|
+ Map<String, Map<String, Integer>> itemMap = new HashMap<>();
|
|
|
+ if ("y".equals(params.getDateType()) && StrUtil.isNotBlank(params.getYear())) { // 年,按当月统计
|
|
|
+ for (int i = 1; i <= 12; i++) {
|
|
|
+ String m = i < 10 ? "-0" + i : "-" + i;
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("followTotalNum", 0);
|
|
|
+ map.put("exeYesNum", 0);
|
|
|
+ map.put("exeNoNum", 0);
|
|
|
+ map.put("visitNum", 0);
|
|
|
+ itemMap.put(params.getYear() + m, map);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, Object>> dataList = followUpDayInfoService.listMaps(qw
|
|
|
+ .select("DATE_FORMAT(data_time, '%Y-%m') `date`", "SUM(total_num) followTotalNum", "SUM(exe_yes_num) exeYesNum", "SUM(exe_no_num) exeNoNum", "SUM(visit_num) visitNum")
|
|
|
+ .in(CollUtil.isNotEmpty(params.getDeptCodes()), "dept_code", params.getDeptCodes())
|
|
|
+ .groupBy("`date`")
|
|
|
+ );
|
|
|
+ if (CollUtil.isNotEmpty(dataList)) {
|
|
|
+ dataList.forEach(i -> {
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("followTotalNum", Integer.valueOf(i.get("followTotalNum").toString()));
|
|
|
+ map.put("exeYesNum", Integer.valueOf(i.get("exeYesNum").toString()));
|
|
|
+ map.put("exeNoNum", Integer.valueOf(i.get("exeNoNum").toString()));
|
|
|
+ map.put("visitNum", Integer.valueOf(i.get("visitNum").toString()));
|
|
|
+ itemMap.put(i.get("date").toString(), map);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else if (StrUtil.isNotBlank(params.getStartDay()) && StrUtil.isNotBlank(params.getEndDay())) { // 月、周,按天统计
|
|
|
+ DateTime d = DateUtil.parseDate(params.getStartDay());
|
|
|
+ long days = DateUtil.betweenDay(DateUtil.parseDate(params.getStartDay()), DateUtil.parseDate(params.getEndDay()), true);
|
|
|
+ for (int i = 0; i <= days; i++) {
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("followTotalNum", 0);
|
|
|
+ map.put("exeYesNum", 0);
|
|
|
+ map.put("exeNoNum", 0);
|
|
|
+ map.put("visitNum", 0);
|
|
|
+ itemMap.put(DateUtil.offsetDay(d, i).toDateStr(), map);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, Object>> dataList = followUpDayInfoService.listMaps(qw
|
|
|
+ .select("DATE_FORMAT(data_time, '%Y-%m-%d') `date`", "SUM(total_num) followTotalNum", "SUM(exe_yes_num) exeYesNum", "SUM(exe_no_num) exeNoNum", "SUM(visit_num) visitNum")
|
|
|
+ .in(CollUtil.isNotEmpty(params.getDeptCodes()), "dept_code", params.getDeptCodes())
|
|
|
+ .groupBy("`date`")
|
|
|
+ );
|
|
|
+ if (CollUtil.isNotEmpty(dataList)) {
|
|
|
+ dataList.forEach(i -> {
|
|
|
+ Map<String, Integer> map = new HashMap<>();
|
|
|
+ map.put("followTotalNum", Integer.valueOf(i.get("followTotalNum").toString()));
|
|
|
+ map.put("exeYesNum", Integer.valueOf(i.get("exeYesNum").toString()));
|
|
|
+ map.put("exeNoNum", Integer.valueOf(i.get("exeNoNum").toString()));
|
|
|
+ map.put("visitNum", Integer.valueOf(i.get("visitNum").toString()));
|
|
|
+ itemMap.put(i.get("date").toString(), map);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ FollowUpDayStatBO data = new FollowUpDayStatBO();
|
|
|
+ data.setFollowTotalNum(0);
|
|
|
+ data.setExeYesNum(0);
|
|
|
+ data.setExeNoNum(0);
|
|
|
+ data.setVisitNum(0);
|
|
|
+
|
|
|
+ List<FollowUpDayItemStatBO> followItemList = new ArrayList<>();
|
|
|
+ List<FollowUpDayItemStatBO> exeYesItemList = new ArrayList<>();
|
|
|
+ List<FollowUpDayItemStatBO> exeNoItemList = new ArrayList<>();
|
|
|
+ List<FollowUpDayItemStatBO> visitItemList = new ArrayList<>();
|
|
|
+ if (CollUtil.isNotEmpty(itemMap)) {
|
|
|
+ itemMap.forEach((k, v) -> {
|
|
|
+ FollowUpDayItemStatBO followNumItem = new FollowUpDayItemStatBO();
|
|
|
+ followNumItem.setDate(k);
|
|
|
+ followNumItem.setNum(v.get("followTotalNum"));
|
|
|
+ followItemList.add(followNumItem);
|
|
|
+ data.setFollowTotalNum(data.getFollowTotalNum() + followNumItem.getNum());
|
|
|
+
|
|
|
+ FollowUpDayItemStatBO exeYesNumItem = new FollowUpDayItemStatBO();
|
|
|
+ exeYesNumItem.setDate(k);
|
|
|
+ exeYesNumItem.setNum(v.get("exeYesNum"));
|
|
|
+ exeYesItemList.add(exeYesNumItem);
|
|
|
+ data.setExeYesNum(data.getExeYesNum() + exeYesNumItem.getNum());
|
|
|
+
|
|
|
+ FollowUpDayItemStatBO exeNoNumItem = new FollowUpDayItemStatBO();
|
|
|
+ exeNoNumItem.setDate(k);
|
|
|
+ exeNoNumItem.setNum(v.get("exeNoNum"));
|
|
|
+ exeNoItemList.add(exeNoNumItem);
|
|
|
+ data.setExeNoNum(data.getExeNoNum() + exeNoNumItem.getNum());
|
|
|
+
|
|
|
+ FollowUpDayItemStatBO visitNumItem = new FollowUpDayItemStatBO();
|
|
|
+ visitNumItem.setDate(k);
|
|
|
+ visitNumItem.setNum(v.get("visitNum"));
|
|
|
+ visitItemList.add(visitNumItem);
|
|
|
+ data.setVisitNum(data.getVisitNum() + visitNumItem.getNum());
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ Comparator<FollowUpDayItemStatBO> dateComparator = Comparator.comparing(FollowUpDayItemStatBO::getDate);
|
|
|
+ followItemList.sort(dateComparator);
|
|
|
+ exeYesItemList.sort(dateComparator);
|
|
|
+ exeNoItemList.sort(dateComparator);
|
|
|
+ visitItemList.sort(dateComparator);
|
|
|
+
|
|
|
+ data.setFollowItemNum(followItemList);
|
|
|
+ data.setExeYesItemNum(exeYesItemList);
|
|
|
+ data.setExeNoItemNum(exeNoItemList);
|
|
|
+ data.setVisitItemNum(visitItemList);
|
|
|
+
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|