From 9a73660fa673120de8fb4fdacdfe2a9f47fe9fbb Mon Sep 17 00:00:00 2001
From: zhangfeng <1603559716@qq.com>
Date: 星期二, 08 十一月 2022 08:38:10 +0800
Subject: [PATCH] Merge branch 'master' of https://sinanoaq.cn:8888/r/safePlatform-out into zf

---
 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/model/dto/resp/EmergencyExecuteDepLevelLasTimeRespDTO.java            |   44 ++++
 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/repository/EmergencyDrillExecuteInfoRepository.java                   |    5 
 emergency/emergency-service/src/main/resources/config/mapper/emergency/EmergencyDrillExecuteInfoMapper.xml                                      |   43 +++
 emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteDepLevelLasTimeRPCRespDTO.java |   44 ++++
 emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteTimeRPCRespDTO.java            |    2 
 emergency/emergency-rpc-provider/src/main/java/com/gkhy/safePlatform/emergency/rpc/provider/EmergencyRpcProvider.java                           |   74 ++++++
 emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteLastTimeRPCRespDTO.java        |   28 ++
 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/impl/EmergencyCountServiceImpl.java                           |  150 ++++++++++++-
 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/EmergencyCountService.java                                    |    6 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/schedule/KeepAliveRobot.java                                          |   28 ++
 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/controller/EmergencyCountController.java                              |   18 +
 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/model/dto/resp/EmergencyExecuteLastTimeRespDTO.java                   |   58 +++++
 emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/req/EmergencydrillTimeRPCReq.java                   |   35 +++
 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/impl/EmergencyDrillExecuteInfoServiceImpl.java    |   17 +
 emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/EmergencyRpcAPi.java                                          |   11 
 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/query/EmergencyDrillTimeQuery.java                                    |   35 +++
 emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/EmergencyDrillExecuteInfoService.java             |    4 
 17 files changed, 562 insertions(+), 40 deletions(-)

diff --git a/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/EmergencyRpcAPi.java b/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/EmergencyRpcAPi.java
index ae173b8..d54c4dc 100644
--- a/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/EmergencyRpcAPi.java
+++ b/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/EmergencyRpcAPi.java
@@ -7,6 +7,7 @@
 import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteCountRPCReq;
 import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteNumRPCReq;
 import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteTimeRPCReq;
+import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencydrillTimeRPCReq;
 import com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp.*;
 
 
@@ -36,10 +37,16 @@
 
     /*****************************************重构***********************************************************/
     // RPC接口--1、传入部门ID,查询该部门最后一次完成应急演练的时间
-    ResultVO<EmergencyExecuteLastTimeRPCResp> getExecuteLastTimeByDeptId(Long depId);
+    ResultVO<EmergencyExecuteTimeRPCRespDTO> getExecuteLastTimeByDeptId(Long depId);
 
     // RPC接口--2、传入部门ID,查询该部门以及子级部门中最后一次完成应急演练的时间
-    ResultVO<EmergencyExecuteLastTimeRPCResp> getExecuteLastTimeByDeptIds(Long depId);
+    ResultVO<List<EmergencyExecuteDepLevelLasTimeRPCRespDTO>> getExecuteLastTimeByDeptIds(Long depId);
+
+    // RPC接口--1、传入部门ID,指定年份,月份,查询该部门最后一次完成应急演练的时间
+    ResultVO<EmergencyExecuteLastTimeRPCRespDTO> getExecuteLastTimeByDeptIdAndTime(EmergencydrillTimeRPCReq query);
+
+    // RPC接口--2、传入部门ID,,指定年份,月份,查询该部门以及子级部门中最后一次完成应急演练的时间
+    ResultVO<List<EmergencyExecuteDepLevelLasTimeRPCRespDTO>> getExecuteLastTimeByDeptIdsAndTime(EmergencydrillTimeRPCReq query);
 
     // RPC接口--3、传入部门ID,指定月份 ,统计演练次数
     ResultVO<StatisticsDepLevelMonthEexcuteRPCRespDTO> getExecuteCountByDeptIdAndMonth(EmergencyExecuteCountRPCReq query);
