DataService.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. package com.fdkankan.manage.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.fdkankan.manage.entity.User;
  4. import com.fdkankan.manage.mapper.IDataMapper;
  5. import com.fdkankan.manage.service.IDataService;
  6. import com.fdkankan.manage.service.ISceneProService;
  7. import com.fdkankan.manage.service.IUserService;
  8. import com.fdkankan.manage.util.DateUtils;
  9. import com.fdkankan.manage.vo.response.*;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import java.util.*;
  13. @Service
  14. public class DataService implements IDataService {
  15. static String dayFormat = "%Y-%m-%d";
  16. static String mouthFormat = "%Y-%m";
  17. static String yearFormat = "%Y";
  18. @Autowired
  19. IDataMapper dataMapper;
  20. @Autowired
  21. IUserService userService;
  22. @Autowired
  23. ISceneProService sceneProService;
  24. @Override
  25. public UserTotalVo getUserTotal() {
  26. UserTotalVo totalVo = new UserTotalVo();
  27. Long totalUserCount = dataMapper.totalUserCount("t_user",0);
  28. Long preMonthAddCount = dataMapper.preMonthAddCount("t_user",0);
  29. Long todayAddCount = dataMapper.todayAddCount("t_user",0);
  30. Long todayActiveCount = dataMapper.todayActiveCount();
  31. totalVo.setTotalUserCount(totalUserCount);
  32. totalVo.setPreMonthAddCount(preMonthAddCount);
  33. totalVo.setTodayAddCount(todayAddCount);
  34. totalVo.setTodayActiveCount(todayActiveCount);
  35. return totalVo;
  36. }
  37. @Override
  38. public SceneTotalVo sceneTotal() {
  39. SceneTotalVo totalVo = new SceneTotalVo();
  40. Long totalSceneCount = dataMapper.totalUserCount("t_scene_pro",1) + dataMapper.totalUserCount("t_scene_plus",0);
  41. Long preMonthAddCount = dataMapper.preMonthAddCount("t_scene_pro",1) + dataMapper.preMonthAddCount("t_scene_plus",0);
  42. Long todayAddCount = dataMapper.todayAddCount("t_scene_pro",1) + dataMapper.todayAddCount("t_scene_plus",0);
  43. totalVo.setTotalSceneCount(totalSceneCount);
  44. totalVo.setPreMonthAddCount(preMonthAddCount);
  45. totalVo.setTodayAddCount(todayAddCount);
  46. return totalVo;
  47. }
  48. @Override
  49. public OrderTotalVo orderTotal() {
  50. Long preMonthPowCount = dataMapper.preMonthAddCount("t_increment_order",2);
  51. Long preMonthDownCount = dataMapper.preMonthAddCount("t_download_order",2);
  52. Long preMonthPartCount = dataMapper.preMonthAddCount("t_order",3);
  53. OrderTotalVo totalVo = new OrderTotalVo();
  54. totalVo.setPreMonThPowCount(preMonthPowCount);
  55. totalVo.setPreMonThDownCount(preMonthDownCount);
  56. totalVo.setPreMonThPartCount(preMonthPartCount);
  57. return totalVo;
  58. }
  59. @Override
  60. public List<DataGroupByCount> userTrend(Integer type,Integer dataType,String startTime,String endTime) {
  61. startTime = DateUtils.formatStartTime(startTime);
  62. endTime = DateUtils.formatEndTime(endTime);
  63. List<DataGroupByCount> dataList = new ArrayList<>();
  64. List<DataGroupByCount> result = new ArrayList<>();
  65. int rule = DateUtils.DAY;
  66. String tb = "t_user";
  67. if(dataType == 2){
  68. tb = "t_login_log";
  69. }
  70. switch (type){
  71. case 0 :
  72. dataList = dataMapper.userDataGroupBy(tb, dayFormat, startTime, endTime);
  73. break;
  74. case 1 :
  75. rule = DateUtils.WEEK;
  76. dataList = dataMapper.userDataGroupByWeek(tb,startTime,endTime);
  77. break;
  78. case 2 :
  79. rule = DateUtils.MONTH;
  80. dataList = dataMapper.userDataGroupBy(tb,mouthFormat,startTime,endTime);
  81. break;
  82. }
  83. Long totalCount = 0L;
  84. if(dataType == 1){ //累加
  85. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  86. wrapper.lt(User::getCreateTime,startTime);
  87. totalCount = userService.count(wrapper);
  88. }
  89. //查询从开始时间到结束时间为止所有天数,月份,不存在结果补零
  90. HashMap<String,Long> map = new HashMap<>();
  91. dataList.forEach(entity -> map.put(entity.getGroupKey(),entity.getCount()));
  92. List<String> dates = DateUtils.findDatesStr(DateUtils.getDate(startTime), DateUtils.getDate(endTime),rule );
  93. setListData(result,map,dates,dataType,totalCount);
  94. return result;
  95. }
  96. @Override
  97. public HashMap<String, Object> orderTrend(Integer type,Integer dataType,String startTime,String endTime) {
  98. startTime = DateUtils.formatStartTime(startTime);
  99. endTime = DateUtils.formatEndTime(endTime);
  100. HashMap<String,Object> map = new HashMap<>();
  101. if(dataType == 1){
  102. return getAmountSumOrder(map,type,startTime,endTime);
  103. }
  104. List<DataGroupByCount> incrementOrderList = new ArrayList<>();
  105. List<DataGroupByCount> downOrderList = new ArrayList<>();
  106. List<DataGroupByCount> partOrderList = new ArrayList<>();
  107. List<DataGroupByCount> incrementOrderResultList = new ArrayList<>();
  108. List<DataGroupByCount> downOrderResultList = new ArrayList<>();
  109. List<DataGroupByCount> partOrderResultList = new ArrayList<>();
  110. int rule = DateUtils.DAY;
  111. switch (type){
  112. case 0 :
  113. incrementOrderList = dataMapper.userDataGroupBy("t_increment_order",dayFormat,startTime,endTime);
  114. downOrderList = dataMapper.userDataGroupBy("t_download_order",dayFormat,startTime,endTime);
  115. partOrderList = dataMapper.userDataGroupBy("t_order",dayFormat,startTime,endTime);
  116. break;
  117. case 1 :
  118. rule = DateUtils.WEEK;
  119. incrementOrderList = dataMapper.userDataGroupByWeek("t_increment_order",startTime,endTime);
  120. downOrderList = dataMapper.userDataGroupByWeek("t_download_order",startTime,endTime);
  121. partOrderList = dataMapper.userDataGroupByWeek("t_order",startTime,endTime);
  122. break;
  123. case 2 :
  124. rule = DateUtils.MONTH;
  125. incrementOrderList = dataMapper.userDataGroupBy("t_increment_order",mouthFormat,startTime,endTime);
  126. downOrderList = dataMapper.userDataGroupBy("t_download_order",mouthFormat,startTime,endTime);
  127. partOrderList = dataMapper.userDataGroupBy("t_order",mouthFormat,startTime,endTime);
  128. break;
  129. }
  130. //查询从开始时间到结束时间为止所有天数,月份,不存在结果补零
  131. HashMap<String,Long> incrementMap = new HashMap<>();
  132. HashMap<String,Long> downOrderMap = new HashMap<>();
  133. HashMap<String,Long> partMap = new HashMap<>();
  134. incrementOrderList.forEach(entity -> incrementMap.put(entity.getGroupKey(),entity.getCount()));
  135. downOrderList.forEach(entity -> downOrderMap.put(entity.getGroupKey(),entity.getCount()));
  136. partOrderList.forEach(entity -> partMap.put(entity.getGroupKey(),entity.getCount()));
  137. List<String> dates = DateUtils.findDatesStr(DateUtils.getDate(startTime), DateUtils.getDate(endTime),rule );
  138. for (String date : dates) {
  139. DataGroupByCount groupByCount = new DataGroupByCount();
  140. groupByCount.setGroupKey(date);
  141. groupByCount.setCount(incrementMap.get(date)== null ?0 :incrementMap.get(date));
  142. incrementOrderResultList.add(groupByCount);
  143. DataGroupByCount groupByCount2 = new DataGroupByCount();
  144. groupByCount2.setGroupKey(date);
  145. groupByCount2.setCount(downOrderMap.get(date)== null ?0 :downOrderMap.get(date));
  146. downOrderResultList.add(groupByCount2);
  147. DataGroupByCount groupByCount3 = new DataGroupByCount();
  148. groupByCount3.setGroupKey(date);
  149. groupByCount3.setCount(partMap.get(date)== null ?0 :partMap.get(date));
  150. partOrderResultList.add(groupByCount3);
  151. }
  152. map.put("incrementOrder",incrementOrderResultList);
  153. map.put("downOrder",downOrderResultList);
  154. map.put("partOrder",partOrderResultList);
  155. return map;
  156. }
  157. private HashMap<String, Object> getAmountSumOrder(HashMap<String,Object> map,Integer type, String startTime, String endTime) {
  158. List<DataGroupBySum> incrementOrderList = new ArrayList<>();
  159. List<DataGroupBySum> downOrderList = new ArrayList<>();
  160. List<DataGroupBySum> partOrderList = new ArrayList<>();
  161. List<DataGroupBySum> incrementOrderResultList = new ArrayList<>();
  162. List<DataGroupBySum> downOrderResultList = new ArrayList<>();
  163. List<DataGroupBySum> partOrderResultList = new ArrayList<>();
  164. int rule = DateUtils.DAY;
  165. switch (type){
  166. case 0 :
  167. incrementOrderList = dataMapper.userDataSumGroupBy("t_increment_order",dayFormat,startTime,endTime);
  168. downOrderList = dataMapper.userDataSumGroupBy("t_download_order",dayFormat,startTime,endTime);
  169. partOrderList = dataMapper.userDataSumGroupBy("t_order",dayFormat,startTime,endTime);
  170. break;
  171. case 1 :
  172. rule = DateUtils.WEEK;
  173. incrementOrderList = dataMapper.userDataSumGroupByWeek("t_increment_order",startTime,endTime);
  174. downOrderList = dataMapper.userDataSumGroupByWeek("t_download_order",startTime,endTime);
  175. partOrderList = dataMapper.userDataSumGroupByWeek("t_order",startTime,endTime);
  176. break;
  177. case 2 :
  178. rule = DateUtils.MONTH;
  179. incrementOrderList = dataMapper.userDataSumGroupBy("t_increment_order",mouthFormat,startTime,endTime);
  180. downOrderList = dataMapper.userDataSumGroupBy("t_download_order",mouthFormat,startTime,endTime);
  181. partOrderList = dataMapper.userDataSumGroupBy("t_order",mouthFormat,startTime,endTime);
  182. break;
  183. }
  184. //查询从开始时间到结束时间为止所有天数,月份,不存在结果补零
  185. HashMap<String,String> incrementMap = new HashMap<>();
  186. HashMap<String,String> downOrderMap = new HashMap<>();
  187. HashMap<String,String> partMap = new HashMap<>();
  188. incrementOrderList.forEach(entity -> incrementMap.put(entity.getGroupKey(),entity.getCount()));
  189. downOrderList.forEach(entity -> downOrderMap.put(entity.getGroupKey(),entity.getCount()));
  190. partOrderList.forEach(entity -> partMap.put(entity.getGroupKey(),entity.getCount()));
  191. List<String> dates = DateUtils.findDatesStr(DateUtils.getDate(startTime), DateUtils.getDate(endTime),rule );
  192. for (String date : dates) {
  193. DataGroupBySum groupByCount = new DataGroupBySum();
  194. groupByCount.setGroupKey(date);
  195. groupByCount.setCount(incrementMap.get(date)== null ?"0" :incrementMap.get(date));
  196. incrementOrderResultList.add(groupByCount);
  197. DataGroupBySum groupByCount2 = new DataGroupBySum();
  198. groupByCount2.setGroupKey(date);
  199. groupByCount2.setCount(downOrderMap.get(date)== null ?"0" :downOrderMap.get(date));
  200. downOrderResultList.add(groupByCount2);
  201. DataGroupBySum groupByCount3 = new DataGroupBySum();
  202. groupByCount3.setGroupKey(date);
  203. groupByCount3.setCount(partMap.get(date)== null ?"0" :partMap.get(date));
  204. partOrderResultList.add(groupByCount3);
  205. }
  206. map.put("incrementOrder",incrementOrderResultList);
  207. map.put("downOrder",downOrderResultList);
  208. map.put("partOrder",partOrderResultList);
  209. return map;
  210. }
  211. @Override
  212. public HashMap<String, List<DataGroupByCount>> sceneTrend(Integer type,Integer dataType,String startTime,String endTime) {
  213. startTime = DateUtils.formatStartTime(startTime);
  214. endTime = DateUtils.formatEndTime(endTime);
  215. HashMap<String,List<DataGroupByCount>> map = new HashMap<>();
  216. List<DataGroupByCount> kkList = new ArrayList<>();
  217. List<DataGroupByCount> kjList = new ArrayList<>();
  218. List<DataGroupByCount> ssList = new ArrayList<>();
  219. List<DataGroupByCount> ssObjList = new ArrayList<>();
  220. List<DataGroupByCount> proList = new ArrayList<>();
  221. List<DataGroupByCount> plusList = new ArrayList<>();
  222. List<DataGroupByCount> proObjList = new ArrayList<>();
  223. List<DataGroupByCount> plusObjList = new ArrayList<>();
  224. int rule = DateUtils.DAY;
  225. switch (type){
  226. case 0 :
  227. proList = dataMapper.sceneGroupBy("t_scene_pro",dayFormat,startTime,endTime);
  228. plusList = dataMapper.sceneGroupBy("t_scene_plus",dayFormat,startTime,endTime);
  229. proObjList = dataMapper.sceneObjGroupBy("t_scene_pro",dayFormat,startTime,endTime);
  230. plusObjList = dataMapper.sceneObjGroupBy("t_scene_plus",dayFormat,startTime,endTime);
  231. break;
  232. case 1 :
  233. rule = DateUtils.WEEK;
  234. proList = dataMapper.sceneGroupByWeek("t_scene_pro",startTime,endTime);
  235. plusList = dataMapper.sceneGroupByWeek("t_scene_plus",startTime,endTime);
  236. proObjList = dataMapper.sceneObjGroupByWeek("t_scene_pro",startTime,endTime);
  237. plusObjList = dataMapper.sceneObjGroupByWeek("t_scene_plus",startTime,endTime);
  238. break;
  239. case 2 :
  240. rule = DateUtils.MONTH;
  241. proList = dataMapper.sceneGroupBy("t_scene_pro",mouthFormat,startTime,endTime);
  242. plusList = dataMapper.sceneGroupBy("t_scene_plus",mouthFormat,startTime,endTime);
  243. proObjList = dataMapper.sceneObjGroupBy("t_scene_pro",mouthFormat,startTime,endTime);
  244. plusObjList = dataMapper.sceneObjGroupBy("t_scene_plus",mouthFormat,startTime,endTime);
  245. break;
  246. }
  247. HashMap<String, Long> kkMap = new HashMap<>();
  248. HashMap<String, Long> kjMap = new HashMap<>();
  249. HashMap<String, Long> ssMap = new HashMap<>();
  250. HashMap<String, Long> ssObjMap = new HashMap<>();
  251. for (DataGroupByCount dataGroupByCount : proList) {
  252. if(dataGroupByCount.getGroupKey2().equals("3")){ //看见
  253. kjMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
  254. }
  255. if(dataGroupByCount.getGroupKey2().equals("4")){ //深时
  256. ssMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
  257. }
  258. if(Arrays.asList("1","2","12","13","14").contains(dataGroupByCount.getGroupKey2())){ //看看
  259. kkMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
  260. }
  261. }
  262. for (DataGroupByCount dataGroupByCount : plusList) {
  263. if(dataGroupByCount.getGroupKey2().equals("3")){ //看见
  264. kjMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
  265. }
  266. if(dataGroupByCount.getGroupKey2().equals("4")){ //深时
  267. ssMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
  268. }
  269. if(Arrays.asList("1","2","12","13","14").contains(dataGroupByCount.getGroupKey2())){ //看看
  270. kkMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
  271. }
  272. }
  273. for (DataGroupByCount dataGroupByCount : proObjList) {
  274. if(dataGroupByCount.getGroupKey2().equals("4")){ //深时
  275. ssObjMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
  276. }
  277. }
  278. for (DataGroupByCount dataGroupByCount : plusObjList) {
  279. if(dataGroupByCount.getGroupKey2().equals("4")){ //深时
  280. ssObjMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
  281. }
  282. }
  283. Long kkCount = 0L;
  284. Long KjCount = 0L;
  285. Long ssCount = 0L;
  286. Long ssObjCount = 0L;
  287. if(dataType == 1){
  288. kkCount = sceneProService.getKkCount(Arrays.asList("1","2","12","13","14"),startTime);
  289. KjCount = sceneProService.getKkCount(Arrays.asList("3"),startTime);
  290. ssCount = sceneProService.getSsCount(Arrays.asList("4"),startTime);
  291. ssObjCount = sceneProService.getSsObjCount(Arrays.asList("4"),startTime);
  292. }
  293. List<String> dates = DateUtils.findDatesStr(DateUtils.getDate(startTime), DateUtils.getDate(endTime),rule );
  294. setListData(kkList,kkMap,dates,dataType,kkCount);
  295. setListData(kjList,kjMap,dates,dataType,KjCount);
  296. setListData(ssList,ssMap,dates,dataType,ssCount);
  297. setListData(ssObjList,ssObjMap,dates,dataType,ssObjCount);
  298. map.put("kkList",kkList);
  299. map.put("kjList",kjList);
  300. map.put("ssList",ssList);
  301. map.put("ssobjList",ssObjList);
  302. return map;
  303. }
  304. private void setListData(List<DataGroupByCount> kkList, HashMap<String, Long> kkMap, List<String> dates,Integer dataType,Long totalCount) {
  305. for (String key : dates) {
  306. DataGroupByCount newCount = new DataGroupByCount();
  307. newCount.setGroupKey(key);
  308. Long count = kkMap.get(key) == null ? 0L : kkMap.get(key);
  309. if(dataType == 1){
  310. count += totalCount;
  311. totalCount = count;
  312. }
  313. newCount.setCount(count);
  314. kkList.add(newCount);
  315. }
  316. }
  317. private void setListData(List<DataGroupByCount> kkList, HashMap<String, Long> kkMap, List<String> dates) {
  318. for (String key : dates) {
  319. DataGroupByCount newCount = new DataGroupByCount();
  320. newCount.setGroupKey(key);
  321. Long count = kkMap.get(key) == null ? 0L : kkMap.get(key);
  322. newCount.setCount(count);
  323. kkList.add(newCount);
  324. }
  325. }
  326. @Override
  327. public HashMap<String, Object> cameraTrend(Integer type, String startTime, String endTime) {
  328. startTime = DateUtils.formatStartTime(startTime);
  329. endTime = DateUtils.formatEndTime(endTime);
  330. HashMap<String,Object> map = new HashMap<>();
  331. List<DataGroupByCount> allList = new ArrayList<>();
  332. List<DataGroupByCount> kkList = new ArrayList<>();
  333. List<DataGroupByCount> kjList = new ArrayList<>();
  334. List<DataGroupByCount> ssList = new ArrayList<>();
  335. int rule = DateUtils.DAY;
  336. switch (type){
  337. case 0 :
  338. allList = dataMapper.sceneOutTimeGroupBy("t_camera_detail",dayFormat,startTime,endTime);
  339. break;
  340. case 1 :
  341. rule = DateUtils.WEEK;
  342. allList = dataMapper.sceneOutTimeGroupByWeek("t_camera_detail",startTime,endTime);
  343. break;
  344. case 2 :
  345. rule = DateUtils.MONTH;
  346. allList = dataMapper.sceneOutTimeGroupBy("t_camera_detail",mouthFormat,startTime,endTime);
  347. break;
  348. }
  349. HashMap<String, Long> kkMap = new HashMap<>();
  350. HashMap<String, Long> kjMap = new HashMap<>();
  351. HashMap<String, Long> ssMap = new HashMap<>();
  352. for (DataGroupByCount dataGroupByCount : allList) {
  353. if(dataGroupByCount.getGroupKey2().equals("9")){ //看见
  354. kjMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
  355. }
  356. if(dataGroupByCount.getGroupKey2().equals("10")){ //深时
  357. ssMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
  358. }
  359. if(Arrays.asList("1").contains(dataGroupByCount.getGroupKey2())){ //看看
  360. kkMap.merge(dataGroupByCount.getGroupKey(),dataGroupByCount.getCount(), Long:: sum);
  361. }
  362. }
  363. List<String> dates = DateUtils.findDatesStr(DateUtils.getDate(startTime), DateUtils.getDate(endTime),rule );
  364. setListData(kkList,kkMap,dates);
  365. setListData(kjList,kjMap,dates);
  366. setListData(ssList,ssMap,dates);
  367. map.put("kkList",kkList);
  368. map.put("kjList",kjList);
  369. map.put("ssList",ssList);
  370. return map;
  371. }
  372. }