DataService.java 20 KB

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