From 53e7dce8d55487cbac64e4374ec9aa1b52a6c6ed Mon Sep 17 00:00:00 2001
From: SZH <szh_hello@163.com>
Date: 星期四, 09 三月 2023 21:16:43 +0800
Subject: [PATCH] 解决npe问题
---
emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/impl/EmergencyCountServiceImpl.java | 150 +++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 137 insertions(+), 13 deletions(-)
diff --git a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/impl/EmergencyCountServiceImpl.java b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/impl/EmergencyCountServiceImpl.java
index 3836a66..24c9560 100644
--- a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/impl/EmergencyCountServiceImpl.java
+++ b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/impl/EmergencyCountServiceImpl.java
@@ -17,6 +17,7 @@
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;
@@ -32,6 +33,7 @@
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;
@@ -371,7 +373,7 @@
* 查询部门及其子级部门最后一次演练时间
* 后面按部门等级划分
*/
- public EmergencyExecuteTimeRespDTO getLastTimeByDeptIds(Long deptId){
+ public List<EmergencyExecuteDepLevelLasTimeRespDTO> getLastTimeByDeptIds(Long deptId){
if(null == deptId){
throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL);
@@ -383,24 +385,144 @@
.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和指定年份 统计演练数据
*
@@ -615,4 +737,6 @@
}
+
+
}
--
Gitblit v1.9.2