Forráskód Böngészése

预警合并代码

hanzhiwei 2 éve
szülő
commit
f54e02a66a
15 módosított fájl, 686 hozzáadás és 75 törlés
  1. 1 1
      zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/alarm/entity/AlarmEntrty.java
  2. 8 0
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/RemoteLaboratoryService.java
  3. 6 0
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/fallback/RemoteLaboratoryFallbackFactory.java
  4. 1 1
      zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/alarm/domain/UserPhoneInfo.java
  5. 15 0
      zd-modules/zd-airbottle/src/main/java/com/zd/airbottle/service/impl/AlarmRecordServiceImpl.java
  6. 1 1
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/alarm/controller/AlarmController.java
  7. 1 1
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/mqtt/MqttConfig.java
  8. 22 0
      zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/HxpStockServiceImpl.java
  9. 193 4
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabSubjectController.java
  10. 2 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/MessageVO.java
  11. 7 52
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/event/RedisExpiredPhotographListener.java
  12. 96 4
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabSubjectService.java
  13. 1 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabMessageContentServiceImpl.java
  14. 330 9
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabSubjectServiceImpl.java
  15. 2 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/WarningNoticeLogServiceImpl.java

+ 1 - 1
zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/alarm/entity/AlarmEntrty.java

@@ -1,8 +1,8 @@
 package com.zd.algorithm.api.alarm.entity;
 
 import cn.hutool.json.JSONUtil;
-import com.zd.algorithm.api.alarm.domain.UserPhoneInfo;
 import com.zd.model.constant.BaseConstants;
+import com.zd.model.domain.DTO.UserPhoneInfo;
 
 import javax.validation.constraints.NotNull;
 import java.util.List;

+ 8 - 0
zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/RemoteLaboratoryService.java

@@ -11,6 +11,7 @@ import com.zd.laboratory.api.feign.fallback.RemoteLaboratoryFallbackFactory;
 import com.zd.laboratory.api.vo.LabGradeManageWorkVO;
 import com.zd.model.constant.ApplicationConstants;
 import com.zd.model.domain.AjaxResult;
+import com.zd.model.domain.DTO.UserPhoneInfo;
 import com.zd.model.domain.R;
 import com.zd.model.domain.ResultData;
 import com.zd.model.entity.Algorithm;
@@ -572,4 +573,11 @@ public interface RemoteLaboratoryService {
     @ApiOperation("控制设备打开关闭")
     @PostMapping("/subject/manger/controlDevice/{id}/{command}")
     ResultData controlDevice(@PathVariable("id") @ApiParam("设备ID") Long id ,@PathVariable("command") Integer command);
+
+    /**
+     * 根据实验室查询实验室负责人,安全员 身份信息和电话号码
+     */
+    @GetMapping("/subject/selectAdminAndSafeAdmin")
+    @ApiOperation("根据实验室查询实验室负责人,安全员 身份信息和电话号码")
+    ResultData<List<UserPhoneInfo>> selectAdminAndSafeAdminById(@RequestParam("subId") Long subId);
 }

+ 6 - 0
zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/fallback/RemoteLaboratoryFallbackFactory.java

@@ -10,6 +10,7 @@ import com.zd.laboratory.api.entity.OneClickFireDTO;
 import com.zd.laboratory.api.feign.RemoteLaboratoryService;
 import com.zd.laboratory.api.vo.LabGradeManageWorkVO;
 import com.zd.model.domain.AjaxResult;
+import com.zd.model.domain.DTO.UserPhoneInfo;
 import com.zd.model.domain.R;
 import com.zd.model.domain.ResultData;
 import com.zd.model.entity.Algorithm;
@@ -551,6 +552,11 @@ public class RemoteLaboratoryFallbackFactory implements FallbackFactory<RemoteLa
             public ResultData controlDevice(Long id, Integer command) {
                 return ResultData.fail("控制设备失败!"+ cause.getMessage());
             }
+
+            @Override
+            public ResultData<List<UserPhoneInfo>> selectAdminAndSafeAdminById(Long subId) {
+                return ResultData.fail("查询实验室管理员和安全员失败!!"+ cause.getMessage());
+            }
         };
     }
 }

+ 1 - 1
zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/alarm/domain/UserPhoneInfo.java

@@ -1,4 +1,4 @@
-package com.zd.algorithm.api.alarm.domain;
+package com.zd.model.domain.DTO;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 15 - 0
zd-modules/zd-airbottle/src/main/java/com/zd/airbottle/service/impl/AlarmRecordServiceImpl.java

@@ -35,6 +35,7 @@ import com.zd.laboratory.api.feign.RemoteMessageContentService;
 import com.zd.laboratory.api.feign.RemoteSubQueryService;
 import com.zd.model.constant.HttpStatus;
 import com.zd.model.domain.AjaxResult;
+import com.zd.model.domain.DTO.UserPhoneInfo;
 import com.zd.model.domain.R;
 import com.zd.model.domain.ResultData;
 import com.zd.model.entity.HardwareRfidDto;
