DataService.java 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. package com.fdkankan.fusion.service.impl;
  2. import com.fdkankan.fusion.common.util.CameraUtil;
  3. import com.fdkankan.fusion.common.util.DataUtil;
  4. import com.fdkankan.fusion.common.util.DateUtils;
  5. import com.fdkankan.fusion.entity.TmCamera;
  6. import com.fdkankan.fusion.entity.TmDepartment;
  7. import com.fdkankan.fusion.request.DataParam;
  8. import com.fdkankan.fusion.response.DataGroupVo;
  9. import com.fdkankan.fusion.service.*;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import java.util.*;
  13. import java.util.stream.Collectors;
  14. @Service
  15. public class DataService implements IDataService {
  16. @Autowired
  17. ITmCameraService tmCameraService;
  18. @Autowired
  19. IScenePlusService scenePlusService;
  20. @Autowired
  21. ITmDepartmentService tmDepartmentService;
  22. @Autowired
  23. ITmProjectService tmProjectService;
  24. @Autowired
  25. ICameraDetailService cameraDetailService;
  26. @Override
  27. public Object sceneGroupByDept(DataParam param) {
  28. HashMap<String,List<Long>> deptIdMap = new HashMap<>();
  29. HashMap<Long,Long> cameraIdMap = new HashMap<>();
  30. String deptId = tmDepartmentService.getDeptId();
  31. List<TmDepartment> sonByDeptId = tmDepartmentService.getSonByDeptId(deptId);
  32. List<String> deptIds = sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList());
  33. deptIds.add(deptId);
  34. List<TmCamera> list = tmCameraService.getByDeptIds(deptIds);
  35. for (TmCamera tmCamera : list) {
  36. if(deptIdMap.get(tmCamera.getDeptId()) == null){
  37. List<Long> cameraIdList = new ArrayList<>();
  38. cameraIdList.add(tmCamera.getFdCameraId());
  39. deptIdMap.put(tmCamera.getDeptId(),cameraIdList);
  40. }else {
  41. deptIdMap.get(tmCamera.getDeptId()).add(tmCamera.getFdCameraId());
  42. }
  43. }
  44. List<Long> cameraIds = list.stream().map(TmCamera::getFdCameraId).collect(Collectors.toList());
  45. List<DataGroupVo> cameraCountList = new ArrayList<>();
  46. if(!cameraIds.isEmpty()){
  47. cameraCountList = scenePlusService.groupByCameraId(param,cameraIds);
  48. }
  49. for (DataGroupVo dataGroupVo : cameraCountList) {
  50. cameraIdMap.put(Long.valueOf(dataGroupVo.getGroupKey()),dataGroupVo.getDataCount());
  51. }
  52. List<TmDepartment> deptList = getDeptVoList();
  53. List<DataGroupVo> dataGroupVos = new ArrayList<>();
  54. for (TmDepartment department : deptList) {
  55. List<Long> cameraIdList = deptIdMap.get(department.getId());
  56. Long count = 0L;
  57. DataGroupVo vo = new DataGroupVo();
  58. vo.setDataCount(count);
  59. vo.setGroupKey(department.getName());
  60. if(cameraIdList != null){
  61. for (Long cameraId : cameraIdList) {
  62. count += cameraIdMap.get(cameraId) == null ? 0 : cameraIdMap.get(cameraId);
  63. }
  64. if(department.getNoStatisticsSon()){
  65. vo.setDataCount(count);
  66. dataGroupVos.add(vo);
  67. continue;
  68. }
  69. if(department.getChildren() != null && department.getChildren().size() >0){
  70. count += addCountByDept(department.getChildren(), deptIdMap, cameraIdMap);
  71. }
  72. }else {
  73. if(department.getChildren() != null && department.getChildren().size() >0){
  74. count += addCountByDept(department.getChildren(), deptIdMap, cameraIdMap);
  75. }
  76. }
  77. vo.setDataCount(count);
  78. dataGroupVos.add(vo);
  79. }
  80. return dataGroupVos;
  81. }
  82. private Long addCountByDept(List<TmDepartment> departments,HashMap<String,List<Long>>deptIdMap ,HashMap<Long,Long> cameraIdMap){
  83. Long count = 0L;
  84. for (TmDepartment department : departments) {
  85. List<Long> cameraIdList = deptIdMap.get(department.getId());
  86. if(cameraIdList != null){
  87. for (Long cameraId : cameraIdList) {
  88. count += cameraIdMap.get(cameraId) == null ? 0 : cameraIdMap.get(cameraId);
  89. }
  90. if(department.getChildren() != null && department.getChildren().size() >0){
  91. count += addCountByDept(department.getChildren(), deptIdMap, cameraIdMap);
  92. }
  93. }
  94. }
  95. return count;
  96. }
  97. private Long addCountByDept(List<TmDepartment> departments ,HashMap<String,Long> deptMap){
  98. Long count = 0L;
  99. for (TmDepartment department : departments) {
  100. count += deptMap.get(department.getId()) == null? 0L :deptMap.get(department.getId());
  101. if(department.getChildren() != null && department.getChildren().size() >0){
  102. count += addCountByDept(department.getChildren(), deptMap);
  103. }
  104. }
  105. return count;
  106. }
  107. private List<TmDepartment> getDeptVoList(){
  108. List<TmDepartment> deptList = tmDepartmentService.getDeptList();
  109. TmDepartment department1 = deptList.get(0);
  110. if(department1.getParentId() == null){ //超管
  111. return department1.getChildren().get(0).getChildren();
  112. }
  113. if(department1.getChildren()!= null && department1.getChildren().size() >0){ //总队
  114. List<TmDepartment> departments = new ArrayList<>();
  115. department1.setNoStatisticsSon(true);
  116. departments.add(department1);
  117. departments.addAll(department1.getChildren());
  118. return departments;
  119. }
  120. return deptList;
  121. }
  122. @Override
  123. public Object projectGroupByDept(DataParam param) {
  124. List<DataGroupVo> groupVoList = tmProjectService.groupByDeptId(param);
  125. HashMap<String,Long> map = new HashMap<>();
  126. groupVoList.forEach(e -> map.put(e.getGroupKey(),e.getDataCount()));
  127. List<TmDepartment> deptVoList = getDeptVoList();
  128. List<DataGroupVo> dataGroupVos = new ArrayList<>();
  129. for (TmDepartment department : deptVoList) {
  130. Long count = map.get(department.getId()) == null? 0L : map.get(department.getId());
  131. if(department.getChildren() != null && department.getChildren().size() >0){
  132. count += addCountByDept(department.getChildren(), map);
  133. }
  134. DataGroupVo vo = new DataGroupVo();
  135. vo.setGroupKey(department.getName());
  136. vo.setDataCount(count);
  137. dataGroupVos.add(vo);
  138. }
  139. return dataGroupVos;
  140. }
  141. @Override
  142. public Object cameraGroupType(DataParam param) {
  143. List<TmCamera> tmCameras = tmCameraService.getByDeptIds(getSonDeptIds());
  144. List<Long> cameraIds = tmCameras.stream().map(TmCamera::getFdCameraId).collect(Collectors.toList());
  145. List<DataGroupVo> groupVoList = new ArrayList<>();
  146. if(!cameraIds.isEmpty()){
  147. groupVoList = scenePlusService.groupByType(param,cameraIds);
  148. }
  149. TreeMap<String,Long> countMap = new TreeMap<>();
  150. for (DataGroupVo dataGroupVo : groupVoList) {
  151. String key = CameraUtil.getCameraNameByType(Integer.valueOf(dataGroupVo.getGroupKey()));
  152. countMap.merge(key, dataGroupVo.getDataCount(), Long::sum);
  153. }
  154. return getListByMap(countMap);
  155. }
  156. private List<String> getSonDeptIds(){
  157. String deptId = tmDepartmentService.getDeptId();
  158. List<TmDepartment> sonByDeptId = tmDepartmentService.getSonByDeptId(deptId);
  159. List<String> deptIds = sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList());
  160. deptIds.add(deptId);
  161. return deptIds;
  162. }
  163. @Override
  164. public Object FireTrend(DataParam param) {
  165. List<String> monthdateList = DateUtils.getMonthdateList(param.getStartTime(), param.getEndTime());
  166. TreeMap<String,Long> countMap = new TreeMap<>();
  167. monthdateList.forEach(e -> countMap.put(e,0L));
  168. List<DataGroupVo> groupVoList = tmProjectService.groupByMonth(param,tmDepartmentService.getDeptIds());
  169. for (DataGroupVo dataGroupVo : groupVoList) {
  170. if(countMap.get(dataGroupVo.getGroupKey()) != null){
  171. countMap.put(dataGroupVo.getGroupKey(),dataGroupVo.getDataCount());
  172. }
  173. }
  174. return getListByMap(countMap);
  175. }
  176. @Override
  177. public Object FirePlaceTrend(DataParam param) {
  178. List<DataGroupVo> groupVoList = tmProjectService.groupByPlace(param,this.getSonDeptIds());
  179. TreeMap<String,Long> countMap = new TreeMap<>();
  180. for (String key : DataUtil.firePlace) {
  181. countMap.put(key,0L);
  182. }
  183. for (DataGroupVo dataGroupVo : groupVoList) {
  184. String key = dataGroupVo.getGroupKey().split(">")[0];
  185. countMap.merge(key, dataGroupVo.getDataCount(), Long::sum);
  186. }
  187. return getListByMap(countMap);
  188. }
  189. @Override
  190. public Object FireReasonTrend(DataParam param) {
  191. List<DataGroupVo> groupVoList = tmProjectService.groupByReason(param,this.getSonDeptIds());
  192. TreeMap<String,Long> countMap = new TreeMap<>();
  193. for (String key : DataUtil.fireReason) {
  194. countMap.put(key,0L);
  195. }
  196. for (DataGroupVo dataGroupVo : groupVoList) {
  197. String key = dataGroupVo.getGroupKey().split(">")[0];
  198. countMap.merge(key, dataGroupVo.getDataCount(), Long::sum);
  199. }
  200. return getListByMap(countMap);
  201. }
  202. private List<DataGroupVo> getListByMap( TreeMap<String,Long> countMap ){
  203. List<DataGroupVo> dataGroupVos = new ArrayList<>();
  204. for (String key : countMap.keySet()) {
  205. DataGroupVo vo = new DataGroupVo();
  206. vo.setGroupKey(key);
  207. vo.setDataCount(countMap.get(key));
  208. dataGroupVos.add(vo);
  209. }
  210. return dataGroupVos;
  211. }
  212. }