diff --git a/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/req/EmergencydrillTimeRPCReq.java b/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/req/EmergencydrillTimeRPCReq.java
new file mode 100644
index 0000000..0a6e41e
--- /dev/null
+++ b/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/req/EmergencydrillTimeRPCReq.java
@@ -0,0 +1,35 @@
+package com.gkhy.safePlatform.emergency.rpc.api.model.dto.req;
+
+public class EmergencydrillTimeRPCReq {
+    //部门id
+    private Long deptId;
+    //年份
+    private Integer year;
+    //月份
+    private Integer month;
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
+    public Integer getYear() {
+        return year;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
+    public Integer getMonth() {
+        return month;
+    }
+
+    public void setMonth(Integer month) {
+        this.month = month;
+    }
+
+}
diff --git a/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteDepLevelLasTimeRPCRespDTO.java b/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteDepLevelLasTimeRPCRespDTO.java
new file mode 100644
index 0000000..7921aca
--- /dev/null
+++ b/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteDepLevelLasTimeRPCRespDTO.java
@@ -0,0 +1,44 @@
+package com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp;
+
+public class EmergencyExecuteDepLevelLasTimeRPCRespDTO {
+    //部门等级
+    private Byte depLevel;
+    //年
+    private Integer year;
+    //月
+    private Integer month;
+    //最后一次演练时间
+    private String LastPricateTime;
+
+    public Byte getDepLevel() {
+        return depLevel;
+    }
+
+    public void setDepLevel(Byte depLevel) {
+        this.depLevel = depLevel;
+    }
+
+    public Integer getYear() {
+        return year;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
+    public Integer getMonth() {
+        return month;
+    }
+
+    public void setMonth(Integer month) {
+        this.month = month;
+    }
+
+    public String getLastPricateTime() {
+        return LastPricateTime;
+    }
+
+    public void setLastPricateTime(String lastPricateTime) {
+        LastPricateTime = lastPricateTime;
+    }
+}
diff --git a/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteLastTimeRPCResp.java b/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteLastTimeRPCRespDTO.java
similarity index 63%
copy from emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteLastTimeRPCResp.java
copy to emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteLastTimeRPCRespDTO.java
index 89009b6..f564bbe 100644
--- a/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteLastTimeRPCResp.java
+++ b/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteLastTimeRPCRespDTO.java
@@ -1,15 +1,17 @@
 package com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp;
 
-/**
- * 应急演练时间
- */
-public class EmergencyExecuteLastTimeRPCResp {
-
+public class EmergencyExecuteLastTimeRPCRespDTO {
     // 部门id
     private Long depId;
 
     // 部门级别
     private Byte depLevel;
+
+    //年份
+    private Integer year;
+
+    //月份
+    private Integer month;
 
     //左后一次演练的时间
     private String lastPricticeTime;
@@ -30,6 +32,22 @@
         this.depLevel = depLevel;
     }
 
+    public Integer getYear() {
+        return year;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
+    public Integer getMonth() {
+        return month;
+    }
+
+    public void setMonth(Integer month) {
+        this.month = month;
+    }
+
     public String getLastPricticeTime() {
         return lastPricticeTime;
     }
diff --git a/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteLastTimeRPCResp.java b/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteTimeRPCRespDTO.java
similarity index 93%
rename from emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteLastTimeRPCResp.java
rename to emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteTimeRPCRespDTO.java
index 89009b6..9f3e154 100644
--- a/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteLastTimeRPCResp.java
+++ b/emergency/emergency-rpc-api/src/main/java/com/gkhy/safePlatform/emergency/rpc/api/model/dto/resp/EmergencyExecuteTimeRPCRespDTO.java
@@ -3,7 +3,7 @@
 /**
  * 应急演练时间
  */
-public class EmergencyExecuteLastTimeRPCResp {
+public class EmergencyExecuteTimeRPCRespDTO {
 
     // 部门id
     private Long depId;
diff --git a/emergency/emergency-rpc-provider/src/main/java/com/gkhy/safePlatform/emergency/rpc/provider/EmergencyRpcProvider.java b/emergency/emergency-rpc-provider/src/main/java/com/gkhy/safePlatform/emergency/rpc/provider/EmergencyRpcProvider.java
index c0b9b22..52220f8 100644
--- a/emergency/emergency-rpc-provider/src/main/java/com/gkhy/safePlatform/emergency/rpc/provider/EmergencyRpcProvider.java
+++ b/emergency/emergency-rpc-provider/src/main/java/com/gkhy/safePlatform/emergency/rpc/provider/EmergencyRpcProvider.java
@@ -10,10 +10,12 @@
 import com.gkhy.safePlatform.emergency.excepiton.EmergencyException;
 import com.gkhy.safePlatform.emergency.model.dto.resp.*;
 import com.gkhy.safePlatform.emergency.query.EmergencyDrillCountQuery;
+import com.gkhy.safePlatform.emergency.query.EmergencyDrillTimeQuery;
 import com.gkhy.safePlatform.emergency.rpc.api.EmergencyRpcAPi;
 import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteCountRPCReq;
 import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteNumRPCReq;
 import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteTimeRPCReq;
+import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencydrillTimeRPCReq;
 import com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp.*;
 import com.gkhy.safePlatform.emergency.service.EmergencyCountService;
 import com.gkhy.safePlatform.emergency.service.EmergencySuppliesService;
@@ -106,10 +108,10 @@
     }
 
     @Override
-    public ResultVO<EmergencyExecuteLastTimeRPCResp> getExecuteLastTimeByDeptId(Long depId) {
-        ResultVO<EmergencyExecuteLastTimeRPCResp> result = new ResultVO<>(ResultCodes.OK);
+    public ResultVO<EmergencyExecuteTimeRPCRespDTO> getExecuteLastTimeByDeptId(Long depId) {
+        ResultVO<EmergencyExecuteTimeRPCRespDTO> result = new ResultVO<>(ResultCodes.OK);
         try{
-            EmergencyExecuteLastTimeRPCResp lastTimeRPCResp = new EmergencyExecuteLastTimeRPCResp();
+            EmergencyExecuteTimeRPCRespDTO lastTimeRPCResp = new EmergencyExecuteTimeRPCRespDTO();
             EmergencyExecuteTimeRespDTO timeRespDTO = emergencyCountService.getLastTimeByDeptId(depId);
             if(null != timeRespDTO){
                 BeanUtils.copyProperties(timeRespDTO,lastTimeRPCResp);
@@ -125,11 +127,40 @@
         return result;
     }
     @Override
-    public ResultVO<EmergencyExecuteLastTimeRPCResp> getExecuteLastTimeByDeptIds(Long depId) {
-        ResultVO<EmergencyExecuteLastTimeRPCResp> result = new ResultVO<>(ResultCodes.OK);
+    public ResultVO<List<EmergencyExecuteDepLevelLasTimeRPCRespDTO>> getExecuteLastTimeByDeptIds(Long depId) {
+        ResultVO<List<EmergencyExecuteDepLevelLasTimeRPCRespDTO>> result = new ResultVO<>(ResultCodes.OK);
         try{
-            EmergencyExecuteLastTimeRPCResp lastTimeRPCResp = new EmergencyExecuteLastTimeRPCResp();
-            EmergencyExecuteTimeRespDTO timeRespDTO = emergencyCountService.getLastTimeByDeptIds(depId);
+            List<EmergencyExecuteDepLevelLasTimeRespDTO> lasTimeRespDTOS = emergencyCountService.getLastTimeByDeptIds(depId);
+            List<EmergencyExecuteDepLevelLasTimeRPCRespDTO> timeRPCRespDTOS = new ArrayList<>();
+
+            for(EmergencyExecuteDepLevelLasTimeRespDTO timeRespDTO:lasTimeRespDTOS){
+                if(timeRespDTO != null){
+                    EmergencyExecuteDepLevelLasTimeRPCRespDTO timeRPCRespDTO = new EmergencyExecuteDepLevelLasTimeRPCRespDTO();
+                    BeanUtils.copyProperties(timeRespDTO,timeRPCRespDTO);
+                    timeRPCRespDTOS.add(timeRPCRespDTO);
+                }
+            }
+            result.setData(timeRPCRespDTOS);
+        }catch (EmergencyException e){
+            result.setCode(e.getCode());
+            result.setMsg(e.getMessage());
+        }catch (Exception e) {
+            result.setCode(EmergencyResultCodes.ERROR.getCode());
+            result.setMsg(EmergencyResultCodes.ERROR.getDesc());
+        }
+        return result;
+    }
+
+    @Override
+    public ResultVO<EmergencyExecuteLastTimeRPCRespDTO> getExecuteLastTimeByDeptIdAndTime(EmergencydrillTimeRPCReq query) {
+        ResultVO<EmergencyExecuteLastTimeRPCRespDTO> result = new ResultVO<>(ResultCodes.OK);
+        EmergencyDrillTimeQuery timeQuery = new EmergencyDrillTimeQuery();
+        timeQuery.setDeptId(query.getDeptId());
+        timeQuery.setYear(query.getYear());
+        timeQuery.setMonth(query.getMonth());
+        try{
+            EmergencyExecuteLastTimeRPCRespDTO lastTimeRPCResp = new EmergencyExecuteLastTimeRPCRespDTO();
+            EmergencyExecuteLastTimeRespDTO timeRespDTO = emergencyCountService.getLastPracticeTimeByDeptIdAndTime(timeQuery);
             if(null != timeRespDTO){
                 BeanUtils.copyProperties(timeRespDTO,lastTimeRPCResp);
             }
@@ -145,6 +176,35 @@
     }
 
     @Override
+    public ResultVO<List<EmergencyExecuteDepLevelLasTimeRPCRespDTO>> getExecuteLastTimeByDeptIdsAndTime(EmergencydrillTimeRPCReq query) {
+        ResultVO<List<EmergencyExecuteDepLevelLasTimeRPCRespDTO>> result = new ResultVO<>(ResultCodes.OK);
+        EmergencyDrillTimeQuery timeQuery = new EmergencyDrillTimeQuery();
+        timeQuery.setDeptId(query.getDeptId());
+        timeQuery.setYear(query.getYear());
+        timeQuery.setMonth(query.getMonth());
+
+        try{
+            List<EmergencyExecuteDepLevelLasTimeRPCRespDTO> levelLasTimeRPCRespDTOS = new ArrayList<>();
+            List<EmergencyExecuteDepLevelLasTimeRespDTO> lasTimeRespDTOS = emergencyCountService.getLastPracticeTimeByDeptIdsAndTime(timeQuery);
+            for(EmergencyExecuteDepLevelLasTimeRespDTO lastTimeRPCRespDTO :lasTimeRespDTOS){
+                if(null != lastTimeRPCRespDTO){
+                    EmergencyExecuteDepLevelLasTimeRPCRespDTO levelLasTimeRPCRespDTO = new EmergencyExecuteDepLevelLasTimeRPCRespDTO();
+                    BeanUtils.copyProperties(lastTimeRPCRespDTO,levelLasTimeRPCRespDTO);
+                    levelLasTimeRPCRespDTOS.add(levelLasTimeRPCRespDTO);
+                }
+            }
+            result.setData(levelLasTimeRPCRespDTOS);
+        }catch (EmergencyException e){
+            result.setCode(e.getCode());
+            result.setMsg(e.getMessage());
+        }catch (Exception e) {
+            result.setCode(EmergencyResultCodes.ERROR.getCode());
+            result.setMsg(EmergencyResultCodes.ERROR.getDesc());
+        }
+        return result;
+    }
+
+    @Override
     public ResultVO<StatisticsDepLevelMonthEexcuteRPCRespDTO> getExecuteCountByDeptIdAndMonth(EmergencyExecuteCountRPCReq query) {
 
         ResultVO<StatisticsDepLevelMonthEexcuteRPCRespDTO> result = new ResultVO<>(ResultCodes.OK);
diff --git a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/controller/EmergencyCountController.java b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/controller/EmergencyCountController.java
index 1eeab81..bd0dd04 100644
--- a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/controller/EmergencyCountController.java
+++ b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/controller/EmergencyCountController.java
@@ -8,6 +8,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;
@@ -90,12 +91,27 @@
      * 根据部门以及子级部门查询最后一次完成应急演练的时间
      */
     @RequestMapping(value = "/getLastTimeByDeptIds",method = RequestMethod.POST)
-    public EmergencyExecuteTimeRespDTO getLastTimeByDeptIds(@RequestBody JSONObject jsonObject){
+    public List<EmergencyExecuteDepLevelLasTimeRespDTO> getLastTimeByDeptIds(@RequestBody JSONObject jsonObject){
         Long deptId = jsonObject.getLong("deptId");
         return emergencyCountService.getLastTimeByDeptIds(deptId);
     }
 
     /**
+     * 根据部门id,年份月份,查询最后一次完成应急演练的时间
+     */
+    @RequestMapping(value = "/getLastTimeByDeptIdAndTime",method = RequestMethod.POST)
+    public EmergencyExecuteLastTimeRespDTO getLastTimeByDeptIdAndTime(@RequestBody EmergencyDrillTimeQuery query){
+        return emergencyCountService.getLastPracticeTimeByDeptIdAndTime(query);
+    }
+    /**
+     * 根据部门以及子级部门,年份月份,查询最后一次完成应急演练的时间
+     */
+    @RequestMapping(value = "/getLastTimeByDeptIdsAndTime",method = RequestMethod.POST)
+    public List<EmergencyExecuteDepLevelLasTimeRespDTO> getLastTimeByDeptIdsAndTime(@RequestBody EmergencyDrillTimeQuery query){
+        return emergencyCountService.getLastPracticeTimeByDeptIdsAndTime(query);
+    }
+
+    /**
      * 根据指定和年份统计演练数据
      * @param query
      * @return
diff --git a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/model/dto/resp/EmergencyExecuteDepLevelLasTimeRespDTO.java b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/model/dto/resp/EmergencyExecuteDepLevelLasTimeRespDTO.java
new file mode 100644
index 0000000..d7ebb61
--- /dev/null
+++ b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/model/dto/resp/EmergencyExecuteDepLevelLasTimeRespDTO.java
@@ -0,0 +1,44 @@
+package com.gkhy.safePlatform.emergency.model.dto.resp;
+
+public class EmergencyExecuteDepLevelLasTimeRespDTO {
+    //部门等级
+    private Byte depLevel;
+    //年
+    private Integer year;
+    //月
+    private Integer month;
+    //最后一次演练时间
+    private String LastPricateTime;
+
+    public Byte getDepLevel() {
+        return depLevel;
+    }
+
+    public void setDepLevel(Byte depLevel) {
+        this.depLevel = depLevel;
+    }
+
+    public Integer getYear() {
+        return year;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
+    public Integer getMonth() {
+        return month;
+    }
+
+    public void setMonth(Integer month) {
+        this.month = month;
+    }
+
+    public String getLastPricateTime() {
+        return LastPricateTime;
+    }
+
+    public void setLastPricateTime(String lastPricateTime) {
+        LastPricateTime = lastPricateTime;
+    }
+}
diff --git a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/model/dto/resp/EmergencyExecuteLastTimeRespDTO.java b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/model/dto/resp/EmergencyExecuteLastTimeRespDTO.java
new file mode 100644
index 0000000..26db663
--- /dev/null
+++ b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/model/dto/resp/EmergencyExecuteLastTimeRespDTO.java
@@ -0,0 +1,58 @@
+package com.gkhy.safePlatform.emergency.model.dto.resp;
+
+public class EmergencyExecuteLastTimeRespDTO {
+    // 部门id
+    private Long depId;
+
+    // 部门级别
+    private Byte depLevel;
+
+    //年份
+    private Integer year;
+
+    //月份
+    private Integer month;
+
+    //左后一次演练的时间
+    private String lastPricticeTime;
+
+    public Long getDepId() {
+        return depId;
+    }
+
+    public void setDepId(Long depId) {
+        this.depId = depId;
+    }
+
+    public Byte getDepLevel() {
+        return depLevel;
+    }
+
+    public void setDepLevel(Byte depLevel) {
+        this.depLevel = depLevel;
+    }
+
+    public Integer getYear() {
+        return year;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
+    public Integer getMonth() {
+        return month;
+    }
+
+    public void setMonth(Integer month) {
+        this.month = month;
+    }
+
+    public String getLastPricticeTime() {
+        return lastPricticeTime;
+    }
+
+    public void setLastPricticeTime(String lastPricticeTime) {
+        this.lastPricticeTime = lastPricticeTime;
+    }
+}
diff --git a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/query/EmergencyDrillTimeQuery.java b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/query/EmergencyDrillTimeQuery.java
new file mode 100644
index 0000000..4ac1688
--- /dev/null
+++ b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/query/EmergencyDrillTimeQuery.java
@@ -0,0 +1,35 @@
+package com.gkhy.safePlatform.emergency.query;
+
+public class EmergencyDrillTimeQuery {
+    //部门id
+    private Long deptId;
+    //年份
+    private Integer year;
+    //月份
+    private Integer month;
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
+    public Integer getYear() {
+        return year;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
+    public Integer getMonth() {
+        return month;
+    }
+
+    public void setMonth(Integer month) {
+        this.month = month;
+    }
+
+}
diff --git a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/repository/EmergencyDrillExecuteInfoRepository.java b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/repository/EmergencyDrillExecuteInfoRepository.java
index 7d31b2a..872ecdb 100644
--- a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/repository/EmergencyDrillExecuteInfoRepository.java
+++ b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/repository/EmergencyDrillExecuteInfoRepository.java
@@ -38,7 +38,7 @@
 
     String getLastTimeByDeptId(@Param("deptId")Long deptId);
 
-    String getLastTimeByDeptIds(@Param("deptIdList")List<Long> deptIdList);
+    List<EmergencyDrillExecuteLastTimeDO> getLastTimeByDeptIds(@Param("deptIdList")List<Long> deptIdList);
 
     List<EmergencyExecuteCountDO> getCountByDeptIdsAndTime(@Param("startTime")String startTime, @Param("endTime")String endTime, @Param("deptIds")List<Long> deptIds);
 
@@ -46,4 +46,7 @@
 
     List<EmergencyExecuteCountDO> getCountByDeptIdAndYear(@Param("year")Integer year, @Param("deptId")Long deptId);
 
+    List<EmergencyDrillExecuteLastTimeDO> getLastTimeByDeptIdsAndTime(@Param("deptIdList")List<Long> deptIdList, @Param("startTime")String startTime, @Param("endTime")String endTime);
+
+    String getLastTimeByDeptIdAndTime(@Param("deptId")Long deptId, @Param("startTime")String startTime, @Param("endTime")String endTime);
 }
diff --git a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/EmergencyCountService.java b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/EmergencyCountService.java
index 7f97f22..b329447 100644
--- a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/EmergencyCountService.java
+++ b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/EmergencyCountService.java
@@ -6,6 +6,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;
@@ -38,7 +39,7 @@
     //根据部门id查询最后一次完成应急演练的时间
     EmergencyExecuteTimeRespDTO getLastTimeByDeptId(Long deptId);
     //根据部门id查询该部门以及其子级部门最后一次完成应急演练的时间
-    EmergencyExecuteTimeRespDTO  getLastTimeByDeptIds(Long deptId);
+    List<EmergencyExecuteDepLevelLasTimeRespDTO>  getLastTimeByDeptIds(Long deptId);
     /**
      * 根据部门id统计指定年份的应急演练数据
      * @param query
@@ -66,5 +67,8 @@
      */
     List<StatisticsDepLevelMonthEexcuteRespDTO> getCountByDeptIdsAndMonth(EmergencyDrillCountQuery query);
 
+    EmergencyExecuteLastTimeRespDTO getLastPracticeTimeByDeptIdAndTime(EmergencyDrillTimeQuery query);
+
+    List<EmergencyExecuteDepLevelLasTimeRespDTO> getLastPracticeTimeByDeptIdsAndTime(EmergencyDrillTimeQuery query);
 
 }
diff --git a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/EmergencyDrillExecuteInfoService.java b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/EmergencyDrillExecuteInfoService.java
index 111f474..06ea050 100644
--- a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/EmergencyDrillExecuteInfoService.java
+++ b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/EmergencyDrillExecuteInfoService.java
@@ -36,11 +36,13 @@
 
     String getLastTimeByDeptId(Long deptId);
 
-    String getLastTimeByDeptIds(List<Long> deptIdList);
+    List<EmergencyDrillExecuteLastTimeDO> getLastTimeByDeptIds(List<Long> deptIdList);
 
     List<EmergencyExecuteCountDO> getCountByDeptIdsAndTime(String startTime, String endTime, List<Long> deptId);
     EmergencyExecuteCountDO getCountByDeptIdAndMonth(Integer year,Integer month, Long deptId);
 
     List<EmergencyExecuteCountDO> getCountByDeptIdAndYear(Integer year, Long deptId);
+    List<EmergencyDrillExecuteLastTimeDO> getLastTimeByDeptIdsAndTime(List<Long> deptIdList,String startTime,String endTime);
 
+    String getLastTimeByDeptIdAndTime(Long deptId, String startTime, String endTime);
 }
diff --git a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/impl/EmergencyDrillExecuteInfoServiceImpl.java b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/impl/EmergencyDrillExecuteInfoServiceImpl.java
index 4eca391..1627f7e 100644
--- a/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/impl/EmergencyDrillExecuteInfoServiceImpl.java
+++ b/emergency/emergency-service/src/main/java/com/gkhy/safePlatform/emergency/service/baseService/impl/EmergencyDrillExecuteInfoServiceImpl.java
@@ -89,12 +89,27 @@
     }
 
     @Override
-    public String getLastTimeByDeptIds(List<Long> deptIdList) {
+    public List<EmergencyDrillExecuteLastTimeDO> getLastTimeByDeptIds(List<Long> deptIdList) {
         if(null == deptIdList || deptIdList.size() == 0){
             throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL);
         }
         return baseMapper.getLastTimeByDeptIds(deptIdList);
     }
+    @Override
+    public List<EmergencyDrillExecuteLastTimeDO> getLastTimeByDeptIdsAndTime(List<Long> deptIdList,String startTime,String endTime) {
+        if(null == deptIdList || deptIdList.size() == 0 || StringUtils.isBlank(startTime) || StringUtils.isBlank(endTime)){
+            throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL);
+        }
+        return baseMapper.getLastTimeByDeptIdsAndTime(deptIdList,startTime,endTime);
+    }
+
+    @Override
+    public String getLastTimeByDeptIdAndTime(Long deptId, String startTime, String endTime) {
+        if(null == deptId || StringUtils.isBlank(startTime) || StringUtils.isBlank(endTime)){
+            throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL);
+        }
+        return baseMapper.getLastTimeByDeptIdAndTime(deptId,startTime,endTime);
+    }
 
     @Override
     public List<EmergencyExecuteCountDO> getCountByDeptIdsAndTime(String startTime, String endTime, List<Long> deptIds) {
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 @@
     }
 
 
+
+
 }
diff --git a/emergency/emergency-service/src/main/resources/config/mapper/emergency/EmergencyDrillExecuteInfoMapper.xml b/emergency/emergency-service/src/main/resources/config/mapper/emergency/EmergencyDrillExecuteInfoMapper.xml
index e6e6f5a..3d18dba 100644
--- a/emergency/emergency-service/src/main/resources/config/mapper/emergency/EmergencyDrillExecuteInfoMapper.xml
+++ b/emergency/emergency-service/src/main/resources/config/mapper/emergency/EmergencyDrillExecuteInfoMapper.xml
@@ -242,16 +242,19 @@
                 AND a.del_flag = 0 AND b.department_id = #{deptId}
     </select>
     <!--根据部门及其子级获取-->
-    <select id="getLastTimeByDeptIds" resultType="java.lang.String">
+    <select id="getLastTimeByDeptIds" resultType="com.gkhy.safePlatform.emergency.entity.EmergencyDrillExecuteLastTimeDO">
         SELECT
-            DATE_FORMAT( max( a.gmt_create ), '%Y-%m-%d %H:%i:%s' ) AS lastTime
+        DATE_FORMAT( max( a.gmt_create ), '%Y-%m-%d %H:%i:%s' ) AS lastTime,
+        b.department_id AS deptId
         FROM
-            `emergency_drill_execute` a
-                INNER JOIN emergency_drill_plan b ON a.drill_plan_id = b.id
-                AND a.del_flag = 0 AND b.department_id IN
+        `emergency_drill_execute` a
+        INNER JOIN emergency_drill_plan b ON a.drill_plan_id = b.id
+        AND a.del_flag = 0 AND b.department_id IN
         <foreach collection="deptIdList" item="deptId" open="(" close=")" separator=",">
             #{deptId}
         </foreach>
+        GROUP BY
+        b.department_id
     </select>
     <select id="getCountByDeptIdsAndTime" resultType="com.gkhy.safePlatform.emergency.entity.EmergencyExecuteCountDO">
         SELECT
@@ -304,6 +307,32 @@
         DATE_FORMAT( a.gmt_create, '%Y-%m' ),
         DATE_FORMAT(a.gmt_create,'%m')
     </select>
-
-
+    <select id="getLastTimeByDeptIdsAndTime" resultType="com.gkhy.safePlatform.emergency.entity.EmergencyDrillExecuteLastTimeDO">
+        SELECT
+        DATE_FORMAT( max( a.gmt_create ), '%Y-%m-%d %H:%i:%s' ) AS lastTime,
+        b.department_id AS deptId
+        FROM
+        `emergency_drill_execute` a
+        INNER JOIN emergency_drill_plan b ON a.drill_plan_id = b.id
+        AND a.del_flag = 0
+        AND DATE( a.gmt_create ) BETWEEN #{startTime}
+        AND #{endTime}
+        AND b.department_id IN
+        <foreach collection="deptIdList" item="deptId" open="(" close=")" separator=",">
+            #{deptId}
+        </foreach>
+        GROUP BY
+        b.department_id
+    </select>
+    <select id="getLastTimeByDeptIdAndTime" resultType="java.lang.String">
+        SELECT
+        DATE_FORMAT( max( a.gmt_create ), '%Y-%m-%d %H:%i:%s' ) AS lastTime
+        FROM
+        `emergency_drill_execute` a
+        INNER JOIN emergency_drill_plan b ON a.drill_plan_id = b.id
+        AND a.del_flag = 0
+        AND DATE( a.gmt_create ) BETWEEN #{startTime}
+        AND #{endTime}
+        AND b.department_id = #{deptId}
+    </select>
 </mapper>
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/schedule/KeepAliveRobot.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/schedule/KeepAliveRobot.java
new file mode 100644
index 0000000..7deed08
--- /dev/null
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/schedule/KeepAliveRobot.java
@@ -0,0 +1,28 @@
+package com.gkhy.safePlatform.equipment.schedule;
+
+import com.gkhy.safePlatform.equipment.service.EquipmentInfoService;
+import com.gkhy.safePlatform.equipment.service.baseService.EquipmentInfoBaseService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+
+@Component("equipmentKeepAlive")
+@EnableScheduling
+@ConditionalOnProperty(prefix = "threadPool.scheduling", name = "enabled", havingValue = "true")
+public class KeepAliveRobot {
+
+    @Autowired
+    private EquipmentInfoBaseService equipmentInfoBaseService;
+
+    // 30m
+    @Scheduled(cron = "0 0/30 * * * ?")
+    public void keepAlive(){
+        //
+        equipmentInfoBaseService.getById(-1L);
+
+    }
+
+}

--
Gitblit v1.9.2