459242451@qq.com 3 年 前
コミット
36ed9a17a4
25 ファイル変更277 行追加163 行削除
  1. 0 63
      Dockerfile
  2. 35 19
      README.md
  3. 3 3
      pom.xml
  4. 5 6
      ruoyi-admin/Dockerfile
  5. BIN
      ruoyi-admin/Shanghai
  6. 1 1
      ruoyi-admin/pom.xml
  7. 19 10
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/NoticeInfoListiner.java
  8. 16 16
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhdd/IncidentController.java
  9. 25 22
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhdd/PlanController.java
  10. 13 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhdd/ResourceController.java
  11. 1 1
      ruoyi-admin/start.sh
  12. 1 4
      ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
  13. 10 3
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/Resource.java
  14. 1 1
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/MessagePushBo.java
  15. 4 0
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/ResourceBo.java
  16. 3 1
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/vo/ResourceVo.java
  17. 3 0
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/mapper/ResourceDetailMapper.java
  18. 3 0
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/IResourceDetailService.java
  19. 85 7
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/DhServiceImpl.java
  20. 10 2
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/IncidentServiceImpl.java
  21. 4 2
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/IncidentTaskServiceImpl.java
  22. 6 0
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/ResourceDetailServiceImpl.java
  23. 2 1
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/ResourceServiceImpl.java
  24. 9 0
      ruoyi-zhdd/src/main/resources/mapper/zhdd/ResourceDetailMapper.xml
  25. 18 0
      sql/20211209修改.sql

+ 0 - 63
Dockerfile

@@ -1,63 +0,0 @@
-# Version 0.1
-# 基础镜像
-FROM centos:7
-# 维护者信息
-MAINTAINER XinTong
-VOLUME /tmp
-#自动安装依赖
-RUN  cd /etc/yum.repos.d/ \
-    && yum -y install wget \
-    && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
-    && yum clean all \
-    && yum makecache \
-    && yum update -y \
-    &&  yum -y  install nginx  \
-    &&  yum -y  install  java-1.8.0-openjdk java-1.8.0-openjdk-devel  \
-    &&  yum -y  install redis    \
-#这里可以设置 域名
-# 可以送本地加载 使用ADD 也可以直接写
-   && echo "server {  \
-                       listen       81; \
-                       location ^~ /prod-api { \
-                      proxy_pass              http://127.0.0.1:8090/api; \
-                      proxy_set_header        Host 127.0.0.1; \
-                      proxy_set_header        X-Real-IP \$remote_addr; \
-                      proxy_set_header        X-Forwarded-For \$proxy_add_x_forwarded_for; \
-                  } \
-                  #解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 \
-                  location / { \
-                     root   /var/www/html/; \
-                      index  index.html index.htm; \
-                      if (!-e \$request_filename) { \
-                          rewrite ^(.*)\$ /index.html?s=\$1 last; \
-                          break; \
-                      } \
-                  } \
-                  access_log  /var/log/nginx/access.log ; \
-              } " > /etc/nginx/conf.d/default.conf  \
-
- # 设置启动脚本
-     && touch /etc/init.d/start.sh \
-     && touch yjzh.log \
-     && chmod +x /etc/init.d/start.sh \
-     && echo "#!/bin/bash  " >> /etc/init.d/start.sh \
-     && echo "/usr/bin/redis-server  & " >> /etc/init.d/start.sh \
-     && echo "/usr/sbin/nginx  -c /etc/nginx/nginx.conf" >> /etc/init.d/start.sh \
-     && echo " java -jar /app.jar   " >> /etc/init.d/start.sh \
-     &&  mkdir  -p  /var/www \
-     &&  mkdir -p /var/www/html
-# 前端迁移到系统文件中 默认是80端口 同级目录下的html地址
-ADD  ruoyi-ui/dist /var/www/html/
-# 拷贝相关的jar包
-ADD ruoyi-admin/target/ruoyi-admin.jar app.jar
-EXPOSE  80  8090 81
-ENTRYPOINT /bin/sh -c   /etc/init.d/start.sh
-
-#启动脚本
-#docker rmi `docker images|grep none| awk '{print $3}'`
-
-#docker build -t docker.xt.wenhq.top:8083/docker_r/yjzh_test:1.0 .
-#docker run --privileged=true  -itd --name yjzh_test -v /sys/fs/cgroup:/sys/fs/cgroup:ro  -p 81:81 -p 8080:8080 -p 82:80  959e5d6a26e7
-
-# 删除镜像
-#curl -I -X DELETE http://docker.xt.wenhq.top:8083/v2/docker_r/yjzh_test/manifests/sha256:af0a8819

+ 35 - 19
README.md

