123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
- package com.fdkankan.manage.service.impl;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.fdkankan.manage.entity.User;
- import com.fdkankan.manage.mapper.IDataMapper;
- import com.fdkankan.manage.service.IDataService;
- import com.fdkankan.manage.service.ISceneProService;
- import com.fdkankan.manage.service.IUserService;
- import com.fdkankan.manage.util.DateUtils;
- import com.fdkankan.manage.vo.response.*;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.*;
- @Service
- public class DataService implements IDataService {
- static String dayFormat = "%Y-%m-%d";
- static String mouthFormat = "%Y-%m";
- static String yearFormat = "%Y";
- @Autowired
- IDataMapper dataMapper;
- @Autowired
- IUserService userService;
- @Autowired
- ISceneProService sceneProService;
- @Override
- public UserTotalVo getUserTotal() {
- UserTotalVo totalVo = new UserTotalVo();
- Long totalUserCount = dataMapper.totalUserCount("t_user",0);
- Long preMonthAddCount = dataMapper.preMonthAddCount("t_user",0);
- Long todayAddCount = dataMapper.todayAddCount("t_user",0);
- Long todayActiveCount = dataMapper.todayActiveCount();
- totalVo.setTotalUserCount(totalUserCount);
- totalVo.setPreMonthAddCount(preMonthAddCount);
- totalVo.setTodayAddCount(todayAddCount);
- totalVo.setTodayActiveCount(todayActiveCount);
- return totalVo;
- }
- @Override
- public SceneTotalVo sceneTotal() {
- SceneTotalVo totalVo = new SceneTotalVo();
- Long totalSceneCount = dataMapper.totalUserCount("t_scene_pro",1) + dataMapper.totalUserCount("t_scene_plus",0);
- Long preMonthAddCount = dataMapper.preMonthAddCount("t_scene_pro",1) + dataMapper.preMonthAddCount("t_scene_plus",0);
- Long todayAddCount = dataMapper.todayAddCount("t_scene_pro",1) + dataMapper.todayAddCount("t_scene_plus",0);
- totalVo.setTotalSceneCount(totalSceneCount);
- totalVo.setPreMonthAddCount(preMonthAddCount);
- totalVo.setTodayAddCount(todayAddCount);
- return totalVo;
- }
- @Override
- public OrderTotalVo orderTotal() {
- Long preMonthPowCount = dataMapper.preMonthAddCount("t_increment_order",2);
- Long preMonthDownCount = dataMapper.preMonthAddCount("t_download_order",2);
- Long preMonthPartCount = dataMapper.preMonthAddCount("t_order",3);
- OrderTotalVo totalVo = new OrderTotalVo();
- totalVo.setPreMonThPowCount(preMonthPowCount);
- totalVo.setPreMonThDownCount(preMonthDownCount);
- totalVo.setPreMonThPartCount(preMonthPartCount);
- return totalVo;
- }
- @Override
- public List<DataGroupByCount> userTrend(Integer type,Integer dataType,String startTime,String endTime) {
- startTime = DateUtils.formatStartTime(startTime);
- endTime = DateUtils.formatEndTime(endTime);
- List<DataGroupByCount> dataList = new ArrayList<>();
- List<DataGroupByCount> result = new ArrayList<>();
- int rule = DateUtils.DAY;
- String tb = "t_user";
- if(dataType == 2){
- tb = "t_login_log";
- }
- switch (type){
- case 0 :
- dataList = dataMapper.userDataGroupBy(tb, dayFormat, startTime, endTime);
- break;
- case 1 :
- rule = DateUtils.WEEK;
- dataList = dataMapper.userDataGroupByWeek(tb,startTime,endTime);
- break;
- case 2 :
- rule = DateUtils.MONTH;
- dataList = dataMapper.userDataGroupBy(tb,mouthFormat,startTime,endTime);
- break;
- }
- Long totalCount = 0L;
- if(dataType == 1){ //累加
- LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
- wrapper.lt(User::getCreateTime,startTime);
- totalCount = userService.count(wrapper);
- }
- //查询从开始时间到结束时间为止所有天数,月份,不存在结果补零
- HashMap<String,Long> map = new HashMap<>();
- dataList.forEach(entity -> map.put(entity.getGroupKey(),entity.getCount()));
- List<String> dates = DateUtils.findDatesStr(DateUtils.getDate(startTime), DateUtils.getDate(endTime),rule );
- setListData(result,map,dates,dataType,totalCount);
- return result;
- }
- @Override
- public HashMap<String, Object> orderTrend(Integer type,Integer dataType,String startTime,String endTime) {
- startTime = DateUtils.formatStartTime(startTime);
- endTime = DateUtils.formatEndTime(endTime);
- HashMap<String,Object> map = new HashMap<>();
- if(dataType == 1){
- return getAmountSumOrder(map,type,startTime,endTime);
- }
- List<DataGroupByCount> incrementOrderList = new ArrayList<>();
- List<DataGroupByCount> downOrderList = new ArrayList<>();
- List<DataGroupByCount> partOrderList = new ArrayList<>();
- List<DataGroupByCount> incrementOrderResultList = new ArrayList<>();
- List<DataGroupByCount> downOrderResultList = new ArrayList<>();
- List<DataGroupByCount> partOrderResultList = new ArrayList<>();
- int rule = DateUtils.DAY;
- switch (type){
- case 0 :
- incrementOrderList = dataMapper.userDataGroupBy("t_increment_order",dayFormat,startTime,endTime);
- downOrderList = dataMapper.userDataGroupBy("t_download_order",dayFormat,startTime,endTime);
- partOrderList = dataMapper.userDataGroupBy("t_order",dayFormat,startTime,endTime);
- break;
- case 1 :
- rule = DateUtils.WEEK;
- incrementOrderList = dataMapper.userDataGroupByWeek("t_increment_order",startTime,endTime);
- downOrderList = dataMapper.userDataGroupByWeek("t_download_order",startTime,endTime);
- partOrderList = dataMapper.userDataGroupByWeek("t_order",startTime,endTime);
- break;
- case 2 :
- rule = DateUtils.MONTH;
- incrementOrderList = dataMapper.userDataGroupBy("t_increment_order",mouthFormat,startTime,endTime);
- downOrderList = dataMapper.userDataGroupBy("t_download_order",mouthFormat,startTime,endTime);
- partOrderList = dataMapper.userDataGroupBy("t_order",mouthFormat,startTime,endTime);
- break;
- }
- //查询从开始时间到结束时间为止所有天数,月份,不存在结果补零
- HashMap<String,Long> incrementMap = new HashMap<>();
- HashMap<String,Long> downOrderMap = new HashMap<>();
- HashMap<String,Long> partMap = new HashMap<>();
- incrementOrderList.forEach(entity -> incrementMap.put(entity.getGroupKey(),entity.getCount()));
- downOrderList.forEach(entity -> downOrderMap.put(entity.getGroupKey(),entity.getCount()));
- partOrderList.forEach(entity -> partMap.put(entity.getGroupKey(),entity.getCount()));
- List<String> dates = DateUtils.findDatesStr(DateUtils.getDate(startTime), DateUtils.getDate(endTime),rule );
- for (String date : dates) {
- DataGroupByCount groupByCount = new DataGroupByCount();
- groupByCount.setGroupKey(date);
- groupByCount.setCount(incrementMap.get(date)== null ?0 :incrementMap.get(date));
- incrementOrderResultList.add(groupByCount);
- DataGroupByCount groupByCount2 = new DataGroupByCount();
- groupByCount2.setGroupKey(date);
- groupByCount2.setCount(downOrderMap.get(date)== null ?0 :downOrderMap.get(date));
- downOrderResultList.add(groupByCount2);
- DataGroupByCount groupByCount3 = new DataGroupByCount();
- groupByCount3.setGroupKey(date);
- groupByCount3.setCount(partMap.get(date)== null ?0 :partMap.get(date));
- partOrderResultList.add(groupByCount3);
- }
- map.put("incrementOrder",incrementOrderResultList);
- map.put("downOrder",downOrderResultList);
- map.put("partOrder",partOrderResultList);
- return map;
- }
- private HashMap<String, Object> getAmountSumOrder(HashMap<String,Object> map,Integer type, String startTime, String endTime) {
- List<DataGroupBySum> incrementOrderList = new ArrayList<>();
- List<DataGroupBySum> downOrderList = new ArrayList<>();
- List<DataGroupBySum> partOrderList = new ArrayList<>();
- List<DataGroupBySum> incrementOrderResultList = new ArrayList<>();
- List<DataGroupBySum> downOrderResultList = new ArrayList<>();
- List<DataGroupBySum> partOrderResultList = new ArrayList<>();
- int rule = DateUtils.DAY;
- switch (type){
- case 0 :
- incrementOrderList = dataMapper.userDataSumGroupBy("t_increment_order",dayFormat,startTime,endTime);
- downOrderList = dataMapper.userDataSumGroupBy("t_download_order",dayFormat,startTime,endTime);
- partOrderList = dataMapper.userDataSumGroupBy("t_order",dayFormat,startTime,endTime);
- break;
- case 1 :
- rule = DateUtils.WEEK;
- incrementOrderList = dataMapper.userDataSumGroupByWeek("t_increment_order",startTime,endTime);
- downOrderList = dataMapper.userDataSumGroupByWeek("t_download_order",startTime,endTime);
- partOrderList = dataMapper.userDataSumGroupByWeek("t_order",startTime,endTime);
- break;
- case 2 :
- rule = DateUtils.MONTH;
- incrementOrderList = dataMapper.userDataSumGroupBy("t_increment_order",mouthFormat,startTime,endTime);
- downOrderList = dataMapper.userDataSumGroupBy("t_download_order",mouthFormat,startTime,endTime);
- partOrderList = dataMapper.userDataSumGroupBy("t_order",mouthFormat,startTime,endTime);
- break;
- }
- //查询从开始时间到结束时间为止所有天数,月份,不存在结果补零
- HashMap<String,String> incrementMap = new HashMap<>();
- HashMap<String,String> downOrderMap = new HashMap<>();
- HashMap<String,String> partMap = new HashMap<>();
- incrementOrderList.forEach(entity -> incrementMap.put(entity.getGroupKey(),entity.getCount()));
- downOrderList.forEach(entity -> downOrderMap.put(entity.getGroupKey(),entity.getCount()));
- partOrderList.forEach(entity -> partMap.put(entity.getGroupKey(),entity.getCount()));
- List<String> dates = DateUtils.findDatesStr(DateUtils.getDate(startTime), DateUtils.getDate(endTime),rule );
- for (String date : dates) {
- DataGroupBySum groupByCount = new DataGroupBySum();
- groupByCount.setGroupKey(date);
- groupByCount.setCount(incrementMap.get(date)== null ?"0" :incrementMap.get(date));
- incrementOrderResultList.add(groupByCount);
- DataGroupBySum groupByCount2 = new DataGroupBySum();
- groupByCount2.setGroupKey(date);
- groupByCount2.setCount(downOrderMap.get(date)== null ?"0" :downOrderMap.get(date));
- downOrderResultList.add(groupByCount2);
- DataGroupBySum groupByCount3 = new DataGroupBySum();
- groupByCount3.setGroupKey(date);
- groupByCount3.setCount(partMap.get(date)== null ?"0" :partMap.get(date));
- partOrderResultList.add(groupByCount3);
- }
- map.put("incrementOrder",incrementOrderResultList);
- map.put("downOrder",downOrderResultList);
- map.put("partOrder",partOrderResultList);
- return map;
- }
- @Override
- public HashMap<String, List<DataGroupByCount>> sceneTrend(Integer type,Integer dataType,String startTime,String endTime) {
- startTime = DateUtils.formatStartTime(startTime);
- endTime = DateUtils.formatEndTime(endTime);
- HashMap<String,List<DataGroupByCount>> map = new HashMap<>();
- List<DataGroupByCount> kkList = new ArrayList<>();
- List<DataGroupByCount> kjList = new ArrayList<>();
- List<DataGroupByCount> ssList = new ArrayList<>();
- List<DataGroupByCount> ssObjList = new ArrayList<>();
- List<DataGroupByCount> proList = new ArrayList<>();
- List<DataGroupByCount> plusList = new ArrayList<>();
- List<DataGroupByCount> proObjList = new ArrayList<>();
- List<DataGroupByCount> plusObjList = new ArrayList<>();
- int rule = DateUtils.DAY;
- switch (type){
- case 0 :
- proList = dataMapper.sceneGroupBy("t_scene_pro",dayFormat,startTime,endTime);
- plusList = dataMapper.sceneGroupBy("t_scene_plus",dayFormat,startTime,endTime);
- proObjList = dataMapper.sceneObjGroupBy("t_scene_pro",dayFormat,startTime,endTime);
- plusObjList = dataMapper.sceneObjGroupBy("t_scene_plus",dayFormat,startTime,endTime);
- break;
- case 1 :
- rule = DateUtils.WEEK;
- proList = dataMapper.sceneGroupByWeek("t_scene_pro",startTime,endTime);
- plusList = dataMapper.sceneGroupByWeek("t_scene_plus",startTime,endTime);
- proObjList = dataMapper.sceneObjGroupByWeek("t_scene_pro",startTime,endTime);
- plusObjList = dataMapper.sceneObjGroupByWeek("t_scene_plus",startTime,endTime);
- break;
- case 2 :
- rule = DateUtils.MONTH;
- proList = dataMapper.sceneGroupBy("t_scene_pro",mouthFormat,startTime,endTime);
- plusList = dataMapper.sceneGroupBy("t_scene_plus",mouthFormat,startTime,endTime);
- proObjList = dataMapper.sceneObjGroupBy("t_scene_pro",mouthFormat,startTime,endTime);
- plusObjList = dataMapper.sceneObjGroupBy("t_scene_plus",mouthFormat,startTime,endTime);
- break;
- }
- HashMap<String, Long> kkMap = new HashMap<>();
- HashMap<String, Long> kjMap = new HashMap<>();
- HashMap<String, Long> ssMap = new HashMap<>();
- HashMap<String, Long> ssObjMap = new HashMap<>();
- for (DataGroupByCount dataGroupByCount : proList) {
- if(dataGroupByCount.getGroupKey2().equals("3")){ //看见
- kjMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
- }
- if(dataGroupByCount.getGroupKey2().equals("4")){ //深时
- ssMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
- }
- if(Arrays.asList("1","2","12","13","14").contains(dataGroupByCount.getGroupKey2())){ //看看
- kkMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
- }
- }
- for (DataGroupByCount dataGroupByCount : plusList) {
- if(dataGroupByCount.getGroupKey2().equals("3")){ //看见
- kjMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
- }
- if(dataGroupByCount.getGroupKey2().equals("4")){ //深时
- ssMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
- }
- if(Arrays.asList("1","2","12","13","14").contains(dataGroupByCount.getGroupKey2())){ //看看
- kkMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
- }
- }
- for (DataGroupByCount dataGroupByCount : proObjList) {
- if(dataGroupByCount.getGroupKey2().equals("4")){ //深时
- ssObjMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
- }
- }
- for (DataGroupByCount dataGroupByCount : plusObjList) {
- if(dataGroupByCount.getGroupKey2().equals("4")){ //深时
- ssObjMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
- }
- }
- Long kkCount = 0L;
- Long KjCount = 0L;
- Long ssCount = 0L;
- Long ssObjCount = 0L;
- if(dataType == 1){
- kkCount = sceneProService.getKkCount(Arrays.asList("1","2","12","13","14"),startTime);
- KjCount = sceneProService.getKkCount(Arrays.asList("3"),startTime);
- ssCount = sceneProService.getSsCount(Arrays.asList("4"),startTime);
- ssObjCount = sceneProService.getSsObjCount(Arrays.asList("4"),startTime);
- }
- List<String> dates = DateUtils.findDatesStr(DateUtils.getDate(startTime), DateUtils.getDate(endTime),rule );
- setListData(kkList,kkMap,dates,dataType,kkCount);
- setListData(kjList,kjMap,dates,dataType,KjCount);
- setListData(ssList,ssMap,dates,dataType,ssCount);
- setListData(ssObjList,ssObjMap,dates,dataType,ssObjCount);
- map.put("kkList",kkList);
- map.put("kjList",kjList);
- map.put("ssList",ssList);
- map.put("ssobjList",ssObjList);
- return map;
- }
- private void setListData(List<DataGroupByCount> kkList, HashMap<String, Long> kkMap, List<String> dates,Integer dataType,Long totalCount) {
- for (String key : dates) {
- DataGroupByCount newCount = new DataGroupByCount();
- newCount.setGroupKey(key);
- Long count = kkMap.get(key) == null ? 0L : kkMap.get(key);
- if(dataType == 1){
- count += totalCount;
- totalCount = count;
- }
- newCount.setCount(count);
- kkList.add(newCount);
- }
- }
- private void setListData(List<DataGroupByCount> kkList, HashMap<String, Long> kkMap, List<String> dates) {
- for (String key : dates) {
- DataGroupByCount newCount = new DataGroupByCount();
- newCount.setGroupKey(key);
- Long count = kkMap.get(key) == null ? 0L : kkMap.get(key);
- newCount.setCount(count);
- kkList.add(newCount);
- }
- }
- @Override
- public HashMap<String, Object> cameraTrend(Integer type, String startTime, String endTime) {
- startTime = DateUtils.formatStartTime(startTime);
- endTime = DateUtils.formatEndTime(endTime);
- HashMap<String,Object> map = new HashMap<>();
- List<DataGroupByCount> allList = new ArrayList<>();
- List<DataGroupByCount> kkList = new ArrayList<>();
- List<DataGroupByCount> kjList = new ArrayList<>();
- List<DataGroupByCount> ssList = new ArrayList<>();
- int rule = DateUtils.DAY;
- switch (type){
- case 0 :
- allList = dataMapper.sceneOutTimeGroupBy("t_camera_detail",dayFormat,startTime,endTime);
- break;
- case 1 :
- rule = DateUtils.WEEK;
- allList = dataMapper.sceneOutTimeGroupByWeek("t_camera_detail",startTime,endTime);
- break;
- case 2 :
- rule = DateUtils.MONTH;
- allList = dataMapper.sceneOutTimeGroupBy("t_camera_detail",mouthFormat,startTime,endTime);
- break;
- }
- HashMap<String, Long> kkMap = new HashMap<>();
- HashMap<String, Long> kjMap = new HashMap<>();
- HashMap<String, Long> ssMap = new HashMap<>();
- for (DataGroupByCount dataGroupByCount : allList) {
- if(dataGroupByCount.getGroupKey2().equals("9")){ //看见
- kjMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
- }
- if(dataGroupByCount.getGroupKey2().equals("10")){ //深时
- ssMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
- }
- if(Arrays.asList("1").contains(dataGroupByCount.getGroupKey2())){ //看看
- kkMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
- }
- }
- List<String> dates = DateUtils.findDatesStr(DateUtils.getDate(startTime), DateUtils.getDate(endTime),rule );
- setListData(kkList,kkMap,dates);
- setListData(kjList,kjMap,dates);
- setListData(ssList,ssMap,dates);
- map.put("kkList",kkList);
- map.put("kjList",kjList);
- map.put("ssList",ssList);
- return map;
- }
- }
|