@@ -234,8 +235,15 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
                     if (illegalRemoval.contains("2")) {
                         String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
                         if (strings != null) {
+                            //获取人员电话信息
+                            ResultData<List<UserPhoneInfo>> listResultData = laboratoryService.selectAdminAndSafeAdminById(warningNoticeLogDto.getSubId());
+                            if(HttpStatus.SUCCESS != listResultData.getCode()){
+                                log.info("获取实验室管理员和安全员信息失败!{}",JSON.toJSONString(listResultData));
+                            }
+                            List<UserPhoneInfo> userPhoneInfoList = listResultData.getData();
                             AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
                             alarmEntrty.setLogId(logId);
+                            alarmEntrty.setUserPhoneInfo(userPhoneInfoList);
                             remoteAlarmService.send(alarmEntrty);
                             log.info("气瓶发送短信打电话消息推送完成!");
                         }
@@ -531,7 +539,14 @@ public class AlarmRecordServiceImpl implements IAlarmRecordService {
                     //短信通知
                     String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
                     if (strings != null) {
+                        //获取人员电话信息
+                        ResultData<List<UserPhoneInfo>> listResultData = laboratoryService.selectAdminAndSafeAdminById(warningNoticeLogDto.getSubId());
+                        if(HttpStatus.SUCCESS != listResultData.getCode()){
+                            log.info("获取实验室管理员和安全员信息失败!{}",JSON.toJSONString(listResultData));
+                        }
+                        List<UserPhoneInfo> userPhoneInfoList = listResultData.getData();
                         AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
+                        alarmEntrty.setUserPhoneInfo(userPhoneInfoList);
                         alarmEntrty.setLogId(logId);
                         remoteAlarmService.send(alarmEntrty);
                         log.info("气瓶超时未归还发送短信打电话消息推送完成!");

+ 1 - 1
zd-modules/zd-algorithm/src/main/java/com/zd/alg/alarm/controller/AlarmController.java

@@ -4,7 +4,6 @@ package com.zd.alg.alarm.controller;
 import com.alibaba.fastjson.JSON;
 import com.zd.alg.alarm.service.IAlarmLogService;
 import com.zd.alg.alarm.utils.AlarmUtil;
-import com.zd.algorithm.api.alarm.domain.UserPhoneInfo;
 import com.zd.algorithm.api.alarm.entity.AlarmEntrty;
 import com.zd.algorithm.api.alarm.entity.AlarmLog;
 import com.zd.algorithm.api.alarm.entity.SendTypes;
@@ -13,6 +12,7 @@ import com.zd.common.core.annotation.PreAuthorize;
 import com.zd.common.core.utils.DateUtils;
 import com.zd.common.core.web.controller.BaseController;
 import com.zd.model.constant.HttpStatus;
+import com.zd.model.domain.DTO.UserPhoneInfo;
 import com.zd.model.domain.ResultData;
 import com.zd.model.domain.per.PerFun;
 import com.zd.model.domain.per.PerPrefix;

+ 1 - 1
zd-modules/zd-algorithm/src/main/java/com/zd/alg/mqtt/MqttConfig.java

@@ -3,12 +3,12 @@ package com.zd.alg.mqtt;
 import com.alibaba.fastjson.JSON;
 import com.zd.alg.alarm.service.IAlarmLogService;
 import com.zd.alg.alarm.utils.AlarmUtil;
-import com.zd.algorithm.api.alarm.domain.UserPhoneInfo;
 import com.zd.algorithm.api.alarm.entity.AlarmEntrty;
 import com.zd.algorithm.api.alarm.entity.AlarmLog;
 import com.zd.algorithm.api.alarm.entity.Routes;
 import com.zd.base.api.feign.RemoteMessageService;
 import com.zd.common.core.utils.DateUtils;
+import com.zd.model.domain.DTO.UserPhoneInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
 import org.slf4j.Logger;

+ 22 - 0
zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/HxpStockServiceImpl.java

@@ -39,6 +39,7 @@ import com.zd.laboratory.api.feign.RemoteLaboratoryService;
 import com.zd.laboratory.api.feign.RemoteMessageContentService;
 import com.zd.model.constant.HttpStatus;
 import com.zd.model.domain.AjaxResult;
+import com.zd.model.domain.DTO.UserPhoneInfo;
 import com.zd.model.domain.R;
 import com.zd.model.domain.ResultData;
 import com.zd.model.domain.per.PerPrefix;
@@ -467,8 +468,15 @@ public class HxpStockServiceImpl implements IHxpStockService {
                 if (illegalRemoval.contains("2")) {
                     String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
                     if (strings != null) {
+                        //获取人员电话信息
+                        ResultData<List<UserPhoneInfo>> listResultData = remoteLaboratoryService.selectAdminAndSafeAdminById(warningNoticeLogDto.getSubId());
+                        if(HttpStatus.SUCCESS != listResultData.getCode()){
+                            logger.info("获取实验室管理员和安全员信息失败!{}",JSON.toJSONString(listResultData));
+                        }
+                        List<UserPhoneInfo> userPhoneInfoList = listResultData.getData();
                         AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
                         alarmEntrty.setLogId(logId);
+                        alarmEntrty.setUserPhoneInfo(userPhoneInfoList);
                         remoteAlarmService.send(alarmEntrty);
                         logger.info("化学品违规带离发送短信打电话消息推送完成!");
                     }
@@ -1200,8 +1208,15 @@ public class HxpStockServiceImpl implements IHxpStockService {
             //短信通知
             String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
             if (strings != null) {
+                //获取人员电话信息
+                ResultData<List<UserPhoneInfo>> listResultData = remoteLaboratoryService.selectAdminAndSafeAdminById(hxpStock.getSubId());
+                if(HttpStatus.SUCCESS != listResultData.getCode()){
+                    logger.info("获取实验室管理员和安全员信息失败!{}",JSON.toJSONString(listResultData));
+                }
+                List<UserPhoneInfo> userPhoneInfoList = listResultData.getData();
                 AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
                 alarmEntrty.setLogId(logId);
+                alarmEntrty.setUserPhoneInfo(userPhoneInfoList);
                 remoteAlarmService.send(alarmEntrty);
                 logger.info("化学品已过期发送短信打电话消息推送完成!");
             }
@@ -1297,8 +1312,15 @@ public class HxpStockServiceImpl implements IHxpStockService {
                         //短信通知
                         String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
                         if (strings != null) {
+                            //获取人员电话信息
+                            ResultData<List<UserPhoneInfo>> listResultData = remoteLaboratoryService.selectAdminAndSafeAdminById(warningNoticeLogDto.getSubId());
+                            if(HttpStatus.SUCCESS != listResultData.getCode()){
+                                logger.info("获取实验室管理员和安全员信息失败!{}",JSON.toJSONString(listResultData));
+                            }
+                            List<UserPhoneInfo> userPhoneInfoList = listResultData.getData();
                             AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
                             alarmEntrty.setLogId(logId);
+                            alarmEntrty.setUserPhoneInfo(userPhoneInfoList);
                             remoteAlarmService.send(alarmEntrty);
                             logger.info("化学品超时未归还发送短信打电话消息推送完成!");
                         }

+ 193 - 4
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabSubjectController.java

@@ -1,24 +1,30 @@
 package com.zd.laboratory.controller;
 
 import cn.hutool.core.util.StrUtil;
+import com.zd.model.domain.DTO.UserPhoneInfo;
 import com.zd.common.core.annotation.Log;
 import com.zd.common.core.annotation.PreAuthorize;
 import com.zd.common.core.log.BusinessType;
+import com.zd.common.core.redis.RedisService;
 import com.zd.common.core.security.TokenService;
 import com.zd.common.core.utils.ExcelUtil;
+import com.zd.common.core.utils.SecurityUtils;
 import com.zd.common.core.web.controller.BaseController;
-import com.zd.laboratory.domain.LabHazard;
-import com.zd.laboratory.domain.LabHazardSubjectRelation;
-import com.zd.laboratory.domain.LabQpSubjectRelation;
-import com.zd.laboratory.domain.LabSubject;
+import com.zd.laboratory.api.dto.CheckSubjectDto;
+import com.zd.laboratory.api.dto.QuerySubListParam;
+import com.zd.laboratory.api.vo.CollegeInfoVo;
+import com.zd.laboratory.domain.*;
 import com.zd.laboratory.domain.vo.LabHazardSubjectRelationVO;
 import com.zd.laboratory.domain.vo.LabSubjectVO;
+import com.zd.laboratory.domain.vo.SubjectUploadTemplate;
+import com.zd.laboratory.domain.vo.SubjectUploadTemplateFail;
 import com.zd.laboratory.mapper.LabSubjectMapper;
 import com.zd.laboratory.mqtt.service.impl.CommonSend;
 import com.zd.laboratory.service.ILabHazardSubjectRelationService;
 import com.zd.laboratory.service.ILabQpSubjectRelationService;
 import com.zd.laboratory.service.ILabSubjectService;
 import com.zd.model.constant.MqttConstants;
+import com.zd.model.domain.AjaxResult;
 import com.zd.model.domain.R;
 import com.zd.model.domain.ResultData;
 import com.zd.model.domain.per.PerFun;
@@ -26,13 +32,18 @@ import com.zd.model.domain.per.PerPrefix;
 import com.zd.model.enums.HazardTypeEnum;
 import com.zd.model.page.TableDataInfo;
 import com.zd.system.api.feign.RemoteUserService;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
+import java.util.concurrent.TimeUnit;
 
 
 /**
@@ -44,6 +55,13 @@ import java.util.Optional;
 @RestController
 @RequestMapping("/subject")
 public class LabSubjectController extends BaseController {
+
+    public static final String tips = "导入注意事项:(未按如下要求填写,会导致数据不能正常导入)\n" +
+            "1、请不要修改此表格的格式,包括插入删除行和列、合并拆分单元格等。请在表格里面逐行录入数据,一次最多导入5000条数据信息。\n" +
+            "2、需要填写的单元格字段规则校验,请按照提示输入。\n" +
+            "3、请不要随意复制单元格,这样会破坏字段规则校验。\n" +
+            "4、带有星号(*)的红色字段均为必填项。\n" +
+            "5、学院、楼栋、安全分类、安全分级的内容需为系统内已存在的数据,否则会导致数据不能正常导入。";
     @Autowired
     private ILabSubjectService labSubjectService;
 
@@ -65,6 +83,11 @@ public class LabSubjectController extends BaseController {
     @Autowired
     private RemoteUserService remoteUserService;
 
+    @Autowired
+    RedisService redisService;
+
+
+
     /**
      * 查询实验室列表
      */
@@ -120,6 +143,12 @@ public class LabSubjectController extends BaseController {
         return ResultData.success(list);
     }
 
+    @GetMapping("/list/listSubAdmin")
+    public ResultData listSubAdmin(LabSubject labSubject) {
+        List<LabSubject> list = labSubjectService.selectLabSubjectListByadminidNotnull(labSubject);
+        return ResultData.success(list);
+    }
+
 
     @PostMapping("/list/listAdminByLayout")
     public ResultData listAdminByLayout(@RequestBody LabSubject labSubject) {
@@ -469,4 +498,164 @@ public class LabSubjectController extends BaseController {
     public ResultData getSubjectName(@PathVariable("labId") Long labId,@PathVariable("userId") Long userId) {
         return ResultData.success(labSubjectService.isAdminOrSafeUser(labId,userId));
     }
+
+    /**
+     * 根据实验室id查询RFID实验室详情
+     * @param subIds
+     * @return
+     */
+    @ApiOperation("根据实验室id查询RFID实验室详情")
+    @GetMapping(value = "/getPositionBySubId")
+    public ResultData<Map<Long, Map<String,Object>>> getPositionBySubId(@RequestParam(value = "subIds") String subIds) {
+        return ResultData.success(labSubjectService.getPositionBySubId(subIds));
+    }
+    /**
+     * 获取实验室的信息(学院。楼栋,楼层,房间号,实验室名称,安全人员,电话号码等)
+     * @Param [subIds]
+     * @Return com.zd.model.domain.ResultData<java.util.List < com.zd.laboratory.api.dto.CheckSubjectDto>>
+     **/
+    @ApiOperation("安全检查获取实验室的信息")
+    @GetMapping(value = "/findSubjectInfoList")
+    public ResultData<List<CheckSubjectDto>> findSubjectInfoList(@RequestParam(value = "subIds",required = false) String subIds) {
+        return ResultData.success(labSubjectService.findSubjectInfoList(subIds));
+    }
+
+    /**
+     * 根据条件查询实验室信息(分页)
+     * @Param [subIds]
+     * @Return com.zd.model.domain.ResultData<java.util.List < com.zd.laboratory.api.dto.CheckSubjectDto>>
+     **/
+    @ApiOperation("根据条件查询实验室信息(分页)")
+    @PostMapping(value = "/conditionSubjectInfo")
+    public TableDataInfo<List<CheckSubjectDto>> conditionSubjectInfo(@RequestBody SubejctInfoBo subejctInfoBo) {
+        startPage(subejctInfoBo.getPageNum(),subejctInfoBo.getPageSize());
+        return getDataTable(labSubjectService.conditionSubjectInfo(subejctInfoBo));
+    }
+
+    /**
+     * 根据条件查询学院信息和学院下实验室数量
+     * @Param [searchValue 学院名称]
+     * @Return com.zd.model.domain.ResultData<java.util.List < com.zd.laboratory.api.dto.CheckSubjectDto>>
+     **/
+    @ApiOperation("根据条件查询学院信息和学院下实验室数量")
+    @GetMapping(value = "/conditionCollegeInfo")
+    public ResultData<List<CollegeInfoVo>> conditionCollegeInfo(@RequestParam(value = "searchValue",required = false) String searchValue) {
+        return ResultData.success(labSubjectService.conditionCollegeInfo(searchValue));
+    }
+
+    /**
+     * 根根据学院ids(部门id) 查询实验室信息(分页)
+     * @Param [deptIds 学院ids ,隔开]
+     * @Return com.zd.model.domain.ResultData<java.util.List < com.zd.laboratory.api.dto.CheckSubjectDto>>
+     **/
+    @ApiOperation("根根据学院ids(部门id) 查询实验室信息(分页)")
+    @PostMapping(value = "/findSubInfoByDeptIds")
+    public TableDataInfo<List<CheckSubjectDto>> findSubInfoByDeptIds(@RequestBody QuerySubListParam querySubListParam) {
+        startPage(querySubListParam.getPageNum(),querySubListParam.getPageSize());
+        return getDataTable(labSubjectService.findSubInfoByDeptIds(querySubListParam));
+    }
+
+    /**
+     * 查询全校实验室数量
+     * @Return com.zd.model.domain.ResultData
+     **/
+    @ApiOperation("查询全校实验室数量")
+    @GetMapping(value = "/getAllSubNum")
+    public ResultData getAllSubNum() {
+        Integer subCount = labSubjectService.getAllSubNum();
+        Integer collegeCount = labSubjectService.hasSubCollegeNum();
+        Map<String,Integer> map = new HashMap<>();
+        map.put("subCount",subCount);
+        map.put("collegeCount",collegeCount);
+        return ResultData.success(map);
+    }
+
+    /**
+     * 查询所有实验室ids
+     * @Return com.zd.model.domain.ResultData
+     **/
+    @ApiOperation("查询所有实验室ids")
+    @GetMapping(value = "/getAllSubIds")
+    public ResultData getAllSubIds() {
+        List<Long> subIds = labSubjectService.getSubIds();
+        return ResultData.success(subIds);
+    }
+
+    /**
+     * 查询所有实验室ids
+     * @Return com.zd.model.domain.ResultData
+     **/
+    @ApiOperation("查询学院实验室ids")
+    @GetMapping(value = "/getCollegeSubIds")
+    public ResultData getCollegeSubIds(@RequestParam(value = "deptIds") Long[] deptIds) {
+        List<Long> subIds = labSubjectService.getCollegeSubIds(deptIds);
+        return ResultData.success(subIds);
+    }
+
+    @PreAuthorize(hasPermi = PerPrefix.LABORATORY_SUBJECT + PerFun.IMPORT)
+    @ApiOperation("导出实验室模板")
+    @PostMapping("/exportSubTemplate")
+    public void exportTemplate(HttpServletResponse response) throws IOException {
+        ExcelUtil<SubjectUploadTemplate> util = new ExcelUtil<>(SubjectUploadTemplate.class);
+        util.exportExcel(response, null, "实验室信息上传模板", tips, "实验室信息-导入模板");
+    }
+
+
+    @ApiOperation("导入实验室信息")
+    @Log(title = "导入实验室信息", businessType = BusinessType.IMPORT)
+    @PreAuthorize(hasPermi = PerPrefix.LABORATORY_SUBJECT + PerFun.IMPORT)
+    @PostMapping("/importSubData")
+    public AjaxResult importData(MultipartFile file) throws Exception {
+        ExcelUtil<SubjectUploadTemplate> util = new ExcelUtil<>(SubjectUploadTemplate.class);
+        List<SubjectUploadTemplate> subjectData = util.importExcel(file.getInputStream(), true);
+        List<SubjectUploadTemplateFail> subjectUploadTemplateFail = labSubjectService.importSubjectData(subjectData);
+        Map<String, Object> resultMap = new HashMap<>();
+        resultMap.put("totalNum", subjectData.size());
+        resultMap.put("successNum", subjectData.size() - subjectUploadTemplateFail.size());
+        resultMap.put("failureNum", subjectUploadTemplateFail.size());
+        resultMap.put("downFile", !subjectUploadTemplateFail.isEmpty());
+        if (!subjectUploadTemplateFail.isEmpty()) {
+            redisService.setCacheObject("subjectUploadTemplateFail" + SecurityUtils.getUserId(), subjectUploadTemplateFail, 1L, TimeUnit.HOURS);
+        }
+        return AjaxResult.success(resultMap);
+    }
+
+    @PreAuthorize(hasPermi = PerPrefix.LABORATORY_SUBJECT + PerFun.IMPORT)
+    @ApiOperation("导出实验室问题数据")
+    @PostMapping("/exportProblemData")
+    public void exportProblemData(HttpServletResponse response) throws Exception {
+        ExcelUtil<SubjectUploadTemplateFail> util2 = new ExcelUtil<>(SubjectUploadTemplateFail.class);
+        List<SubjectUploadTemplateFail> subjectUploadTemplateFail = redisService.getCacheObject("subjectUploadTemplateFail"+SecurityUtils.getUserId());
+        if(subjectUploadTemplateFail.size()>0){
+            util2.exportExcel(response, subjectUploadTemplateFail, "实验室信息问题数据", tips, "实验室信息-未导入问题数据");
+        }
+    }
+
+    /***
+     * 根据实验室id集合查询实验室信息
+     * @param ids
+     * @return
+     */
+    @RequestMapping("/selectLabSubSafeInfoByIds")
+    public List<LabSubjectVO> selectLabSubSafeInfoByIds(@RequestParam("ids") Long[] ids) {
+        return labSubjectService.selectLabSubSafeInfoByIds(ids);
+    }
+
+    /**
+     * 根据楼栋id查询实验室列表
+     */
+    @GetMapping("/buildBySub/list")
+    public ResultData buildBySub(LabSubject labSubject) {
+        List<LabSubject> list = labSubjectService.buildBySub(labSubject);
+        return ResultData.success(list);
+    }
+
+    /**
+     * 根据实验室查询实验室负责人,安全员 身份信息和电话号码
+     */
+    @GetMapping("/selectAdminAndSafeAdmin")
+    public ResultData<List<UserPhoneInfo>> selectAdminAndSafeAdminById(@RequestParam("subId") Long subId) {
+        List<UserPhoneInfo> list = labSubjectService.selectAdminAndSafeAdminById(subId);
+        return ResultData.success(list);
+    }
 }

+ 2 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/domain/vo/MessageVO.java

@@ -1,5 +1,6 @@
 package com.zd.laboratory.domain.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -14,6 +15,7 @@ public class MessageVO {
     @ApiModelProperty("姓名(实验室负责人)")
     private String name;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty("短信通知时间")
     private String messageTime;
 

+ 7 - 52
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/event/RedisExpiredPhotographListener.java

@@ -5,7 +5,6 @@ import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.zd.algorithm.api.alarm.domain.UserPhoneInfo;
 import com.zd.algorithm.api.alarm.entity.AlarmEntrty;
 import com.zd.algorithm.api.alarm.entity.Routes;
 import com.zd.algorithm.api.alarm.entity.SendTypes;
@@ -16,7 +15,6 @@ import com.zd.algorithm.api.forward.vo.AlgorithmWarningVo;
 import com.zd.algorithm.api.speaker.entity.ParamVo;
 import com.zd.algorithm.api.speaker.entity.PlayVo;
 import com.zd.algorithm.api.speaker.feign.RemoteSpeakService;
-import com.zd.base.api.feign.RemoteMessageService;
 import com.zd.common.core.redis.RedisService;
 import com.zd.laboratory.api.dto.CheckSubjectDto;
 import com.zd.laboratory.api.dto.WarningNoticeLogDto;
@@ -26,18 +24,15 @@ import com.zd.laboratory.domain.LabHardware;
 import com.zd.laboratory.domain.WarningConfig;
 import com.zd.laboratory.domain.WarningDetail;
 import com.zd.laboratory.domain.WarningNoticeLog;
-import com.zd.laboratory.domain.vo.LabSubjectVO;
 import com.zd.laboratory.service.*;
 import com.zd.model.constant.BaseConstants;
 import com.zd.model.constant.HttpStatus;
+import com.zd.model.domain.DTO.UserPhoneInfo;
 import com.zd.model.domain.R;
 import com.zd.model.domain.ResultData;
 import com.zd.model.entity.SysFile;
-import com.zd.model.entity.SysUser;
-import com.zd.system.api.feign.RemoteUserService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.connection.Message;
@@ -99,26 +94,12 @@ public class RedisExpiredPhotographListener extends KeyExpirationEventMessageLis
     @Resource
     private RemoteLaboratoryService remoteLaboratoryService;
 
-    @Autowired
-    private RemoteMessageService remoteMessageService;
-
-    @Autowired
-    private ILabSubjectAccessRecordService subjectAccessRecordService;
-
-    @Autowired
-    private RemoteUserService remoteUserService;
-
     private final String testFormat = "【实验室安全智能】{}发生{}{}";
     private final String streamUrlFormat = "rtsp://admin:hk123456@{}:554/h264/ch1/main/av_stream";
 
     @Value("${file.path}")
     private String rootPath;
 
-    /**
-     * Creates new {@link MessageListener} for {@code __keyevent@*__:expired} messages.
-     *
-     * @param listenerContainer must not be {@literal null}.
-     */
     public RedisExpiredPhotographListener(RedisMessageListenerContainer listenerContainer) {
         super(listenerContainer);
     }
@@ -243,10 +224,14 @@ public class RedisExpiredPhotographListener extends KeyExpirationEventMessageLis
                             if (warningConfig.getMessageNotice() != null && l1 == 0) {
                                 //短信通知
                                 warningWay.append("2,");
-                                //获取人员电话信息
-                                List<UserPhoneInfo> userPhoneInfoList = getUserPhoneInfos(warningNoticeLog.getSubId());
                                 String[] strings = Stream.of(phones.toString().split(",")).filter(a -> StrUtil.isNotBlank(a)).collect(Collectors.joining(",")).split(",");
                                 if (strings != null) {
+                                    //获取人员电话信息
+                                    ResultData<List<UserPhoneInfo>> listResultData = remoteLaboratoryService.selectAdminAndSafeAdminById(warningNoticeLogDto.getSubId());
+                                    if(HttpStatus.SUCCESS != listResultData.getCode()){
+                                        log.info("获取实验室管理员和安全员信息失败!{}",JSON.toJSONString(listResultData));
+                                    }
+                                    List<UserPhoneInfo> userPhoneInfoList = listResultData.getData();
                                     AlarmEntrty alarmEntrty = new AlarmEntrty(Routes.NoticePush, strings, SendTypes.SMS.toString(), text);
                                     alarmEntrty.setUserPhoneInfo(userPhoneInfoList);
                                     alarmEntrty.setLogId(warningNoticeLog.getId());
@@ -300,34 +285,4 @@ public class RedisExpiredPhotographListener extends KeyExpirationEventMessageLis
             }
         }
     }
-
-    @NotNull
-    private List<UserPhoneInfo> getUserPhoneInfos(Long subId) {
-        LabSubjectVO subject = labSubjectService.selectLabSubjectVoById(subId);
-        List<UserPhoneInfo> userPhoneInfoList = new ArrayList<>();
-        R<SysUser> sysUserR = remoteUserService.getUserByPhone(subject.getAdminPhone());
-        if (HttpStatus.SUCCESS != sysUserR.getCode()) {
-            log.error("手机号码为:{}用户不存在!", subject.getAdminPhone());
-        }
-        UserPhoneInfo userPhoneInfo = new UserPhoneInfo();
-        userPhoneInfo.setPhone(subject.getAdminPhone());
-        userPhoneInfo.setNickName(sysUserR.getData().getNickName());
-        userPhoneInfo.setRole("实验室负责人");
-        userPhoneInfoList.add(userPhoneInfo);
-        String[] split = subject.getSafeUserPhone().split(",");
-        if(split != null && split.length >0){
-            for (String phoneNumber : split) {
-                R<SysUser> result = remoteUserService.getUserByPhone(phoneNumber);
-                if (HttpStatus.SUCCESS != result.getCode()) {
-                    log.error("手机号码为:{}用户不存在!",phoneNumber);
-                }
-                UserPhoneInfo userPhoneInfo1 = new UserPhoneInfo();
-                userPhoneInfo1.setPhone(phoneNumber);
-                userPhoneInfo1.setNickName(result.getData().getNickName());
-                userPhoneInfo1.setRole("安全责任人");
-                userPhoneInfoList.add(userPhoneInfo1);
-            }
-        }
-        return userPhoneInfoList;
-    }
 }

+ 96 - 4
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabSubjectService.java

@@ -1,12 +1,14 @@
 package com.zd.laboratory.service;
 
+import com.zd.model.domain.DTO.UserPhoneInfo;
+import com.zd.laboratory.api.dto.CheckSubjectDto;
+import com.zd.laboratory.api.dto.QuerySubListParam;
+import com.zd.laboratory.api.vo.CollegeInfoVo;
 import com.zd.laboratory.api.vo.LabSubClassVO;
 import com.zd.laboratory.domain.LabSubject;
-import com.zd.laboratory.domain.vo.LabClassifiedVo;
-import com.zd.laboratory.domain.vo.LabClasstypeVo;
-import com.zd.laboratory.domain.vo.LabSubjectVO;
+import com.zd.laboratory.domain.SubejctInfoBo;
+import com.zd.laboratory.domain.vo.*;
 import com.zd.model.entity.TotalByID;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -317,4 +319,94 @@ public interface ILabSubjectService {
      */
     Integer isAdminOrSafeUser(Long subjectId,Long userId);
 
+    /**
+     * 获取实验室的信息(学院。楼栋,楼层,房间号,实验室名称,安全人员,电话号码等)
+     * @param subIds
+     * @return
+     */
+    List<CheckSubjectDto> findSubjectInfoList(String subIds);
+
+    /**
+     * 根据条件查询实验室信息(分页)
+     * @Param [subejctInfoBo]
+     * @Return java.util.List<com.zd.laboratory.api.dto.CheckSubjectDto>
+     **/
+    List<CheckSubjectDto> conditionSubjectInfo(SubejctInfoBo subejctInfoBo);
+
+    /**
+     * 根据条件查询学院信息和学院下实验室数量
+     * @Param [searchValue 查询条件]
+     * @Return java.util.List<com.zd.laboratory.api.vo.CollegeInfoVo>
+     **/
+    List<CollegeInfoVo> conditionCollegeInfo(String searchValue);
+
+    /**
+     * 根根据学院ids(部门id) 查询实验室信息(分页)
+     * @Param [deptIds 学院ids(部门id)]
+     * @Return java.util.List<com.zd.laboratory.api.dto.CheckSubjectDto>
+     **/
+    List<CheckSubjectDto> findSubInfoByDeptIds(QuerySubListParam querySubListParam);
+
+    /**
+     * 根据实验室id查询RFID实验室详情
+     * @Param [subIds 实验室ids ,隔开]
+     * @Return java.util.Map<java.lang.Long, java.util.Map < java.lang.String, java.lang.Object>>
+     **/
+    Map<Long,Map<String,Object>> getPositionBySubId(String subIds);
+
+    /**
+     * 导入实验室数据
+     * @Param [subjectData]
+     * @Return java.util.List<com.zd.laboratory.domain.vo.SubjectUploadTemplateFail>
+     **/
+    List<SubjectUploadTemplateFail> importSubjectData(List<SubjectUploadTemplate> subjectData);
+
+
+    /**
+     * 查询安全信息
+     *
+     * @param ids
+     * @return
+     */
+    public List<LabSubjectVO> selectLabSubSafeInfoByIds(Long... ids);
+
+    /**
+     * 获取全校实验室总数
+     * @Return java.lang.Integer
+     **/
+    Integer getAllSubNum();
+
+    /**
+     * 存在实验室的学院数量
+     * @return
+     */
+    Integer hasSubCollegeNum();
+
+    /**
+     * 查询所有实验室ids
+     * @Return java.lang.String
+     **/
+    List<Long> getSubIds();
+
+    /**
+     * 根据学院ids查询实验室id列表
+     * @Param [deptIds]
+     * @Return java.util.List<java.lang.Long>
+     **/
+    List<Long> getCollegeSubIds(Long[] deptIds);
+
+
+    /**
+     * 根据楼栋id查询实验室列表
+     * @param labSubject
+     * @return
+     */
+    public List<LabSubject> buildBySub(LabSubject labSubject);
+
+    /**
+     * 根据实验室查询实验室负责人,安全员 身份信息和电话号码
+     * @param subId
+     * @return
+     */
+    List<UserPhoneInfo> selectAdminAndSafeAdminById(Long subId);
 }

+ 1 - 1
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabMessageContentServiceImpl.java

@@ -3,7 +3,7 @@ package com.zd.laboratory.service.impl;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
-import com.zd.algorithm.api.alarm.domain.UserPhoneInfo;
+import com.zd.model.domain.DTO.UserPhoneInfo;
 import com.zd.algorithm.api.alarm.entity.AlarmEntrty;
 import com.zd.algorithm.api.alarm.entity.Routes;
 import com.zd.algorithm.api.alarm.entity.SendTypes;

+ 330 - 9
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabSubjectServiceImpl.java

@@ -1,30 +1,34 @@
 package com.zd.laboratory.service.impl;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.StrUtil;
+import com.zd.model.domain.DTO.UserPhoneInfo;
 import com.zd.common.core.annotation.DataScope;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.utils.*;
+import com.zd.laboratory.api.dto.CheckSubjectDto;
+import com.zd.laboratory.api.dto.QuerySubListParam;
+import com.zd.laboratory.api.vo.CollegeInfoVo;
 import com.zd.laboratory.api.vo.LabSubClassVO;
 import com.zd.laboratory.domain.*;
-import com.zd.laboratory.domain.vo.LabClassifiedVo;
-import com.zd.laboratory.domain.vo.LabClasstypeVo;
-import com.zd.laboratory.domain.vo.LabSubjectVO;
-import com.zd.laboratory.domain.vo.XxpClassifyDetailVO;
-import com.zd.laboratory.interfaces.SysProperties;
+import com.zd.laboratory.domain.vo.*;
 import com.zd.laboratory.mapper.LabHazardSubjectRelationMapper;
 import com.zd.laboratory.mapper.LabQpSubjectRelationMapper;
 import com.zd.laboratory.mapper.LabSubjectMapper;
-import com.zd.laboratory.service.ILabHazardSubjectRelationService;
-import com.zd.laboratory.service.ILabSubjectService;
-import com.zd.laboratory.service.IXxpClassifySubjectService;
+import com.zd.laboratory.service.*;
+import com.zd.model.constant.HttpStatus;
 import com.zd.model.constant.SecurityConstants;
 import com.zd.model.constant.UserConstants;
 import com.zd.model.domain.R;
+import com.zd.model.domain.ResultData;
 import com.zd.model.domain.per.PerPrefix;
+import com.zd.model.entity.SysDept;
 import com.zd.model.entity.SysUser;
 import com.zd.model.entity.TotalByID;
 import com.zd.model.enums.HazardTypeEnum;
 import com.zd.system.api.entity.SysDictData;
+import com.zd.system.api.feign.RemoteDeptService;
 import com.zd.system.api.feign.RemoteUserService;
 import org.apache.commons.collections4.CollectionUtils;
 import org.jsoup.Jsoup;
@@ -35,7 +39,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.File;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -63,6 +66,25 @@ public class LabSubjectServiceImpl implements ILabSubjectService {
     private IXxpClassifySubjectService classifySubjectService;
     @Autowired
     private FileConfigUtils fileConfigUtils;
+
+    @Autowired
+    private RemoteDeptService remoteDeptService;
+
+    @Autowired
+    private ILabMoldService labMoldService;
+
+    @Autowired
+    private ILabSafeClasstypeService labSafeClasstypeService;
+
+    @Autowired
+    private ILabSafeClassifiedService labSafeClassifiedService;
+
+    @Autowired
+    private ILabBuildingService labBuildingService;
+
+    @Autowired
+    private ILabMoldService labmoldService;
+
     /**
      * 查询实验室
      *
@@ -689,4 +711,303 @@ public class LabSubjectServiceImpl implements ILabSubjectService {
     public Integer isAdminOrSafeUser(Long subjectId, Long userId) {
         return labSubjectMapper.isAdminOrSafeUser(subjectId,userId);
     }
+
+    @Override
+    public List<CheckSubjectDto> findSubjectInfoList(String subIds) {
+        Long[] longs = cn.hutool.core.convert.Convert.toLongArray(subIds);
+        return labSubjectMapper.findSubjectInfoList(longs);
+    }
+
+    @Override
+    public List<CheckSubjectDto> conditionSubjectInfo(SubejctInfoBo subejctInfoBo) {
+        List<CheckSubjectDto> checkSubjectDtos = labSubjectMapper.conditionSubjectInfo(subejctInfoBo);
+        return checkSubjectDtos;
+    }
+
+    @Override
+    public List<CollegeInfoVo> conditionCollegeInfo(String searchValue) {
+        List<CollegeInfoVo> collegeInfoVos = labSubjectMapper.conditionCollegeInfo(searchValue);
+        Optional.ofNullable(collegeInfoVos).orElseGet(Collections::emptyList).stream().forEach(i->{
+            int subNum = labSubjectMapper.getCollegeSubCount(i.getDeptId());
+            i.setSubNum(subNum);
+        });
+        List<CollegeInfoVo> collect = collegeInfoVos.stream().filter(collegeInfoVo -> collegeInfoVo.getSubNum() != 0).collect(Collectors.toList());
+        return collect;
+    }
+
+    @Override
+    public List<CheckSubjectDto> findSubInfoByDeptIds(QuerySubListParam querySubListParam) {
+        if (Objects.isNull(querySubListParam.getDeptIds()) || querySubListParam.getDeptIds().length == 0) {
+            return new ArrayList<>();
+        }
+        if(querySubListParam.getDeptId() != null){
+            List<Long> subjectIds = Arrays.stream(querySubListParam.getDeptIds()).filter(deptId -> deptId.equals(querySubListParam.getDeptId())).collect(Collectors.toList());
+            Long[] longs = Convert.toLongArray(subjectIds);
+            querySubListParam.setDeptIds(longs);
+        }
+        return labSubjectMapper.findSubInfoByDeptIds(querySubListParam);
+    }
+
+    @Override
+    public Map<Long, Map<String, Object>> getPositionBySubId(String subIds) {
+        Long[] longs = Convert.toLongArray(subIds.split(","));
+        List<Map<String, Object>> positionBySubId = labSubjectMapper.getPositionBySubId(longs);
+        if (positionBySubId.isEmpty()){
+            return new HashMap<>();
+        }
+        Map<Long,Map<String,Object>> map = new HashMap<>();
+        for (Map<String, Object> stringStringMap : positionBySubId) {
+            Long subId = (Long) stringStringMap.get("subId");
+            map.put(subId,stringStringMap);
+        }
+        return map;
+    }
+
+
+    @Override
+    public Integer getAllSubNum() {
+        return labSubjectMapper.getAllSubNum();
+    }
+
+    @Override
+    public Integer hasSubCollegeNum() {
+        return labSubjectMapper.hasSubCollegeNum();
+    }
+
+    @Override
+    public List<Long> getSubIds() {
+        return labSubjectMapper.getSubIds();
+    }
+
+    @Override
+    public List<Long> getCollegeSubIds(Long[] deptIds) {
+        return labSubjectMapper.getCollegeSubIds(deptIds);
+    }
+
+//    @DataScope(deptAlias = "s", permi = PerPrefix.LABORATORY_SUBJECT)
+    @Override
+    public List <LabSubject> buildBySub(LabSubject labSubject) {
+        return labSubjectMapper.buildBySub(labSubject);
+    }
+
+    @Transactional
+    @Override
+    public List<SubjectUploadTemplateFail> importSubjectData(List<SubjectUploadTemplate> subjectData) {
+        if (StringUtils.isNull(subjectData) || subjectData.size() == 0) {
+            throw new ServiceException("导入实验室数据不能为空!");
+        }
+        List<SubjectUploadTemplateFail> subjectUploadTemplateFail = checkData(subjectData);
+        return subjectUploadTemplateFail;
+    }
+
+    /**
+     * 查询安全信息
+     *
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<LabSubjectVO> selectLabSubSafeInfoByIds(Long... ids) {
+        return labSubjectMapper.selectLabSubSafeInfoByIds(ids);
+    }
+
+
+    private List<SubjectUploadTemplateFail> checkData(List<SubjectUploadTemplate> subjectData) {
+        List<SubjectUploadTemplateFail> failList = new ArrayList<>();
+        //查询所有实验室、学院、楼栋、楼层、安全分类、安全分级信息
+        List<LabSubjectVO> labSubjectVOS = labSubjectMapper.selectLabSubjectVOList(new LabSubject());
+        List<String> subNameList = Optional.ofNullable(labSubjectVOS).orElseGet(Collections::emptyList).stream().map(LabSubjectVO::getName).collect(Collectors.toList());
+
+        //学院
+        R<List<SysDept>> deptList = remoteDeptService.getDeptList(new SysDept());
+        LinkedHashMap<String, List<SysDept>> collegeMap = new LinkedHashMap<>();
+        StringBuffer sb = new StringBuffer();
+        if (HttpStatus.SUCCESS == deptList.getCode() && !deptList.getData().isEmpty()) {
+            for (SysDept dept : deptList.getData()) {
+                sb.append(dept.getDeptId()).append(",");
+            }
+            collegeMap = Optional.ofNullable(deptList.getData()).orElseGet(Collections::emptyList).stream().filter(sysDept -> sysDept.getDeptName() != null).collect(Collectors.groupingBy(SysDept::getDeptName, LinkedHashMap::new, Collectors.toList()));
+        }
+
+        //楼栋
+        String deptIds = sb.substring(0, sb.length() - 1);
+        ResultData<List<SysDept>> resultData = remoteDeptService.getDeptListByDeptIds(deptIds);
+        LinkedHashMap<String, List<SysDept>> buildMap = new LinkedHashMap<>();
+        if (HttpStatus.SUCCESS == resultData.getCode() && !resultData.getData().isEmpty()) {
+            buildMap = Optional.ofNullable(resultData.getData()).orElseGet(Collections::emptyList).stream().filter(sysDept -> sysDept.getDeptName() != null).collect(Collectors.groupingBy(SysDept::getDeptName, LinkedHashMap::new, Collectors.toList()));
+        }
+
+        //楼层
+        List<LabBuildingInfoVO> buildLlist = labBuildingService.labInfoLayout(new LabBuildingVO());
+        LinkedHashMap<String, List<LabBuilding>> floorMap = Optional.ofNullable(buildLlist).orElseGet(Collections::emptyList).stream().filter(labBuilding -> labBuilding.getName() != null).collect(Collectors.groupingBy(LabBuilding::getName, LinkedHashMap::new, Collectors.toList()));
+
+        //分类
+        List<LabSafeClasstype> labSafeClasstypes = labSafeClasstypeService.selectLabSafeClasstypeList(new LabSafeClasstype());
+        LinkedHashMap<String, List<LabSafeClasstype>> typeNameMap = Optional.ofNullable(labSafeClasstypes).orElseGet(Collections::emptyList).stream().filter(labSafeClasstype -> labSafeClasstype.getTypeName() != null).collect(Collectors.groupingBy(LabSafeClasstype::getTypeName, LinkedHashMap::new, Collectors.toList()));
+
+        //分级
+        List<LabSafeClassified> labSafeClassifieds = labSafeClassifiedService.selectLabSafeClassifiedList(new LabSafeClassified());
+        LinkedHashMap<String, List<LabSafeClassified>> levelMap = Optional.ofNullable(labSafeClassifieds).orElseGet(Collections::emptyList).stream().filter(labSafeClassified -> labSafeClassified.getClassifiedName() != null).collect(Collectors.groupingBy(LabSafeClassified::getClassifiedName, LinkedHashMap::new, Collectors.toList()));
+
+        //实验室类型
+        List<LabMold> labMolds = labmoldService.selectLabMoldList(new LabMold());
+        LinkedHashMap<String, List<LabMold>> moldMap = Optional.ofNullable(labMolds).orElseGet(Collections::emptyList).stream().filter(labMold -> labMold.getMoldName() != null).collect(Collectors.groupingBy(LabMold::getMoldName, LinkedHashMap::new, Collectors.toList()));
+
+        for (SubjectUploadTemplate subjectUploadTemplate : subjectData) {
+            SubjectUploadTemplateFail subjectUploadTemplateFail = new SubjectUploadTemplateFail();
+            StringBuffer failStr = new StringBuffer();
+            LabSubject labSubject = new LabSubject();
+            // 校验是否装入错误数据
+            boolean flag = Boolean.TRUE;
+            //验证实验室名称
+            if (StringUtils.isBlank(subjectUploadTemplate.getName())) {
+                failStr.append("实验室名称不能为空、");
+                flag = false;
+            } else {
+                if (!subNameList.isEmpty() && subNameList.contains(subjectUploadTemplate.getName())) {
+                    failStr.append("实验室名称重复、");
+                    flag = false;
+                }
+            }
+
+            //验证房间号
+            if (StringUtils.isBlank(subjectUploadTemplate.getRoom())) {
+                failStr.append("房间号不能为空、");
+                flag = false;
+            }
+
+            //验证学院
+            if (StringUtils.isBlank(subjectUploadTemplate.getDeptName())) {
+                failStr.append("学院不能为空、");
+                flag = false;
+            } else {
+                if (!collegeMap.isEmpty() && collegeMap.containsKey(subjectUploadTemplate.getDeptName())) {
+                    List<SysDept> sysDepts = collegeMap.get(subjectUploadTemplate.getDeptName());
+                    labSubject.setDeptId(sysDepts.get(0).getDeptId());
+                } else {
+                    failStr.append("学院信息不存在、");
+                    flag = false;
+                }
+            }
+
+            //验证楼栋
+            if (StringUtils.isBlank(subjectUploadTemplate.getBuildName())) {
+                failStr.append("楼栋信息不能为空、");
+                flag = false;
+            } else {
+                if (!buildMap.isEmpty() && buildMap.containsKey(subjectUploadTemplate.getBuildName())) {
+                    List<SysDept> sysDepts = buildMap.get(subjectUploadTemplate.getBuildName());
+                    labSubject.setBuildId(sysDepts.get(0).getDeptId());
+                } else {
+                    failStr.append("楼栋信息不存在、");
+                    flag = false;
+                }
+            }
+
+            //验证楼层
+            if (StringUtils.isBlank(subjectUploadTemplate.getFloorName())) {
+                failStr.append("楼层信息不能为空、");
+                flag = false;
+            } else {
+                if (!floorMap.isEmpty() && floorMap.containsKey(subjectUploadTemplate.getFloorName())) {
+                    List<LabBuilding> labBuildings = floorMap.get(subjectUploadTemplate.getFloorName());
+                    List<LabBuilding> buildings = labBuildings.stream().filter(i -> i.getDeptId().equals(labSubject.getBuildId())).collect(Collectors.toList());
+                    if (!buildings.isEmpty()) {
+                        labSubject.setFloorId(buildings.get(0).getId());
+                    }else {
+                        failStr.append("楼层信息与学院楼栋楼层不匹配、");
+                        flag = false;
+                    }
+                } else {
+                    failStr.append("楼层信息不存在、");
+                    flag = false;
+                }
+            }
+
+            //验证分类
+            if (StringUtils.isBlank(subjectUploadTemplate.getTypeName())) {
+                failStr.append("安全分类信息不能为空、");
+                flag = false;
+            } else {
+                if (!typeNameMap.isEmpty() && typeNameMap.containsKey(subjectUploadTemplate.getTypeName())) {
+                    List<LabSafeClasstype> labSafeClasstypes1 = typeNameMap.get(subjectUploadTemplate.getTypeName());
+                    labSubject.setTypeId(labSafeClasstypes1.get(0).getId());
+                } else {
+                    failStr.append("安全分类信息不存在、");
+                    flag = false;
+                }
+            }
+
+            //验证分级
+            if (StringUtils.isBlank(subjectUploadTemplate.getClassifiedName())) {
+                failStr.append("安全分级信息不能为空、");
+                flag = false;
+            } else {
+                if (!levelMap.isEmpty() && levelMap.containsKey(subjectUploadTemplate.getClassifiedName())) {
+                    List<LabSafeClassified> labSafeClassifieds1 = levelMap.get(subjectUploadTemplate.getClassifiedName());
+                    labSubject.setLevel(labSafeClassifieds1.get(0).getId());
+                } else {
+                    failStr.append("安全分级信息不存在、");
+                    flag = false;
+                }
+            }
+
+            //实验室类型
+            if (StringUtils.isBlank(subjectUploadTemplate.getMoldName())) {
+                failStr.append("实验室类型不能为空、");
+                flag = false;
+            } else {
+                if (!moldMap.isEmpty() && moldMap.containsKey(subjectUploadTemplate.getMoldName())) {
+                    List<LabMold> labMoldlist = moldMap.get(subjectUploadTemplate.getMoldName());
+                    labSubject.setMoldId(labMoldlist.get(0).getId());
+                } else {
+                    failStr.append("实验室类型不存在、");
+                    flag = false;
+                }
+            }
+
+            if (flag) {
+                BeanUtils.copyProperties(subjectUploadTemplate, labSubject);
+                labSubject.setCreateTime(DateTime.now());
+                labSubject.setUserId(SecurityUtils.getUserId());
+                labSubject.setCreateBy(SecurityUtils.getUsername());
+                labSubjectMapper.insertLabSubject(labSubject);
+            }else {
+                BeanUtils.copyProperties(subjectUploadTemplate, subjectUploadTemplateFail);
+                subjectUploadTemplateFail.setFailCause(failStr);
+                failList.add(subjectUploadTemplateFail);
+            }
+        }
+        return failList;
+    }
+
+    @Override
+    public List<UserPhoneInfo> selectAdminAndSafeAdminById(Long subId) {
+        LabSubject labSubject = selectLabSubjectById(subId);
+        List<UserPhoneInfo> userPhoneInfoList = new ArrayList<>();
+        R<SysUser> sysUserR = userService.getUserInfoByUserId(labSubject.getAdminId(),SecurityConstants.INNER);
+        if (HttpStatus.SUCCESS == sysUserR.getCode()) {
+            SysUser sysUser = sysUserR.getData();
+            UserPhoneInfo userPhoneInfo = new UserPhoneInfo();
+            userPhoneInfo.setPhone(sysUser.getPhonenumber());
+            userPhoneInfo.setNickName(sysUser.getNickName());
+            userPhoneInfo.setRole("实验室负责人");
+            userPhoneInfoList.add(userPhoneInfo);
+        }
+        String[] split = labSubject.getSafeUserId().split(",");
+        if(split != null && split.length >0){
+            for (String userId : split) {
+                R<SysUser> userR = userService.getUserInfoByUserId(Long.valueOf(userId), SecurityConstants.INNER);
+                if (HttpStatus.SUCCESS == userR.getCode()) {
+                    SysUser user = userR.getData();
+                    UserPhoneInfo userPhoneInfo1 = new UserPhoneInfo();
+                    userPhoneInfo1.setPhone(user.getPhonenumber());
+                    userPhoneInfo1.setNickName(user.getNickName());
+                    userPhoneInfo1.setRole("安全责任人");
+                    userPhoneInfoList.add(userPhoneInfo1);
+                }
+            }
+        }
+        return userPhoneInfoList;
+    }
 }

+ 2 - 1
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/WarningNoticeLogServiceImpl.java

@@ -1,5 +1,6 @@
 package com.zd.laboratory.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -76,7 +77,7 @@ public class WarningNoticeLogServiceImpl extends ServiceImpl<WarningNoticeLogMap
         Optional.ofNullable(alarmLogs).orElseGet(Collections::emptyList).forEach(alarmLog -> {
             MessageVO messageVO = new MessageVO();
             messageVO.setName(alarmLog.getNickName()+"("+alarmLog.getRoleName()+")");
-            messageVO.setMessageTime(alarmLog.getCreateTime().toString());
+            messageVO.setMessageTime(DateUtil.format(alarmLog.getCreateTime(),"yyyy-MM-dd HH:mm:ss"));
             messageVO.setIsSuccess("成功".equals(alarmLog.getStatus())?1:0);
             messageVOList.add(messageVO);
         });