@@ -34,14 +34,14 @@ RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级(不兼
 
 使用框架前请仔细阅读文档重点注意事项
 <br>
->[初始化项目 必看](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117)
->>[https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117)
-> 
+> [初始化项目 必看](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117)
+>> [https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于初始化项目?sort_id=4164117)
+>
 >[部署项目 必看](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于应用部署?sort_id=4219382)
->>[https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于应用部署?sort_id=4219382](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于应用部署?sort_id=4219382)
-> 
+>> [https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于应用部署?sort_id=4219382](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/关于应用部署?sort_id=4219382)
+>
 >[参考文档 Wiki](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages)
->>[https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages)
+>> [https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages)
 
 ## 软件架构图
 
@@ -76,17 +76,13 @@ RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级(不兼
 切换数据库需要修改generator模块中GenTableColumnMapper.xml和GenTableMapper.xml,找到其中的mysql和postgresql标识
 
 ## 测试环境参数
+
 k8s master节点:
-ip: 10.11.96.31
-登录: root/Lw123456
+ip: 10.11.96.31 登录: root/Lw123456
 
 > pg数据库:
 
-ip: 10.11.96.34
-端口:16430
-用户:postgres
-密码:Superman@2021
-数据库:sqjt
+ip: 10.11.96.34 端口:16430 用户:postgres 密码:Superman@2021 数据库:sqjt
 
 > nacos:
 
@@ -95,14 +91,11 @@ http://10.11.96.37:8848/nacos
 
 > redis:
 
-ip: 10.11.96.37
-端口: 6379
-密码:superman
+ip: 10.11.96.37 端口: 6379 密码:superman
 
 > 应用服务器:
 
-10.11.96.40
-登录: root/Lw123456
+10.11.96.40 登录: root/Lw123456
 
 > VPN:
 
@@ -114,10 +107,33 @@ test02/12345678
 http://sqpc.xt.wenhq.top:8083/
 
 > 宿迁windows上传镜像部署
+
 ```
 docker pull docker.xt.wenhq.top:8083/docker_r/yjzh_server:3.1
-docker tag d2adf87245e4 10.11.208.18:18080/hses/yjzh_server:v3.1
+docker tag docker.xt.wenhq.top:8083/docker_r/yjzh_server:3.1  10.11.208.18:18080/hses/yjzh_server:v3.1
 docker push 10.11.208.18:18080/hses/yjzh_server:v3.1
 ```
 
+```
+# 业务系统
+cp -r /Users/huangcheng/workspace/xitong/front/squi/dist/* /Users/huangcheng/workspace/xitong/front/yjzh-web/webfile/sqpc/
+# 大屏端
+cp -r /Users/huangcheng/workspace/xitong/front/squi-HD/dist/* /Users/huangcheng/workspace/xitong/front/yjzh-web/webfile/sqpchd/
+# 大华
+cp -r /Users/huangcheng/workspace/xitong/front/squi-DAHUA/* /Users/huangcheng/workspace/xitong/front/yjzh-web/webfile/sqdh/
+# docker build&push
+docker build -t docker.xt.wenhq.top:8083/docker_r/yjzh-web:latest /Users/huangcheng/workspace/xitong/front/yjzh-web/.
+docker push docker.xt.wenhq.top:8083/docker_r/yjzh-web:latest
+```
+
+```
+docker pull docker.xt.wenhq.top:8083/docker_r/yjzh-web:latest
+docker tag docker.xt.wenhq.top:8083/docker_r/yjzh-web:latest  10.11.208.18:18080/hses/yjzh-web:v1.1
+docker push 10.11.208.18:18080/hses/yjzh-web:v1.1
+```
+
+> 内网系统访问地址
+
+http://10.11.208.12:31000/sqpchd/#/home
+http://10.11.208.12:31000/sqpc/#/home
 

+ 3 - 3
pom.xml

@@ -42,9 +42,9 @@
         <minio.version>8.3.0</minio.version>
 
         <!-- docker 配置 -->
-        <docker.registry.url>localhost</docker.registry.url>
-        <docker.registry.host>http://${docker.registry.url}:2375</docker.registry.host>
-        <docker.namespace>ruoyi</docker.namespace>
+        <docker.registry.url>docker.xt.wenhq.top</docker.registry.url>
+        <docker.registry.host>http://${docker.registry.url}:8083</docker.registry.host>
+        <docker.namespace>docker_r</docker.namespace>
         <docker.plugin.version>1.2.2</docker.plugin.version>
 
         <alicloud.version>2.2.1.RELEASE</alicloud.version>

+ 5 - 6
ruoyi-admin/Dockerfile

@@ -1,4 +1,5 @@
 FROM anapsix/alpine-java:8_server-jre_unlimited
+#FROM openjdk:8-jdk-alpine
 
 MAINTAINER XinTong
 
@@ -8,13 +9,10 @@ WORKDIR /xintong/server
 
 EXPOSE 8080
 ADD ./target/ruoyi-admin.jar ./app.jar
+ADD ./Shanghai /home/Shanghai
 ADD start.sh ./start.sh
-RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
-    && apk add --no-cache tzdata \
-    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
-    && echo "Asia/Shanghai" > /etc/timezone \
-    && apk del tzdata \
-    && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* $HOME/.cache
+RUN ln -sf /home/Shanghai /etc/localtime \
+    && echo "Asia/Shanghai" > /etc/timezone
 RUN chmod +x ./start.sh
 ENTRYPOINT ["./start.sh"]
 
@@ -48,3 +46,4 @@ ENTRYPOINT ["./start.sh"]
 #docker pull docker.xt.wenhq.top:8083/docker_r/yjzh_server:1.0
 
 #docker images|grep none|awk '{print $3}'|xargs docker rmi -f
+#docker rmi -f $(docker images --filter “dangling=true” -q --no-trunc)

BIN
ruoyi-admin/Shanghai


+ 1 - 1
ruoyi-admin/pom.xml

@@ -116,7 +116,7 @@
                 <artifactId>docker-maven-plugin</artifactId>
                 <version>${docker.plugin.version}</version>
                 <configuration>
-                    <imageName>${docker.namespace}/ruoyi-server:${project.version}</imageName>
+                    <imageName>${docker.namespace}/yjzh_server:3.1</imageName>
                     <dockerDirectory>${project.basedir}</dockerDirectory>
                     <dockerHost>${docker.registry.host}</dockerHost>
                     <registryUrl>${docker.registry.url}</registryUrl>

+ 19 - 10
ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/NoticeInfoListiner.java

@@ -30,6 +30,7 @@ import org.springframework.stereotype.Component;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -60,6 +61,12 @@ public class NoticeInfoListiner {
     @Bean
     public void sendNotice() {
         RedisUtils.subscribe(Constants.NOTICE_PUSH, String.class, msg -> {
+            try {
+                TimeUnit.MILLISECONDS.sleep(1000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            log.info("订阅事件消息 => {}", msg);
             // 查询事件信息并发送消息
             MessagePushBo messagePushBo = new MessagePushBo();
             String type = msg.substring(0, 1);
@@ -75,13 +82,14 @@ public class NoticeInfoListiner {
                 title = StrUtil.concat(true, "应急事件:", incidentVo.getName());
                 synopsis = "请查看应急事件";
                 text = StrUtil.concat(true, incidentVo.getAddr(), "发生应急事件,请关注消息,做好应急准备");
-                incidentProcess.setDes("事件报");
+                incidentProcess.setDes("事件报");
                 incidentProcess.setIncidentStatus(1);
                 incidentProcess.setIncidentId(msg.substring(1));
                 messageUser = incidentVo.getExprJson();
             } else if ("B".equals(type)) {
                 // 查询处置方案
                 IncidentTaskVo incidentTaskVo = incidentTaskService.queryById(msg.substring(1));
+                log.info("查询的处置方案:{}", incidentTaskVo);
                 IncidentVo incidentVo = incidentService.queryById(incidentTaskVo.getIncidentId());
                 title = "应急处置";
                 synopsis = "请查看应急处置方案";
@@ -128,7 +136,6 @@ public class NoticeInfoListiner {
                 }
                 log.debug("发送短信:{}", smsOutboxes);
                 log.info("发送消息体 => {}", messagePushBo);
-                log.info("订阅事件消息 => {}", msg);
             }
         });
     }
@@ -141,14 +148,16 @@ public class NoticeInfoListiner {
             Integer incidentStatus = msg.getInt("incidentStatus");
             String des = msg.getStr("des");
             IncidentProcess incidentProcess = new IncidentProcess();
-            if (incidentStatus == 2) {
-                des = "转为事件";
-            } else if (incidentStatus == 1) {
-                des = "事件续报";
-            } else if (incidentStatus == 4) {
-                des = "事件归档";
-            } else if (incidentStatus == 5) {
-                des = "事件忽略";
+            if (StrUtil.isBlank(des)) {
+                if (incidentStatus == 2) {
+                    des = "转为事件";
+                } else if (incidentStatus == 1) {
+                    des = "事件续报";
+                } else if (incidentStatus == 4) {
+                    des = "事件归档";
+                } else if (incidentStatus == 5) {
+                    des = "事件忽略";
+                }
             }
             incidentProcess.setDes(des);
             incidentProcess.setIncidentStatus(incidentStatus);

+ 16 - 16
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhdd/IncidentController.java

@@ -35,14 +35,7 @@ import com.ruoyi.zhdd.domain.vo.IncidentVo;
 import com.ruoyi.zhdd.domain.vo.PlanFileVo;
 import com.ruoyi.zhdd.domain.vo.PlanVo;
 import com.ruoyi.zhdd.feign.FeignNoticeInfoService;
-import com.ruoyi.zhdd.service.IIncidentProcessService;
-import com.ruoyi.zhdd.service.IIncidentService;
-import com.ruoyi.zhdd.service.IIncidentTaskCommandService;
-import com.ruoyi.zhdd.service.IIncidentTaskPersonService;
-import com.ruoyi.zhdd.service.IIncidentTaskService;
-import com.ruoyi.zhdd.service.IPlanFileService;
-import com.ruoyi.zhdd.service.IPlanService;
-import com.ruoyi.zhdd.service.IPlanTaskService;
+import com.ruoyi.zhdd.service.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -100,6 +93,8 @@ public class IncidentController extends BaseController {
 
     private final FeignNoticeInfoService feignNoticeInfoService;
 
+    private final IResourceDetailService resourceDetailService;
+
     @Value("${spring.profiles.active}")
     private String env;
 
@@ -136,6 +131,9 @@ public class IncidentController extends BaseController {
         Map<String, Object> map = new HashMap<>();
         List<PlanFileVo> planFileVos = new ArrayList<>();
         IncidentVo incidentVo = iIncidentService.queryById(id);
+        if (incidentVo == null) {
+            return AjaxResult.success(map);
+        }
         map.put("baseInfo", incidentVo);
         // 查询所属预案
         List<PlanVo> voOne = planService.listVo(Wrappers.<Plan>lambdaQuery().eq(Plan::getType, incidentVo.getType()).eq(Plan::getCreateDept, incidentVo.getCreateDept()));
@@ -161,33 +159,35 @@ public class IncidentController extends BaseController {
                         Integer total = o.getInt("total");
                         if (total > 0) {
                             JSONArray jsonArray = JSONUtil.parseObj(o.getJSONArray("rows").get(0)).getJSONArray("messageReadInfoList");
-                            String unMessage = "";
-                            String message = "";
+                            StringBuilder unMessage = new StringBuilder();
+                            StringBuilder message = new StringBuilder();
                             for (Object o1 : jsonArray) {
                                 JSONObject jsonObject = JSONUtil.parseObj(o1);
                                 if ("0".equals(jsonObject.getStr("readState"))) {
                                     // 未读
-                                    unMessage = jsonObject.getStr("nickName") + "、";
+                                    unMessage.append(jsonObject.getStr("nickName")).append("、");
                                 } else if ("1".equals(jsonObject.getStr("readState"))) {
                                     // 已读
-                                    message = jsonObject.getStr("nickName") + "、";
+                                    message.append(jsonObject.getStr("nickName")).append("、");
                                 }
                             }
                             // 循环完之后,去除最后一个顿号
-                            if (StrUtil.isNotBlank(unMessage)) {
+                            /*if (StrUtil.isNotBlank(unMessage)) {
                                 unMessage = StrUtil.removeSuffix(unMessage, "、");
                             }
                             if (StrUtil.isNotBlank(message)) {
                                 message = StrUtil.removeSuffix(message, "、");
-                            }
-                            incidentProcess.setUserRead(message);
-                            incidentProcess.setUserUnRead(unMessage);
+                            }*/
+                            incidentProcess.setUserRead(message.toString());
+                            incidentProcess.setUserUnRead(unMessage.toString());
                         }
                     }
                 }
             }
         }
         map.put("process", list);
+        // 物资使用情况
+        map.put("resource", resourceDetailService.queryResourceAvailable());
         return AjaxResult.success(map);
     }
 

+ 25 - 22
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhdd/PlanController.java

@@ -1,33 +1,36 @@
 package com.ruoyi.web.controller.zhdd;
 
-import java.util.List;
-import java.util.Arrays;
-import java.util.concurrent.TimeUnit;
-
-import com.ruoyi.zhdd.domain.bo.PlanFileBo;
-import com.ruoyi.zhdd.service.IPlanFileService;
-import lombok.RequiredArgsConstructor;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.constraints.*;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.validation.annotation.Validated;
-import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.validate.AddGroup;
 import com.ruoyi.common.core.validate.EditGroup;
 import com.ruoyi.common.core.validate.QueryGroup;
 import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.zhdd.domain.vo.PlanVo;
 import com.ruoyi.zhdd.domain.bo.PlanBo;
+import com.ruoyi.zhdd.domain.bo.PlanFileBo;
+import com.ruoyi.zhdd.domain.vo.PlanVo;
+import com.ruoyi.zhdd.service.IPlanFileService;
 import com.ruoyi.zhdd.service.IPlanService;
-import com.ruoyi.common.core.page.TableDataInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
 
 /**
  * 预案管理Controller
@@ -62,7 +65,7 @@ public class PlanController extends BaseController {
 //    @PreAuthorize("@ss.hasPermi('zhdd:plan:query')")
     @GetMapping("/{id}")
     public AjaxResult<PlanVo> getInfo(@NotNull(message = "主键不能为空")
-                                                  @PathVariable("id") String id) {
+                                      @PathVariable("id") String id) {
         return AjaxResult.success(iPlanService.queryById(id));
     }
 
@@ -95,18 +98,18 @@ public class PlanController extends BaseController {
      */
     @ApiOperation("删除预案管理")
 //    @PreAuthorize("@ss.hasPermi('zhdd:plan:remove')")
-    @Log(title = "预案管理" , businessType = BusinessType.DELETE)
+    @Log(title = "预案管理", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public AjaxResult<Void> remove(@NotEmpty(message = "主键不能为空")
-                                       @PathVariable String[] ids) {
+                                   @PathVariable String[] ids) {
         return toAjax(iPlanService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
     }
 
     @ApiOperation("新增预案文件")
-    @Log(title = "新增预案文件", businessType = BusinessType.INSERT)
+//    @Log(title = "新增预案文件", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping("/file")
-    public AjaxResult<Void> addFile(PlanFileBo planFileBo) {
+    public AjaxResult<Void> addFile(@RequestBody PlanFileBo planFileBo) {
         return toAjax(planFileService.insertByBo(planFileBo) ? 1 : 0);
     }
 }

+ 13 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhdd/ResourceController.java

@@ -8,6 +8,7 @@ import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.GatewayUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.validate.AddGroup;
 import com.ruoyi.common.core.validate.EditGroup;
@@ -83,7 +84,13 @@ public class ResourceController extends BaseController {
                 return rspData;
             }
         }
-//        GatewayUser user = getGateWayUser();
+        // 临时增加处理只能看到该部门的数据
+        GatewayUser user = getGateWayUser();
+        if (user != null && StrUtil.isNotBlank(user.getOrgId())) {
+            List<String> deptIds = new ArrayList<>();
+            deptIds.add(user.getOrgId());
+            bo.setDeptIds(deptIds);
+        }
         return iResourceService.queryPageList(bo);
     }
 
@@ -119,6 +126,11 @@ public class ResourceController extends BaseController {
     @RepeatSubmit()
     @PostMapping()
     public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody ResourceBo bo) {
+//        // 临时增加处理只能看到该部门的数据
+//        GatewayUser user = getGateWayUser();
+//        if (user != null) {
+//            bo.setDeptId(user.getOrgId());
+//        }
         return toAjax(iResourceService.insertResource(bo) ? 1 : 0);
     }
 

+ 1 - 1
ruoyi-admin/start.sh

@@ -3,7 +3,7 @@
 # 命令后加入 & ,保持程序后台持续运行
 #脚本所在目录
 SHELL_FOLDER=$(cd "$(dirname "$0")" || exit;pwd)
-nohup java -jar -Druoyi.name=YJZH-SQ -Dserver.port=8080 -Dspring.profiles.active=test app.jar > $SHELL_FOLDER/catalina.out 2>&1 &
+nohup java -jar -Duser.timezone=Asia/Shanghai -Druoyi.name=YJZH-SQ -Dserver.port=8080 -Dspring.profiles.active=test app.jar > $SHELL_FOLDER/catalina.out 2>&1 &
 
 # 死循环,保持docker前台运行
 while [[ true ]]; do

+ 1 - 4
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java

@@ -1,7 +1,6 @@
 package com.ruoyi.common.utils.file;
 
 import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.RandomUtil;
 import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.constant.Constants;
@@ -11,8 +10,6 @@ import com.ruoyi.common.exception.file.InvalidExtensionException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
 import org.apache.commons.io.FilenameUtils;
-import org.springframework.cloud.commons.util.IdUtils;
-import org.springframework.util.FileCopyUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
@@ -114,7 +111,7 @@ public class FileUploadUtils {
     public static final String extractFilename(MultipartFile file) {
         String fileName = file.getOriginalFilename();
         String extension = getExtension(file);
-        fileName = DateUtils.datePath() + "/" + FileUtil.getPrefix(fileName) + "_" + RandomUtil.randomNumbers(4) + "." + extension;
+        fileName = DateUtils.datePath() + "/" + FileUtil.getPrefix(fileName).replaceAll(",", "").replaceAll("&", "") + "_" + RandomUtil.randomNumbers(4) + "." + extension;
         return fileName;
     }
 

+ 10 - 3
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/Resource.java

@@ -1,12 +1,17 @@
 package com.ruoyi.zhdd.domain;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
+
 import java.io.Serializable;
 import java.util.Date;
-import java.math.BigDecimal;
 
 /**
  * 应急资源对象 b_resource
@@ -20,7 +25,7 @@ import java.math.BigDecimal;
 @TableName("b_resource")
 public class Resource implements Serializable {
 
-    private static final long serialVersionUID=1L;
+    private static final long serialVersionUID = 1L;
 
 
     /**
@@ -61,6 +66,8 @@ public class Resource implements Serializable {
      */
     private String manageUnit;
 
+    private String deptId;
+
     /**
      * 人数
      */

+ 1 - 1
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/MessagePushBo.java

@@ -25,7 +25,7 @@ public class MessagePushBo {
     // 是否定制化推送,0:否,1:是
     private String msCustom = "1";
     // 时间。格式yyyy-MM-dd
-    private String msTime = DateUtil.today();
+    private String msTime = DateUtil.now();
     // 消息id
     private String msNo;
     // 发送的用户

+ 4 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/ResourceBo.java

@@ -74,6 +74,10 @@ public class ResourceBo extends BaseEntity {
     @NotBlank(message = "manageUnit不能为空", groups = {AddGroup.class, EditGroup.class})
     private String manageUnit;
 
+    private String deptId;
+
+    private List<String> deptIds;
+
     /**
      * 人数
      */

+ 3 - 1
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/vo/ResourceVo.java

@@ -75,6 +75,8 @@ public class ResourceVo {
     @ApiModelProperty("管理单位")
     private String manageUnit;
 
+    private String deptId;
+
     private String carType;
 
     /**
@@ -108,7 +110,7 @@ public class ResourceVo {
 
     private List<ResourceDetail> resourceDetailList;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
 

+ 3 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/mapper/ResourceDetailMapper.java

@@ -1,5 +1,6 @@
 package com.ruoyi.zhdd.mapper;
 
+import cn.hutool.json.JSONObject;
 import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
 import com.ruoyi.zhdd.domain.Resource;
 import com.ruoyi.zhdd.domain.ResourceDetail;
@@ -16,4 +17,6 @@ import java.util.List;
 public interface ResourceDetailMapper extends BaseMapperPlus<ResourceDetail> {
 
     List<Resource> searchWarehouseByGoods(ResourceDetailBo bo);
+
+    List<JSONObject> queryResourceAvailable();
 }

+ 3 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/IResourceDetailService.java

@@ -1,5 +1,6 @@
 package com.ruoyi.zhdd.service;
 
+import cn.hutool.json.JSONObject;
 import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.zhdd.domain.ResourceDetail;
@@ -60,4 +61,6 @@ public interface IResourceDetailService extends IServicePlus<ResourceDetail, Res
     Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
 
     List<ResourceVo> searchWarehouseByGoods(ResourceDetailBo bo);
+
+    List<JSONObject> queryResourceAvailable();
 }

+ 85 - 7
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/DhServiceImpl.java

@@ -3,6 +3,7 @@ package com.ruoyi.zhdd.service.impl;
 import cn.hutool.crypto.SecureUtil;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.ruoyi.common.constant.Constants;
@@ -60,7 +61,13 @@ public class DhServiceImpl implements IDhService {
         JSONObject jsonOne = new JSONObject();
         jsonOne.set("userName", userName);
         jsonOne.set("clientType", "other");
-        String postOne = HttpUtil.post(dhAuthorizeUrl, jsonOne.toString());
+        String postOne = "";
+        try {
+            postOne = HttpUtil.post(dhAuthorizeUrl, jsonOne.toString());
+        } catch (Exception e) {
+            log.error("大华接口请求异常:{}", e.getMessage());
+            throw new ServiceException("大华接口请求异常");
+        }
         JSONObject postOneJson = JSONUtil.parseObj(postOne);
         if (postOneJson.containsKey("realm")) {
             String randomKey = postOneJson.getStr("randomKey");
@@ -122,15 +129,43 @@ public class DhServiceImpl implements IDhService {
         Map<String, Object> param = new HashMap<>();
         String id = sysConfigService.selectConfigByKey("dh.device.orgId");
         param.put("id", id);
+        JSONArray list = getList(param);
+        JSONArray newList = new JSONArray();
+        if (list != null && list.size() > 0) {
+            for (Object o : list) {
+                JSONObject getJson = JSONUtil.parseObj(o);
+                if (id.equals(getJson.getStr("orgCode")) && getJson.getInt("nodeType") == 1) {
+                    param.put("id", getJson.getStr("id"));
+                    JSONArray listTwo = getList(param);
+                    if (listTwo != null && listTwo.size() > 0) {
+                        for (Object two : listTwo) {
+                            newList.add(JSONUtil.parseObj(two));
+                        }
+                    }
+                }
+                newList.add(getJson);
+            }
+        }
+        log.info("数量:{}", newList.size());
+        return newList;
+    }
+
+    private JSONArray getList(Map<String, Object> param) {
         param.put("nodeType", 1);
         param.put("typeCode", "01;0;ALL;ALL");
         param.put("page", 1);
-        param.put("pageSize", 100);
-        String get = HttpRequest.get(dhDeviceTreeUrl)
-            .header("X-Subject-Token", this.getToken())
-            .form(param)
-            .timeout(-1)
-            .execute().body();
+        param.put("pageSize", 3000);
+        String get = "";
+        try {
+            get = HttpRequest.get(dhDeviceTreeUrl)
+                .header("X-Subject-Token", this.getToken())
+                .form(param)
+                .timeout(-1)
+                .execute().body();
+        } catch (Exception e) {
+            log.error("大华接口2请求异常:{}", e.getMessage());
+            throw new ServiceException("大华接口请求异常");
+        }
         JSONObject getJson = JSONUtil.parseObj(get);
         if (getJson.containsKey("code")) {
             // 说明有错误
@@ -140,4 +175,47 @@ public class DhServiceImpl implements IDhService {
         return getJson.getJSONArray("results");
     }
 
+    public static void main(String[] args) {
+        String token = "";
+        String userName = "shujuceshi";
+        JSONObject jsonOne = new JSONObject();
+        jsonOne.set("userName", userName);
+        jsonOne.set("clientType", "other");
+        String postOne = HttpUtil.post("http://10.211.55.3:6699/videoService/accounts/authorize", jsonOne.toString());
+        JSONObject postOneJson = JSONUtil.parseObj(postOne);
+        if (postOneJson.containsKey("realm")) {
+            String randomKey = postOneJson.getStr("randomKey");
+            String realm = postOneJson.getStr("realm");
+            String encryptType = postOneJson.getStr("encryptType");
+            // 第二次交互
+            String password = "Admin123";
+            String signature = SecureUtil.md5(
+                SecureUtil.md5(userName + ":" + realm + ":" +
+                    SecureUtil.md5(
+                        SecureUtil.md5(
+                            userName +
+                                SecureUtil.md5(password)))) + ":" + randomKey);
+            jsonOne.set("signature", signature);
+            jsonOne.set("randomKey", randomKey);
+            jsonOne.set("encryptType", encryptType);
+            String postTwo = HttpUtil.post("http://10.211.55.3:6699/videoService/accounts/authorize", jsonOne.toString());
+            JSONObject postTwoJson = JSONUtil.parseObj(postTwo);
+            if (postTwoJson.containsKey("token")) {
+                token = postTwoJson.getStr("token");
+                // 存入redis缓存
+//                RedisUtils.setCacheObject(Constants.CACHE_DH_TOKEN, token, 120, TimeUnit.SECONDS);
+//                RedisUtils.setCacheObject(Constants.CACHE_DH_TOKEN_REFRESH, token);
+            } else {
+                log.error("大华=第二次创建会话失败:{}", postTwoJson);
+                if ("user is repeated landing".equals(postTwoJson.getStr("message"))) {
+                    // 说明已经登录过,那么退出,重新获取
+
+                }
+            }
+        } else {
+            log.error("大华=第一次创建会话失败:{}", postOneJson);
+        }
+        System.out.println(token);
+    }
+
 }

+ 10 - 2
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/IncidentServiceImpl.java

@@ -91,6 +91,7 @@ public class IncidentServiceImpl extends ServicePlusImpl<IncidentMapper, Inciden
             lqw.between(Incident::getCreateTime, Timestamp.valueOf(Convert.toStr(params.get("beginTime")) + " 00:00:00"), Timestamp.valueOf(Convert.toStr(params.get("endTime")) + " 23:59:59"));
         }
         lqw.in(bo.getLevels() != null && bo.getLevels().size() > 0, Incident::getLevel, bo.getLevels());
+        lqw.orderByDesc(Incident::getCreateTime);
         return lqw;
     }
 
@@ -100,12 +101,19 @@ public class IncidentServiceImpl extends ServicePlusImpl<IncidentMapper, Inciden
         validEntityBeforeSave(add);
         add.setExprJson(JSONUtil.toJsonStr(bo.getMessagePushUsers()));
         boolean save = save(add);
-        if (bo.isSendFlag()) {
+        /*if (bo.isSendFlag()) {
             // A:事件接报。B:处置方案
             RedisUtils.publish(Constants.NOTICE_PUSH, "A" + add.getId(), msg -> {
                 log.info("发布事件接报消息 => " + msg);
             });
-        }
+        }*/
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.set("des", "事件接报");
+        jsonObject.set("incidentId", add.getId());
+        jsonObject.set("incidentStatus", 1);
+        RedisUtils.publish(Constants.PROCESS_RECORD, jsonObject, msg -> {
+            log.info("事件处置详情消息 => " + msg);
+        });
         return save;
     }
 

+ 4 - 2
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/IncidentTaskServiceImpl.java

@@ -76,10 +76,12 @@ public class IncidentTaskServiceImpl extends ServicePlusImpl<IncidentTaskMapper,
     @Transactional(rollbackFor = Exception.class)
     public Boolean insertByBo(IncidentTasksBo bo) {
         // 新增之前删除之前的内容
+        String insertOrUpdateFlag = "新增";
         if (StrUtil.isNotBlank(bo.getId())) {
             removeById(bo.getId());
             incidentTaskPersonService.remove(Wrappers.<IncidentTaskPerson>lambdaQuery().eq(IncidentTaskPerson::getIncidentTaskId, bo.getId()));
             incidentTaskCommandService.remove(Wrappers.<IncidentTaskCommand>lambdaQuery().eq(IncidentTaskCommand::getIncidentTaskId, bo.getId()));
+            insertOrUpdateFlag = "编辑";
         }
         IncidentTask add = BeanUtil.toBean(bo, IncidentTask.class);
         add.setId(null);
@@ -108,7 +110,7 @@ public class IncidentTaskServiceImpl extends ServicePlusImpl<IncidentTaskMapper,
             });
         } else {
             JSONObject jsonObject = new JSONObject();
-            jsonObject.set("des", "新增处置方案:" + bo.getTaskName());
+            jsonObject.set("des", insertOrUpdateFlag + "处置方案:" + bo.getTaskName());
             jsonObject.set("incidentId", bo.getIncidentId());
             jsonObject.set("incidentStatus", 3);
             RedisUtils.publish(Constants.PROCESS_RECORD, jsonObject, msg -> {
@@ -158,7 +160,7 @@ public class IncidentTaskServiceImpl extends ServicePlusImpl<IncidentTaskMapper,
         if (incidentTaskVo != null) {
             JSONObject jsonObject = new JSONObject();
             jsonObject.set("des", "处置方案:" + incidentTaskVo.getTaskName() + "删除");
-            jsonObject.set("incidentId", id);
+            jsonObject.set("incidentId", incidentTaskVo.getIncidentId());
             jsonObject.set("incidentStatus", 3);
             RedisUtils.publish(Constants.PROCESS_RECORD, jsonObject, msg -> {
                 log.info("事件处置方案删除消息 => " + msg);

+ 6 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/ResourceDetailServiceImpl.java

@@ -2,6 +2,7 @@ package com.ruoyi.zhdd.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.copier.CopyOptions;
+import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
@@ -96,4 +97,9 @@ public class ResourceDetailServiceImpl extends ServicePlusImpl<ResourceDetailMap
         List<Resource> list = baseMapper.searchWarehouseByGoods(bo);
         return BeanCopyUtils.listCopy(list, new CopyOptions(), ResourceVo.class);
     }
+
+    @Override
+    public List<JSONObject> queryResourceAvailable() {
+        return baseMapper.queryResourceAvailable();
+    }
 }

+ 2 - 1
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/ResourceServiceImpl.java

@@ -41,7 +41,7 @@ public class ResourceServiceImpl extends ServicePlusImpl<ResourceMapper, Resourc
     @Override
     public ResourceVo queryById(String id) {
         ResourceVo voById = getVoById(id);
-        if (voById.getResourceType() == 1) {
+        if (voById != null && voById.getResourceType() == 1) {
             // 应急仓库的类型查询仓库物资
             List<ResourceDetail> list = resourceDetailService.list(Wrappers.<ResourceDetail>lambdaQuery().eq(ResourceDetail::getResourceId, id));
             voById.setResourceDetailList(list);
@@ -75,6 +75,7 @@ public class ResourceServiceImpl extends ServicePlusImpl<ResourceMapper, Resourc
         lqw.like(StringUtils.isNotBlank(bo.getContactName()), Resource::getContactName, bo.getContactName());
         lqw.eq(StringUtils.isNotBlank(bo.getContactPhone()), Resource::getContactPhone, bo.getContactPhone());
         lqw.in(ObjectUtil.isNotEmpty(bo.getResourceIds()), Resource::getId, bo.getResourceIds());
+        lqw.in(ObjectUtil.isNotEmpty(bo.getDeptIds()), Resource::getDeptId, bo.getDeptIds());
         return lqw;
     }
 

+ 9 - 0
ruoyi-zhdd/src/main/resources/mapper/zhdd/ResourceDetailMapper.xml

@@ -37,5 +37,14 @@
         where t1.name like concat('%', #{name}, '%')
     </select>
 
+    <select id="queryResourceAvailable" resultType="cn.hutool.json.JSONObject">
+        select name,
+               sum(num)           as num,
+               sum(available_num) as availableNum,
+               to_char(max(create_time), 'yyyy-mm-dd HH24:MI') as time
+        from b_resource_detail
+        where del_flag = '0'
+        group by name
+    </select>
 
 </mapper>

+ 18 - 0
sql/20211209修改.sql

@@ -158,6 +158,24 @@ INSERT INTO public.sys_config (config_id, config_name, config_key, config_value,
 VALUES (12, '大华组织id', 'dh.device.orgId', 'S4NbecfYB1DFLAIM9FFHQ8', 'N', 'admin', '2021-09-16 03:32:56', '', null, '用于获取设备树');
 -- 以上已同步
 
+alter table b_resource_detail alter column num type numeric(8,3) using num::numeric(8,3);
+
+alter table b_resource_detail
+    add available_num numeric(8, 3);
+
+comment
+on column b_resource_detail.available_num is '可用数量';
+
+-- 以上已同步
+
+alter table b_resource
+    add dept_id varchar(36);
+
+comment
+on column b_resource.dept_id is '部门id';
+
+-- 以上已同步
+