package com.fdkankan.fusion.service.impl; import com.fdkankan.fusion.common.util.CameraUtil; import com.fdkankan.fusion.common.util.DataUtil; import com.fdkankan.fusion.common.util.DateUtils; import com.fdkankan.fusion.entity.TmCamera; import com.fdkankan.fusion.entity.TmDepartment; import com.fdkankan.fusion.request.DataParam; import com.fdkankan.fusion.response.DataGroupVo; import com.fdkankan.fusion.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service public class DataService implements IDataService { @Autowired ITmCameraService tmCameraService; @Autowired IScenePlusService scenePlusService; @Autowired ITmDepartmentService tmDepartmentService; @Autowired ITmProjectService tmProjectService; @Autowired ICameraDetailService cameraDetailService; @Override public Object sceneGroupByDept(DataParam param) { HashMap> deptIdMap = new HashMap<>(); HashMap cameraIdMap = new HashMap<>(); String deptId = tmDepartmentService.getDeptId(); List sonByDeptId = tmDepartmentService.getSonByDeptId(deptId); List deptIds = sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList()); deptIds.add(deptId); List list = tmCameraService.getByDeptIds(deptIds); for (TmCamera tmCamera : list) { if(deptIdMap.get(tmCamera.getDeptId()) == null){ List cameraIdList = new ArrayList<>(); cameraIdList.add(tmCamera.getFdCameraId()); deptIdMap.put(tmCamera.getDeptId(),cameraIdList); }else { deptIdMap.get(tmCamera.getDeptId()).add(tmCamera.getFdCameraId()); } } List cameraIds = list.stream().map(TmCamera::getFdCameraId).collect(Collectors.toList()); List cameraCountList = scenePlusService.groupByCameraId(param,cameraIds); for (DataGroupVo dataGroupVo : cameraCountList) { cameraIdMap.put(Long.valueOf(dataGroupVo.getGroupKey()),dataGroupVo.getDataCount()); } List deptList = getDeptVoList(); List dataGroupVos = new ArrayList<>(); for (TmDepartment department : deptList) { List cameraIdList = deptIdMap.get(department.getId()); Long count = 0L; if(cameraIdList != null){ for (Long cameraId : cameraIdList) { count += cameraIdMap.get(cameraId) == null ? 0 : cameraIdMap.get(cameraId); } if(department.getChildren() != null && department.getChildren().size() >0){ count += addCountByDept(department.getChildren(), deptIdMap, cameraIdMap); } }else { if(department.getChildren() != null && department.getChildren().size() >0){ count += addCountByDept(department.getChildren(), deptIdMap, cameraIdMap); } } DataGroupVo vo = new DataGroupVo(); vo.setDataCount(count); vo.setGroupKey(department.getName()); dataGroupVos.add(vo); } return dataGroupVos; } private Long addCountByDept(List departments,HashMap>deptIdMap ,HashMap cameraIdMap){ Long count = 0L; for (TmDepartment department : departments) { List cameraIdList = deptIdMap.get(department.getId()); if(cameraIdList != null){ for (Long cameraId : cameraIdList) { count += cameraIdMap.get(cameraId) == null ? 0 : cameraIdMap.get(cameraId); } if(department.getChildren() != null && department.getChildren().size() >0){ return count + addCountByDept(department.getChildren(), deptIdMap, cameraIdMap); } } } return count; } private Long addCountByDept(List departments ,HashMap deptMap){ Long count = 0L; for (TmDepartment department : departments) { count += deptMap.get(department.getId()) == null? 0L :deptMap.get(department.getId()); if(department.getChildren() != null && department.getChildren().size() >0){ return count + addCountByDept(department.getChildren(), deptMap); } } return count; } private List getDeptVoList(){ List deptList = tmDepartmentService.getDeptList(); TmDepartment department1 = deptList.get(0); if(department1.getParentId() == null){ //超管 return department1.getChildren().get(0).getChildren(); } if(department1.getChildren()!= null && department1.getChildren().size() >0){ //总队 return department1.getChildren(); } return deptList; } @Override public Object projectGroupByDept(DataParam param) { List groupVoList = tmProjectService.groupByDeptId(param); HashMap map = new HashMap<>(); groupVoList.forEach(e -> map.put(e.getGroupKey(),e.getDataCount())); List deptVoList = getDeptVoList(); List dataGroupVos = new ArrayList<>(); for (TmDepartment department : deptVoList) { Long count = map.get(department.getId()) == null? 0L : map.get(department.getId()); if(department.getChildren() != null && department.getChildren().size() >0){ count += addCountByDept(department.getChildren(), map); } DataGroupVo vo = new DataGroupVo(); vo.setGroupKey(department.getName()); vo.setDataCount(count); dataGroupVos.add(vo); } return dataGroupVos; } @Override public Object cameraGroupType(DataParam param) { List tmCameras = tmCameraService.getByDeptIds(getSonDeptIds()); List cameraIds = tmCameras.stream().map(TmCamera::getFdCameraId).collect(Collectors.toList()); List groupVoList = scenePlusService.groupByType(param,cameraIds); HashMap countMap = new HashMap<>(); for (DataGroupVo dataGroupVo : groupVoList) { String key = CameraUtil.getCameraNameByType(Integer.valueOf(dataGroupVo.getGroupKey())); countMap.merge(key, dataGroupVo.getDataCount(), Long::sum); } return getListByMap(countMap); } private List getSonDeptIds(){ String deptId = tmDepartmentService.getDeptId(); List sonByDeptId = tmDepartmentService.getSonByDeptId(deptId); List deptIds = sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList()); deptIds.add(deptId); return deptIds; } @Override public Object FireTrend(DataParam param) { List monthdateList = DateUtils.getMonthdateList(param.getStartTime(), param.getEndTime()); HashMap countMap = new HashMap<>(); monthdateList.forEach(e -> countMap.put(e,0L)); List groupVoList = tmProjectService.groupByMonth(param,tmDepartmentService.getDeptIds()); for (DataGroupVo dataGroupVo : groupVoList) { if(countMap.get(dataGroupVo.getGroupKey()) != null){ countMap.put(dataGroupVo.getGroupKey(),dataGroupVo.getDataCount()); } } return getListByMap(countMap); } @Override public Object FirePlaceTrend(DataParam param) { List groupVoList = tmProjectService.groupByPlace(param,this.getSonDeptIds()); HashMap countMap = new HashMap<>(); for (String key : DataUtil.firePlace) { countMap.put(key,0L); } for (DataGroupVo dataGroupVo : groupVoList) { String key = dataGroupVo.getGroupKey().split(">")[0]; countMap.merge(key, dataGroupVo.getDataCount(), Long::sum); } return getListByMap(countMap); } @Override public Object FireReasonTrend(DataParam param) { List groupVoList = tmProjectService.groupByReason(param,this.getSonDeptIds()); HashMap countMap = new HashMap<>(); for (String key : DataUtil.fireReason) { countMap.put(key,0L); } for (DataGroupVo dataGroupVo : groupVoList) { String key = dataGroupVo.getGroupKey().split(">")[0]; countMap.merge(key, dataGroupVo.getDataCount(), Long::sum); } return getListByMap(countMap); } private List getListByMap( HashMap countMap ){ List dataGroupVos = new ArrayList<>(); for (String key : countMap.keySet()) { DataGroupVo vo = new DataGroupVo(); vo.setGroupKey(key); vo.setDataCount(countMap.get(key)); dataGroupVos.add(vo); } return dataGroupVos; } }