DataService.java 9.2 KB

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