From 0414ddb0b2b3a7199ae6181a770f97ac140dbd73 Mon Sep 17 00:00:00 2001
From: zhangf <1603559716@qq.com>
Date: 星期三, 08 五月 2024 16:46:22 +0800
Subject: [PATCH] spi统计

---
 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/impl/EmergencyCountServiceImpl.java |  112 +++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 78 insertions(+), 34 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 3509e45..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
@@ -33,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;
@@ -372,7 +373,7 @@
      * 查询部门及其子级部门最后一次演练时间
      * 后面按部门等级划分
      */
-    public EmergencyExecuteTimeRespDTO  getLastTimeByDeptIds(Long deptId){
+    public List<EmergencyExecuteDepLevelLasTimeRespDTO>  getLastTimeByDeptIds(Long deptId){
 
         if(null == deptId){
             throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL);
@@ -384,22 +385,58 @@
                 .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 respDTO;
+        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) {
@@ -411,8 +448,6 @@
         }
         //通过RPC获取部门相关数据
         DepInfoRPCRespDTO depInfoRPCRespDTO = getDepInfoByDepId(query.getDeptId());
-        List<Long> idList = new ArrayList<>();
-        idList.add(query.getDeptId());
         //开始时间结束时间
         String startTime;
         String endTime;
@@ -424,7 +459,7 @@
             endTime = TimeUtils.getMonthLast(query.getYear(),query.getMonth());
         }
         // 查询该部门最后一次演练时间
-        String lastTime = emergencyDrillExecuteInfoService.getLastTimeByDeptIdsAndTime(idList,startTime,endTime);
+        String lastTime = emergencyDrillExecuteInfoService.getLastTimeByDeptIdAndTime(query.getDeptId(), startTime,endTime);
         //填充数据
         EmergencyExecuteLastTimeRespDTO respDTO = new EmergencyExecuteLastTimeRespDTO();
         respDTO.setDepId(depInfoRPCRespDTO.getDepId());
@@ -436,7 +471,7 @@
     }
 
     @Override
-    public EmergencyExecuteLastTimeRespDTO getLastPracticeTimeByDeptIdsAndTime(EmergencyDrillTimeQuery query) {
+    public List<EmergencyExecuteDepLevelLasTimeRespDTO> getLastPracticeTimeByDeptIdsAndTime(EmergencyDrillTimeQuery query) {
         if(null == query.getDeptId()){
             throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"部门id不可为空");
         }
@@ -450,11 +485,6 @@
                 .stream()
                 .map(dep -> dep.getDepId())
                 .collect(Collectors.toList());
-        //过滤出传入部门的信息
-        List<DepInfoRPCRespDTO> selectDepList = depInfoList
-                .stream()
-                .filter(dep -> dep.getDepId().equals(query.getDeptId()))
-                .collect(Collectors.toList());
         //开始时间结束时间
         String startTime;
         String endTime;
@@ -466,18 +496,32 @@
             endTime = TimeUtils.getMonthLast(query.getYear(),query.getMonth());
         }
         // 查询该部门ids最后一次演练时间
-        String lastTime = emergencyDrillExecuteInfoService.getLastTimeByDeptIdsAndTime(deptIdList,startTime,endTime);
-
-        //填充数据
-        EmergencyExecuteLastTimeRespDTO respDTO = new EmergencyExecuteLastTimeRespDTO();
-        respDTO.setDepId(query.getDeptId());
-        respDTO.setYear(query.getYear());
-        respDTO.setMonth(query.getMonth());
-        respDTO.setLastPricticeTime(StringUtils.isBlank(lastTime) == true ? "" : lastTime);
-        if(selectDepList.size()>0){
-            respDTO.setDepLevel(selectDepList.get(0).getDepLevel());
+        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 respDTO;
+
+        return depLevelRespDTOList;
     }
     /**
      * 根据部门id和指定年份 统计演练数据

--
Gitblit v1.9.2