| | |
| | | import com.gkhy.safePlatform.emergency.model.dto.resp.*; |
| | | import com.gkhy.safePlatform.emergency.query.EmergencyDrillCountQuery; |
| | | import com.gkhy.safePlatform.emergency.query.EmergencyDrillExecuteCountQuery; |
| | | import com.gkhy.safePlatform.emergency.query.EmergencyDrillTimeQuery; |
| | | import com.gkhy.safePlatform.emergency.query.EmergencySuppliesCountQuery; |
| | | import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteNumRPCReq; |
| | | import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteTimeRPCReq; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | |
| | | * 查询部门及其子级部门最后一次演练时间 |
| | | * 后面按部门等级划分 |
| | | */ |
| | | public EmergencyExecuteTimeRespDTO getLastTimeByDeptIds(Long deptId){ |
| | | public List<EmergencyExecuteDepLevelLasTimeRespDTO> getLastTimeByDeptIds(Long deptId){ |
| | | |
| | | if(null == deptId){ |
| | | throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL); |
| | |
| | | .stream() |
| | | .map(dep -> dep.getDepId()) |
| | | .collect(Collectors.toList()); |
| | | //过滤出传入部门的信息 |
| | | List<DepInfoRPCRespDTO> selectDepList = depInfoList |
| | | .stream() |
| | | .filter(dep -> dep.getDepId().equals(deptId)) |
| | | .collect(Collectors.toList()); |
| | | // 查询该部门ids最后一次演练时间 |
| | | String lastTime = emergencyDrillExecuteInfoService.getLastTimeByDeptIds(deptIdList); |
| | | List<EmergencyDrillExecuteLastTimeDO> executeLastTimeDOS = emergencyDrillExecuteInfoService.getLastTimeByDeptIds(deptIdList); |
| | | List<EmergencyExecuteDepLevelLasTimeRespDTO> depLevelRespDTOList = new ArrayList<>(); |
| | | //循环部门等级 |
| | | for(DepartmentLevelEnum departmentLevelEnum : DepartmentLevelEnum.values()){ |
| | | //数据填充 |
| | | EmergencyExecuteDepLevelLasTimeRespDTO depLevelRespDTO = new EmergencyExecuteDepLevelLasTimeRespDTO(); |
| | | depLevelRespDTO.setDepLevel(departmentLevelEnum.getCode()); |
| | | |
| | | //填充数据 |
| | | EmergencyExecuteTimeRespDTO respDTO = new EmergencyExecuteTimeRespDTO(); |
| | | respDTO.setDepId(deptId); |
| | | respDTO.setLastPricticeTime(StringUtils.isBlank(lastTime) == true ? "" : lastTime); |
| | | if(selectDepList.size()>0){ |
| | | respDTO.setDepLevel(selectDepList.get(0).getDepLevel()); |
| | | //该等级下的部门数据 |
| | | List<DepInfoRPCRespDTO> selectDepList = depInfoList |
| | | .stream() |
| | | .filter(dep -> dep.getDepLevel().equals(departmentLevelEnum.getCode())) |
| | | .collect(Collectors.toList()); |
| | | //获取该部门等级下部门演练数据 |
| | | List<EmergencyDrillExecuteLastTimeDO> selectExeList = executeLastTimeDOS |
| | | .stream() |
| | | .filter(exe -> selectDepList.stream().map(dep -> dep.getDepId()).collect(Collectors.toList()).contains(exe.getDeptId())) |
| | | .collect(Collectors.toList()); |
| | | //获取该等级最后一次演练时间 |
| | | String lastTime = getLastPracticeTime(selectExeList); |
| | | depLevelRespDTO.setLastPricateTime(lastTime); |
| | | depLevelRespDTOList.add(depLevelRespDTO); |
| | | } |
| | | return depLevelRespDTOList; |
| | | } |
| | | //获取最大日期 |
| | | private String getLastPracticeTime(List<EmergencyDrillExecuteLastTimeDO> selectExeList){ |
| | | String lastTime = ""; |
| | | if(selectExeList.size()>0){ |
| | | SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | Collections.sort(selectExeList, new Comparator<EmergencyDrillExecuteLastTimeDO>(){ |
| | | @Override |
| | | public int compare(EmergencyDrillExecuteLastTimeDO timeDO01, EmergencyDrillExecuteLastTimeDO timeDO02) { |
| | | |
| | | int flag = -1; |
| | | try { |
| | | Date date1 = sdft.parse(timeDO01.getLastTime()); |
| | | Date date2 = sdft.parse(timeDO02.getLastTime()); |
| | | if(date1.before(date2)){ |
| | | flag=1; |
| | | } |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return flag; |
| | | } //compare |
| | | }); |
| | | EmergencyDrillExecuteLastTimeDO lastTimeDO = selectExeList.get(0); |
| | | lastTime = lastTimeDO.getLastTime(); |
| | | } |
| | | return lastTime; |
| | | } |
| | | @Override |
| | | public EmergencyExecuteLastTimeRespDTO getLastPracticeTimeByDeptIdAndTime(EmergencyDrillTimeQuery query) { |
| | | if(null == query.getDeptId()){ |
| | | throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"部门id不可为空"); |
| | | } |
| | | if(null == query.getYear()){ |
| | | throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"年份不可为空"); |
| | | } |
| | | //通过RPC获取部门相关数据 |
| | | DepInfoRPCRespDTO depInfoRPCRespDTO = getDepInfoByDepId(query.getDeptId()); |
| | | //开始时间结束时间 |
| | | String startTime; |
| | | String endTime; |
| | | if(null == query.getMonth()){//年 |
| | | startTime = TimeUtils.getYearFirst(query.getYear()); |
| | | endTime = TimeUtils.getYearLast(query.getYear()); |
| | | }else{//月 |
| | | startTime = TimeUtils.getMonthFirst(query.getYear(),query.getMonth()); |
| | | endTime = TimeUtils.getMonthLast(query.getYear(),query.getMonth()); |
| | | } |
| | | // 查询该部门最后一次演练时间 |
| | | String lastTime = emergencyDrillExecuteInfoService.getLastTimeByDeptIdAndTime(query.getDeptId(), startTime,endTime); |
| | | //填充数据 |
| | | EmergencyExecuteLastTimeRespDTO respDTO = new EmergencyExecuteLastTimeRespDTO(); |
| | | respDTO.setDepId(depInfoRPCRespDTO.getDepId()); |
| | | respDTO.setDepLevel(depInfoRPCRespDTO.getDepLevel()); |
| | | respDTO.setYear(query.getYear()); |
| | | respDTO.setMonth(query.getMonth()); |
| | | respDTO.setLastPricticeTime(StringUtils.isBlank(lastTime) == true ? "" : lastTime); |
| | | return respDTO; |
| | | } |
| | | |
| | | @Override |
| | | public List<EmergencyExecuteDepLevelLasTimeRespDTO> getLastPracticeTimeByDeptIdsAndTime(EmergencyDrillTimeQuery query) { |
| | | if(null == query.getDeptId()){ |
| | | throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"部门id不可为空"); |
| | | } |
| | | if(null == query.getYear()){ |
| | | throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"年份不可为空"); |
| | | } |
| | | //通过RPC获取部门相关数据 |
| | | List<DepInfoRPCRespDTO> depInfoList = getDepListInfoByDepId(query.getDeptId()); |
| | | //过滤获取部门id |
| | | List<Long> deptIdList = depInfoList |
| | | .stream() |
| | | .map(dep -> dep.getDepId()) |
| | | .collect(Collectors.toList()); |
| | | //开始时间结束时间 |
| | | String startTime; |
| | | String endTime; |
| | | if(null == query.getMonth()){//年 |
| | | startTime = TimeUtils.getYearFirst(query.getYear()); |
| | | endTime = TimeUtils.getYearLast(query.getYear()); |
| | | }else{//月 |
| | | startTime = TimeUtils.getMonthFirst(query.getYear(),query.getMonth()); |
| | | endTime = TimeUtils.getMonthLast(query.getYear(),query.getMonth()); |
| | | } |
| | | // 查询该部门ids最后一次演练时间 |
| | | List<EmergencyDrillExecuteLastTimeDO> executeLastTimeDOS = emergencyDrillExecuteInfoService.getLastTimeByDeptIdsAndTime(deptIdList,startTime,endTime); |
| | | List<EmergencyExecuteDepLevelLasTimeRespDTO> depLevelRespDTOList = new ArrayList<>(); |
| | | //循环部门等级 |
| | | for(DepartmentLevelEnum departmentLevelEnum : DepartmentLevelEnum.values()){ |
| | | //数据填充 |
| | | EmergencyExecuteDepLevelLasTimeRespDTO depLevelRespDTO = new EmergencyExecuteDepLevelLasTimeRespDTO(); |
| | | depLevelRespDTO.setDepLevel(departmentLevelEnum.getCode()); |
| | | depLevelRespDTO.setYear(query.getYear()); |
| | | depLevelRespDTO.setMonth(query.getMonth()); |
| | | //该等级下的部门数据 |
| | | List<DepInfoRPCRespDTO> selectDepList = depInfoList |
| | | .stream() |
| | | .filter(dep -> dep.getDepLevel().equals(departmentLevelEnum.getCode())) |
| | | .collect(Collectors.toList()); |
| | | //获取该部门等级下部门演练数据 |
| | | List<EmergencyDrillExecuteLastTimeDO> selectExeList = executeLastTimeDOS |
| | | .stream() |
| | | .filter(exe -> selectDepList.stream().map(dep -> dep.getDepId()).collect(Collectors.toList()).contains(exe.getDeptId())) |
| | | .collect(Collectors.toList()); |
| | | //获取该等级最后一次演练时间 |
| | | String lastTime = getLastPracticeTime(selectExeList); |
| | | depLevelRespDTO.setLastPricateTime(lastTime); |
| | | depLevelRespDTOList.add(depLevelRespDTO); |
| | | } |
| | | |
| | | return depLevelRespDTOList; |
| | | } |
| | | /** |
| | | * 根据部门id和指定年份 统计演练数据 |
| | | * |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |