diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
new file mode 100644
index 0000000..6fd7b24
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
@@ -0,0 +1,68 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "WorkerLocationDTO",description = "人员位置列表(首页)")
+@Data
+public class WorkerLocationDTO {
+
+ @ApiModelProperty("人员ID")
+ private Long workerId;
+
+ @ApiModelProperty("人员姓名")
+ private String workerName;
+
+ @ApiModelProperty("安全帽编号")
+ private String hatCode;
+
+ @ApiModelProperty("安全帽ID")
+ private Long hatId;
+
+ @ApiModelProperty("背心编号")
+ private String vastCode;
+
+ @ApiModelProperty("手环编号")
+ private String braceletCode;
+
+ @ApiModelProperty("位置")
+ private String location;
+
+ @ApiModelProperty("时间")
+ private String time;
+
+ @ApiModelProperty("经度")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ private String lat;
+
+ @ApiModelProperty("心率")
+ private String heartRate;
+
+ @ApiModelProperty("血氧")
+ private String bloodOxygen;
+
+ @ApiModelProperty("一氧化碳")
+ private String co;
+
+ @ApiModelProperty("甲烷")
+ private String gas;
+
+ @ApiModelProperty("硫化氢")
+ private String h2s;
+
+ @ApiModelProperty("氧气")
+ private String o2;
+
+ @ApiModelProperty("信号")
+ private String signal;
+
+ @ApiModelProperty("电量")
+ private String cell;
+
+ @ApiModelProperty("是否报警")
+ private boolean alarmFlag;
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
new file mode 100644
index 0000000..6fd7b24
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
@@ -0,0 +1,68 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "WorkerLocationDTO",description = "人员位置列表(首页)")
+@Data
+public class WorkerLocationDTO {
+
+ @ApiModelProperty("人员ID")
+ private Long workerId;
+
+ @ApiModelProperty("人员姓名")
+ private String workerName;
+
+ @ApiModelProperty("安全帽编号")
+ private String hatCode;
+
+ @ApiModelProperty("安全帽ID")
+ private Long hatId;
+
+ @ApiModelProperty("背心编号")
+ private String vastCode;
+
+ @ApiModelProperty("手环编号")
+ private String braceletCode;
+
+ @ApiModelProperty("位置")
+ private String location;
+
+ @ApiModelProperty("时间")
+ private String time;
+
+ @ApiModelProperty("经度")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ private String lat;
+
+ @ApiModelProperty("心率")
+ private String heartRate;
+
+ @ApiModelProperty("血氧")
+ private String bloodOxygen;
+
+ @ApiModelProperty("一氧化碳")
+ private String co;
+
+ @ApiModelProperty("甲烷")
+ private String gas;
+
+ @ApiModelProperty("硫化氢")
+ private String h2s;
+
+ @ApiModelProperty("氧气")
+ private String o2;
+
+ @ApiModelProperty("信号")
+ private String signal;
+
+ @ApiModelProperty("电量")
+ private String cell;
+
+ @ApiModelProperty("是否报警")
+ private boolean alarmFlag;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
new file mode 100644
index 0000000..efb4a23
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
@@ -0,0 +1,159 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 报警记录表
+ *
+ *
+ * @author zyj
+ * @since 2023-05-16
+ */
+@Data
+@ApiModel("Alarm")
+@TableName("br_bus_alarm")
+public class BusAlarm implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 项目ID
+ */
+ @ApiModelProperty(value = "项目ID")
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 报警类型
+ */
+ @ApiModelProperty(value = "报警类型")
+ @TableField("ALARM_TYPE")
+ private String alarmType;
+
+ /**
+ * 报警状态
+ */
+ @ApiModelProperty(value = "报警状态")
+ @TableField("ALARM_STATUS")
+ private String alarmStatus;
+
+ /**
+ * 报警值
+ */
+ @ApiModelProperty(value = "报警值")
+ @TableField("ALARM_VALUE")
+ private String alarmValue;
+
+ /**
+ * 报警图片
+ */
+ @ApiModelProperty(value = "报警图片")
+ @TableField("ALARM_IMAGE")
+ private String alarmImage;
+
+ /**
+ * 报警内容
+ */
+ @ApiModelProperty(value = "报警内容")
+ @TableField("ALARM_CONTENT")
+ private String alarmContent;
+
+ /**
+ * 报警时间
+ */
+ @ApiModelProperty(value = "报警时间")
+ @TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date alarmTime;
+
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "消警时间")
+ @TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date cancelTime;
+
+ /**
+ * 报警位置经度
+ */
+ @ApiModelProperty(value = "报警位置经度")
+ @TableField("ALARM_LNG")
+ private String alarmLng;
+
+ /**
+ * 报警位置纬度
+ */
+ @ApiModelProperty(value = "报警位置纬度")
+ @TableField("ALARM_LAT")
+ private String alarmLat;
+
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty("作业名称")
+ @TableField(exist = false)
+ private String workTitle;
+ @ApiModelProperty("所属道路")
+ @TableField(exist = false)
+ private String workRoad;
+ @ApiModelProperty("作业状态")
+ @TableField(exist = false)
+ private String projectState;
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+ @ApiModelProperty("负责人姓名")
+ @TableField(exist = false)
+ private String workPersonName;
+ @ApiModelProperty("负责人联系方式")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+
+ @Override
+ public String toString() {
+ return "BusAlarm{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ ", alarmType=" + alarmType +
+ ", alarmValue=" + alarmValue +
+ ", alarmStatus=" + alarmStatus +
+ ", alarmImage=" + alarmImage +
+ ", alarmContent=" + alarmContent +
+ ", alarmTime=" + alarmTime +
+ ", cancelTime=" + cancelTime +
+ ", alarmLng=" + alarmLng +
+ ", alarmLat=" + alarmLat +
+ "}";
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
new file mode 100644
index 0000000..6fd7b24
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
@@ -0,0 +1,68 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "WorkerLocationDTO",description = "人员位置列表(首页)")
+@Data
+public class WorkerLocationDTO {
+
+ @ApiModelProperty("人员ID")
+ private Long workerId;
+
+ @ApiModelProperty("人员姓名")
+ private String workerName;
+
+ @ApiModelProperty("安全帽编号")
+ private String hatCode;
+
+ @ApiModelProperty("安全帽ID")
+ private Long hatId;
+
+ @ApiModelProperty("背心编号")
+ private String vastCode;
+
+ @ApiModelProperty("手环编号")
+ private String braceletCode;
+
+ @ApiModelProperty("位置")
+ private String location;
+
+ @ApiModelProperty("时间")
+ private String time;
+
+ @ApiModelProperty("经度")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ private String lat;
+
+ @ApiModelProperty("心率")
+ private String heartRate;
+
+ @ApiModelProperty("血氧")
+ private String bloodOxygen;
+
+ @ApiModelProperty("一氧化碳")
+ private String co;
+
+ @ApiModelProperty("甲烷")
+ private String gas;
+
+ @ApiModelProperty("硫化氢")
+ private String h2s;
+
+ @ApiModelProperty("氧气")
+ private String o2;
+
+ @ApiModelProperty("信号")
+ private String signal;
+
+ @ApiModelProperty("电量")
+ private String cell;
+
+ @ApiModelProperty("是否报警")
+ private boolean alarmFlag;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
new file mode 100644
index 0000000..efb4a23
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
@@ -0,0 +1,159 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 报警记录表
+ *
+ *
+ * @author zyj
+ * @since 2023-05-16
+ */
+@Data
+@ApiModel("Alarm")
+@TableName("br_bus_alarm")
+public class BusAlarm implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 项目ID
+ */
+ @ApiModelProperty(value = "项目ID")
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 报警类型
+ */
+ @ApiModelProperty(value = "报警类型")
+ @TableField("ALARM_TYPE")
+ private String alarmType;
+
+ /**
+ * 报警状态
+ */
+ @ApiModelProperty(value = "报警状态")
+ @TableField("ALARM_STATUS")
+ private String alarmStatus;
+
+ /**
+ * 报警值
+ */
+ @ApiModelProperty(value = "报警值")
+ @TableField("ALARM_VALUE")
+ private String alarmValue;
+
+ /**
+ * 报警图片
+ */
+ @ApiModelProperty(value = "报警图片")
+ @TableField("ALARM_IMAGE")
+ private String alarmImage;
+
+ /**
+ * 报警内容
+ */
+ @ApiModelProperty(value = "报警内容")
+ @TableField("ALARM_CONTENT")
+ private String alarmContent;
+
+ /**
+ * 报警时间
+ */
+ @ApiModelProperty(value = "报警时间")
+ @TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date alarmTime;
+
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "消警时间")
+ @TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date cancelTime;
+
+ /**
+ * 报警位置经度
+ */
+ @ApiModelProperty(value = "报警位置经度")
+ @TableField("ALARM_LNG")
+ private String alarmLng;
+
+ /**
+ * 报警位置纬度
+ */
+ @ApiModelProperty(value = "报警位置纬度")
+ @TableField("ALARM_LAT")
+ private String alarmLat;
+
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty("作业名称")
+ @TableField(exist = false)
+ private String workTitle;
+ @ApiModelProperty("所属道路")
+ @TableField(exist = false)
+ private String workRoad;
+ @ApiModelProperty("作业状态")
+ @TableField(exist = false)
+ private String projectState;
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+ @ApiModelProperty("负责人姓名")
+ @TableField(exist = false)
+ private String workPersonName;
+ @ApiModelProperty("负责人联系方式")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+
+ @Override
+ public String toString() {
+ return "BusAlarm{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ ", alarmType=" + alarmType +
+ ", alarmValue=" + alarmValue +
+ ", alarmStatus=" + alarmStatus +
+ ", alarmImage=" + alarmImage +
+ ", alarmContent=" + alarmContent +
+ ", alarmTime=" + alarmTime +
+ ", cancelTime=" + cancelTime +
+ ", alarmLng=" + alarmLng +
+ ", alarmLat=" + alarmLat +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
new file mode 100644
index 0000000..a0b7543
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
@@ -0,0 +1,100 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 事件表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event")
+@Data
+@ApiModel("BusEvent")
+public class BusEvent implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("事件ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件标题
+ */
+ @ApiModelProperty("事件名称")
+ @TableField("EVENT_TITLE")
+ private String eventTitle;
+
+ /**
+ * 上报人员
+ */
+ @ApiModelProperty("上报人员")
+ @TableField("UPLOAD_NAME")
+ private String uploadName;
+
+ /**
+ * 联系方式
+ */
+ @ApiModelProperty("联系方式")
+ @TableField("PHONE_NUMBER")
+ private String phoneNumber;
+
+ /**
+ * 事件描述
+ */
+ @ApiModelProperty("事件描述")
+ @TableField("EVENT_DESCRIPTION")
+ private String eventDescription;
+
+ @ApiModelProperty("经度")
+ @TableField("LNG")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ @TableField("LAT")
+ private String lat;
+
+ /**
+ * 事件上传时间
+ */
+ @ApiModelProperty("事件上传时间")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty("事件照片")
+ @TableField(exist = false)
+ private List imageList;
+
+
+
+ @Override
+ public String toString() {
+ return "BusEvent{" +
+ "id=" + id +
+ ", eventTitle=" + eventTitle +
+ ", uploadName=" + uploadName +
+ ", phoneNumber=" + phoneNumber +
+ ", eventDescription=" + eventDescription +
+ ", lng=" + lng +
+ ", lat=" + lat +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
new file mode 100644
index 0000000..6fd7b24
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
@@ -0,0 +1,68 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "WorkerLocationDTO",description = "人员位置列表(首页)")
+@Data
+public class WorkerLocationDTO {
+
+ @ApiModelProperty("人员ID")
+ private Long workerId;
+
+ @ApiModelProperty("人员姓名")
+ private String workerName;
+
+ @ApiModelProperty("安全帽编号")
+ private String hatCode;
+
+ @ApiModelProperty("安全帽ID")
+ private Long hatId;
+
+ @ApiModelProperty("背心编号")
+ private String vastCode;
+
+ @ApiModelProperty("手环编号")
+ private String braceletCode;
+
+ @ApiModelProperty("位置")
+ private String location;
+
+ @ApiModelProperty("时间")
+ private String time;
+
+ @ApiModelProperty("经度")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ private String lat;
+
+ @ApiModelProperty("心率")
+ private String heartRate;
+
+ @ApiModelProperty("血氧")
+ private String bloodOxygen;
+
+ @ApiModelProperty("一氧化碳")
+ private String co;
+
+ @ApiModelProperty("甲烷")
+ private String gas;
+
+ @ApiModelProperty("硫化氢")
+ private String h2s;
+
+ @ApiModelProperty("氧气")
+ private String o2;
+
+ @ApiModelProperty("信号")
+ private String signal;
+
+ @ApiModelProperty("电量")
+ private String cell;
+
+ @ApiModelProperty("是否报警")
+ private boolean alarmFlag;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
new file mode 100644
index 0000000..efb4a23
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
@@ -0,0 +1,159 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 报警记录表
+ *
+ *
+ * @author zyj
+ * @since 2023-05-16
+ */
+@Data
+@ApiModel("Alarm")
+@TableName("br_bus_alarm")
+public class BusAlarm implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 项目ID
+ */
+ @ApiModelProperty(value = "项目ID")
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 报警类型
+ */
+ @ApiModelProperty(value = "报警类型")
+ @TableField("ALARM_TYPE")
+ private String alarmType;
+
+ /**
+ * 报警状态
+ */
+ @ApiModelProperty(value = "报警状态")
+ @TableField("ALARM_STATUS")
+ private String alarmStatus;
+
+ /**
+ * 报警值
+ */
+ @ApiModelProperty(value = "报警值")
+ @TableField("ALARM_VALUE")
+ private String alarmValue;
+
+ /**
+ * 报警图片
+ */
+ @ApiModelProperty(value = "报警图片")
+ @TableField("ALARM_IMAGE")
+ private String alarmImage;
+
+ /**
+ * 报警内容
+ */
+ @ApiModelProperty(value = "报警内容")
+ @TableField("ALARM_CONTENT")
+ private String alarmContent;
+
+ /**
+ * 报警时间
+ */
+ @ApiModelProperty(value = "报警时间")
+ @TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date alarmTime;
+
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "消警时间")
+ @TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date cancelTime;
+
+ /**
+ * 报警位置经度
+ */
+ @ApiModelProperty(value = "报警位置经度")
+ @TableField("ALARM_LNG")
+ private String alarmLng;
+
+ /**
+ * 报警位置纬度
+ */
+ @ApiModelProperty(value = "报警位置纬度")
+ @TableField("ALARM_LAT")
+ private String alarmLat;
+
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty("作业名称")
+ @TableField(exist = false)
+ private String workTitle;
+ @ApiModelProperty("所属道路")
+ @TableField(exist = false)
+ private String workRoad;
+ @ApiModelProperty("作业状态")
+ @TableField(exist = false)
+ private String projectState;
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+ @ApiModelProperty("负责人姓名")
+ @TableField(exist = false)
+ private String workPersonName;
+ @ApiModelProperty("负责人联系方式")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+
+ @Override
+ public String toString() {
+ return "BusAlarm{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ ", alarmType=" + alarmType +
+ ", alarmValue=" + alarmValue +
+ ", alarmStatus=" + alarmStatus +
+ ", alarmImage=" + alarmImage +
+ ", alarmContent=" + alarmContent +
+ ", alarmTime=" + alarmTime +
+ ", cancelTime=" + cancelTime +
+ ", alarmLng=" + alarmLng +
+ ", alarmLat=" + alarmLat +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
new file mode 100644
index 0000000..a0b7543
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
@@ -0,0 +1,100 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 事件表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event")
+@Data
+@ApiModel("BusEvent")
+public class BusEvent implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("事件ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件标题
+ */
+ @ApiModelProperty("事件名称")
+ @TableField("EVENT_TITLE")
+ private String eventTitle;
+
+ /**
+ * 上报人员
+ */
+ @ApiModelProperty("上报人员")
+ @TableField("UPLOAD_NAME")
+ private String uploadName;
+
+ /**
+ * 联系方式
+ */
+ @ApiModelProperty("联系方式")
+ @TableField("PHONE_NUMBER")
+ private String phoneNumber;
+
+ /**
+ * 事件描述
+ */
+ @ApiModelProperty("事件描述")
+ @TableField("EVENT_DESCRIPTION")
+ private String eventDescription;
+
+ @ApiModelProperty("经度")
+ @TableField("LNG")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ @TableField("LAT")
+ private String lat;
+
+ /**
+ * 事件上传时间
+ */
+ @ApiModelProperty("事件上传时间")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty("事件照片")
+ @TableField(exist = false)
+ private List imageList;
+
+
+
+ @Override
+ public String toString() {
+ return "BusEvent{" +
+ "id=" + id +
+ ", eventTitle=" + eventTitle +
+ ", uploadName=" + uploadName +
+ ", phoneNumber=" + phoneNumber +
+ ", eventDescription=" + eventDescription +
+ ", lng=" + lng +
+ ", lat=" + lat +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
new file mode 100644
index 0000000..1e75245
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
@@ -0,0 +1,47 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 事件图片表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event_image")
+@Data
+@ApiModel("BusEventImage")
+public class BusEventImage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件ID
+ */
+ @TableField("EVENT_ID")
+ private Long eventId;
+
+ /**
+ * 报警图片
+ */
+ @TableField("IMAGE")
+ @ApiModelProperty("图片url")
+ private String image;
+
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
new file mode 100644
index 0000000..6fd7b24
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
@@ -0,0 +1,68 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "WorkerLocationDTO",description = "人员位置列表(首页)")
+@Data
+public class WorkerLocationDTO {
+
+ @ApiModelProperty("人员ID")
+ private Long workerId;
+
+ @ApiModelProperty("人员姓名")
+ private String workerName;
+
+ @ApiModelProperty("安全帽编号")
+ private String hatCode;
+
+ @ApiModelProperty("安全帽ID")
+ private Long hatId;
+
+ @ApiModelProperty("背心编号")
+ private String vastCode;
+
+ @ApiModelProperty("手环编号")
+ private String braceletCode;
+
+ @ApiModelProperty("位置")
+ private String location;
+
+ @ApiModelProperty("时间")
+ private String time;
+
+ @ApiModelProperty("经度")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ private String lat;
+
+ @ApiModelProperty("心率")
+ private String heartRate;
+
+ @ApiModelProperty("血氧")
+ private String bloodOxygen;
+
+ @ApiModelProperty("一氧化碳")
+ private String co;
+
+ @ApiModelProperty("甲烷")
+ private String gas;
+
+ @ApiModelProperty("硫化氢")
+ private String h2s;
+
+ @ApiModelProperty("氧气")
+ private String o2;
+
+ @ApiModelProperty("信号")
+ private String signal;
+
+ @ApiModelProperty("电量")
+ private String cell;
+
+ @ApiModelProperty("是否报警")
+ private boolean alarmFlag;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
new file mode 100644
index 0000000..efb4a23
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
@@ -0,0 +1,159 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 报警记录表
+ *
+ *
+ * @author zyj
+ * @since 2023-05-16
+ */
+@Data
+@ApiModel("Alarm")
+@TableName("br_bus_alarm")
+public class BusAlarm implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 项目ID
+ */
+ @ApiModelProperty(value = "项目ID")
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 报警类型
+ */
+ @ApiModelProperty(value = "报警类型")
+ @TableField("ALARM_TYPE")
+ private String alarmType;
+
+ /**
+ * 报警状态
+ */
+ @ApiModelProperty(value = "报警状态")
+ @TableField("ALARM_STATUS")
+ private String alarmStatus;
+
+ /**
+ * 报警值
+ */
+ @ApiModelProperty(value = "报警值")
+ @TableField("ALARM_VALUE")
+ private String alarmValue;
+
+ /**
+ * 报警图片
+ */
+ @ApiModelProperty(value = "报警图片")
+ @TableField("ALARM_IMAGE")
+ private String alarmImage;
+
+ /**
+ * 报警内容
+ */
+ @ApiModelProperty(value = "报警内容")
+ @TableField("ALARM_CONTENT")
+ private String alarmContent;
+
+ /**
+ * 报警时间
+ */
+ @ApiModelProperty(value = "报警时间")
+ @TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date alarmTime;
+
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "消警时间")
+ @TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date cancelTime;
+
+ /**
+ * 报警位置经度
+ */
+ @ApiModelProperty(value = "报警位置经度")
+ @TableField("ALARM_LNG")
+ private String alarmLng;
+
+ /**
+ * 报警位置纬度
+ */
+ @ApiModelProperty(value = "报警位置纬度")
+ @TableField("ALARM_LAT")
+ private String alarmLat;
+
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty("作业名称")
+ @TableField(exist = false)
+ private String workTitle;
+ @ApiModelProperty("所属道路")
+ @TableField(exist = false)
+ private String workRoad;
+ @ApiModelProperty("作业状态")
+ @TableField(exist = false)
+ private String projectState;
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+ @ApiModelProperty("负责人姓名")
+ @TableField(exist = false)
+ private String workPersonName;
+ @ApiModelProperty("负责人联系方式")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+
+ @Override
+ public String toString() {
+ return "BusAlarm{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ ", alarmType=" + alarmType +
+ ", alarmValue=" + alarmValue +
+ ", alarmStatus=" + alarmStatus +
+ ", alarmImage=" + alarmImage +
+ ", alarmContent=" + alarmContent +
+ ", alarmTime=" + alarmTime +
+ ", cancelTime=" + cancelTime +
+ ", alarmLng=" + alarmLng +
+ ", alarmLat=" + alarmLat +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
new file mode 100644
index 0000000..a0b7543
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
@@ -0,0 +1,100 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 事件表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event")
+@Data
+@ApiModel("BusEvent")
+public class BusEvent implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("事件ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件标题
+ */
+ @ApiModelProperty("事件名称")
+ @TableField("EVENT_TITLE")
+ private String eventTitle;
+
+ /**
+ * 上报人员
+ */
+ @ApiModelProperty("上报人员")
+ @TableField("UPLOAD_NAME")
+ private String uploadName;
+
+ /**
+ * 联系方式
+ */
+ @ApiModelProperty("联系方式")
+ @TableField("PHONE_NUMBER")
+ private String phoneNumber;
+
+ /**
+ * 事件描述
+ */
+ @ApiModelProperty("事件描述")
+ @TableField("EVENT_DESCRIPTION")
+ private String eventDescription;
+
+ @ApiModelProperty("经度")
+ @TableField("LNG")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ @TableField("LAT")
+ private String lat;
+
+ /**
+ * 事件上传时间
+ */
+ @ApiModelProperty("事件上传时间")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty("事件照片")
+ @TableField(exist = false)
+ private List imageList;
+
+
+
+ @Override
+ public String toString() {
+ return "BusEvent{" +
+ "id=" + id +
+ ", eventTitle=" + eventTitle +
+ ", uploadName=" + uploadName +
+ ", phoneNumber=" + phoneNumber +
+ ", eventDescription=" + eventDescription +
+ ", lng=" + lng +
+ ", lat=" + lat +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
new file mode 100644
index 0000000..1e75245
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
@@ -0,0 +1,47 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 事件图片表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event_image")
+@Data
+@ApiModel("BusEventImage")
+public class BusEventImage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件ID
+ */
+ @TableField("EVENT_ID")
+ private Long eventId;
+
+ /**
+ * 报警图片
+ */
+ @TableField("IMAGE")
+ @ApiModelProperty("图片url")
+ private String image;
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
new file mode 100644
index 0000000..df89c70
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
@@ -0,0 +1,113 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.casic.missiles.core.base.json.DateDeserializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("Device")
+@TableName("br_device")
+@Data
+public class Device implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @ApiModelProperty(value = "设备编号")
+ @TableField("DEVICE_CODE")
+ private String deviceCode;
+
+ /**
+ * 设备类型
+ */
+ @ApiModelProperty(value = "设备类型")
+ @TableField("DEVICE_TYPE")
+ private String deviceType;
+
+ /**
+ * 设备批次
+ */
+ @ApiModelProperty(value = "设备批次")
+ @TableField("DEVICE_BATCH")
+ private String deviceBatch;
+
+ /**
+ * 厂家
+ */
+ @ApiModelProperty(value = "厂家")
+ @TableField("MANUFACTURER")
+ private String manufacturer;
+
+ /**
+ * 是否供电
+ */
+ @ApiModelProperty(value = "是否供电")
+ @TableField("IS_POWER_SUPPLY")
+ private String isPowerSupply;
+
+ /**
+ * 创建时间
+ */
+ @ApiModelProperty(value = "创建时间",dataType = "Date")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty(value = "设备类型名称")
+ @TableField(exist = false)
+ private String deviceTypeName;
+
+ @ApiModelProperty(value = "是否供电名称")
+ @TableField(exist = false)
+ private String isPowerSupplyName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty(value = "当前状态")
+ @TableField(exist = false)
+ private String status;
+
+ @ApiModelProperty(value = "当前状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
+ @Override
+ public String toString() {
+ return "Device{" +
+ "id=" + id +
+ ", deviceCode=" + deviceCode +
+ ", deviceType=" + deviceType +
+ ", deviceBatch=" + deviceBatch +
+ ", manufacturer=" + manufacturer +
+ ", isPowerSupply=" + isPowerSupply +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
new file mode 100644
index 0000000..6fd7b24
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
@@ -0,0 +1,68 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "WorkerLocationDTO",description = "人员位置列表(首页)")
+@Data
+public class WorkerLocationDTO {
+
+ @ApiModelProperty("人员ID")
+ private Long workerId;
+
+ @ApiModelProperty("人员姓名")
+ private String workerName;
+
+ @ApiModelProperty("安全帽编号")
+ private String hatCode;
+
+ @ApiModelProperty("安全帽ID")
+ private Long hatId;
+
+ @ApiModelProperty("背心编号")
+ private String vastCode;
+
+ @ApiModelProperty("手环编号")
+ private String braceletCode;
+
+ @ApiModelProperty("位置")
+ private String location;
+
+ @ApiModelProperty("时间")
+ private String time;
+
+ @ApiModelProperty("经度")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ private String lat;
+
+ @ApiModelProperty("心率")
+ private String heartRate;
+
+ @ApiModelProperty("血氧")
+ private String bloodOxygen;
+
+ @ApiModelProperty("一氧化碳")
+ private String co;
+
+ @ApiModelProperty("甲烷")
+ private String gas;
+
+ @ApiModelProperty("硫化氢")
+ private String h2s;
+
+ @ApiModelProperty("氧气")
+ private String o2;
+
+ @ApiModelProperty("信号")
+ private String signal;
+
+ @ApiModelProperty("电量")
+ private String cell;
+
+ @ApiModelProperty("是否报警")
+ private boolean alarmFlag;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
new file mode 100644
index 0000000..efb4a23
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
@@ -0,0 +1,159 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 报警记录表
+ *
+ *
+ * @author zyj
+ * @since 2023-05-16
+ */
+@Data
+@ApiModel("Alarm")
+@TableName("br_bus_alarm")
+public class BusAlarm implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 项目ID
+ */
+ @ApiModelProperty(value = "项目ID")
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 报警类型
+ */
+ @ApiModelProperty(value = "报警类型")
+ @TableField("ALARM_TYPE")
+ private String alarmType;
+
+ /**
+ * 报警状态
+ */
+ @ApiModelProperty(value = "报警状态")
+ @TableField("ALARM_STATUS")
+ private String alarmStatus;
+
+ /**
+ * 报警值
+ */
+ @ApiModelProperty(value = "报警值")
+ @TableField("ALARM_VALUE")
+ private String alarmValue;
+
+ /**
+ * 报警图片
+ */
+ @ApiModelProperty(value = "报警图片")
+ @TableField("ALARM_IMAGE")
+ private String alarmImage;
+
+ /**
+ * 报警内容
+ */
+ @ApiModelProperty(value = "报警内容")
+ @TableField("ALARM_CONTENT")
+ private String alarmContent;
+
+ /**
+ * 报警时间
+ */
+ @ApiModelProperty(value = "报警时间")
+ @TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date alarmTime;
+
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "消警时间")
+ @TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date cancelTime;
+
+ /**
+ * 报警位置经度
+ */
+ @ApiModelProperty(value = "报警位置经度")
+ @TableField("ALARM_LNG")
+ private String alarmLng;
+
+ /**
+ * 报警位置纬度
+ */
+ @ApiModelProperty(value = "报警位置纬度")
+ @TableField("ALARM_LAT")
+ private String alarmLat;
+
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty("作业名称")
+ @TableField(exist = false)
+ private String workTitle;
+ @ApiModelProperty("所属道路")
+ @TableField(exist = false)
+ private String workRoad;
+ @ApiModelProperty("作业状态")
+ @TableField(exist = false)
+ private String projectState;
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+ @ApiModelProperty("负责人姓名")
+ @TableField(exist = false)
+ private String workPersonName;
+ @ApiModelProperty("负责人联系方式")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+
+ @Override
+ public String toString() {
+ return "BusAlarm{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ ", alarmType=" + alarmType +
+ ", alarmValue=" + alarmValue +
+ ", alarmStatus=" + alarmStatus +
+ ", alarmImage=" + alarmImage +
+ ", alarmContent=" + alarmContent +
+ ", alarmTime=" + alarmTime +
+ ", cancelTime=" + cancelTime +
+ ", alarmLng=" + alarmLng +
+ ", alarmLat=" + alarmLat +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
new file mode 100644
index 0000000..a0b7543
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
@@ -0,0 +1,100 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 事件表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event")
+@Data
+@ApiModel("BusEvent")
+public class BusEvent implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("事件ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件标题
+ */
+ @ApiModelProperty("事件名称")
+ @TableField("EVENT_TITLE")
+ private String eventTitle;
+
+ /**
+ * 上报人员
+ */
+ @ApiModelProperty("上报人员")
+ @TableField("UPLOAD_NAME")
+ private String uploadName;
+
+ /**
+ * 联系方式
+ */
+ @ApiModelProperty("联系方式")
+ @TableField("PHONE_NUMBER")
+ private String phoneNumber;
+
+ /**
+ * 事件描述
+ */
+ @ApiModelProperty("事件描述")
+ @TableField("EVENT_DESCRIPTION")
+ private String eventDescription;
+
+ @ApiModelProperty("经度")
+ @TableField("LNG")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ @TableField("LAT")
+ private String lat;
+
+ /**
+ * 事件上传时间
+ */
+ @ApiModelProperty("事件上传时间")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty("事件照片")
+ @TableField(exist = false)
+ private List imageList;
+
+
+
+ @Override
+ public String toString() {
+ return "BusEvent{" +
+ "id=" + id +
+ ", eventTitle=" + eventTitle +
+ ", uploadName=" + uploadName +
+ ", phoneNumber=" + phoneNumber +
+ ", eventDescription=" + eventDescription +
+ ", lng=" + lng +
+ ", lat=" + lat +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
new file mode 100644
index 0000000..1e75245
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
@@ -0,0 +1,47 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 事件图片表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event_image")
+@Data
+@ApiModel("BusEventImage")
+public class BusEventImage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件ID
+ */
+ @TableField("EVENT_ID")
+ private Long eventId;
+
+ /**
+ * 报警图片
+ */
+ @TableField("IMAGE")
+ @ApiModelProperty("图片url")
+ private String image;
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
new file mode 100644
index 0000000..df89c70
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
@@ -0,0 +1,113 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.casic.missiles.core.base.json.DateDeserializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("Device")
+@TableName("br_device")
+@Data
+public class Device implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @ApiModelProperty(value = "设备编号")
+ @TableField("DEVICE_CODE")
+ private String deviceCode;
+
+ /**
+ * 设备类型
+ */
+ @ApiModelProperty(value = "设备类型")
+ @TableField("DEVICE_TYPE")
+ private String deviceType;
+
+ /**
+ * 设备批次
+ */
+ @ApiModelProperty(value = "设备批次")
+ @TableField("DEVICE_BATCH")
+ private String deviceBatch;
+
+ /**
+ * 厂家
+ */
+ @ApiModelProperty(value = "厂家")
+ @TableField("MANUFACTURER")
+ private String manufacturer;
+
+ /**
+ * 是否供电
+ */
+ @ApiModelProperty(value = "是否供电")
+ @TableField("IS_POWER_SUPPLY")
+ private String isPowerSupply;
+
+ /**
+ * 创建时间
+ */
+ @ApiModelProperty(value = "创建时间",dataType = "Date")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty(value = "设备类型名称")
+ @TableField(exist = false)
+ private String deviceTypeName;
+
+ @ApiModelProperty(value = "是否供电名称")
+ @TableField(exist = false)
+ private String isPowerSupplyName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty(value = "当前状态")
+ @TableField(exist = false)
+ private String status;
+
+ @ApiModelProperty(value = "当前状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
+ @Override
+ public String toString() {
+ return "Device{" +
+ "id=" + id +
+ ", deviceCode=" + deviceCode +
+ ", deviceType=" + deviceType +
+ ", deviceBatch=" + deviceBatch +
+ ", manufacturer=" + manufacturer +
+ ", isPowerSupply=" + isPowerSupply +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
new file mode 100644
index 0000000..5ee7015
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
@@ -0,0 +1,99 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 设备扩展信息表(安全树)
+ *
+ *
+ * @author zyj
+ * @since 2023-04-27
+ */
+@Data
+@TableName("br_device_ext")
+public class DeviceExt implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备ID
+ */
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 摄像头编号
+ */
+ @TableField("CAMERA_CODE")
+ private String cameraCode;
+
+ /**
+ * 摄像头IP
+ */
+ @TableField("CAMERA_IP")
+ private String cameraIp;
+
+ /**
+ * 摄像头端口
+ */
+ @TableField("CAMERA_PORT")
+ private String cameraPort;
+
+ /**
+ * 激甲编号
+ */
+ @TableField("GAS_CODE")
+ private String gasCode;
+
+ /**
+ * 激甲IP
+ */
+ @TableField("GAS_IP")
+ private String gasIp;
+
+ /**
+ * 激甲端口
+ */
+ @TableField("GAS_PORT")
+ private String gasPort;
+
+ /**
+ * 甲烷报警阈值
+ */
+ @TableField("GAS_THRESHOLD")
+ private String gasThreshold;
+
+ @TableField(value = "HAT_LINING_CODE")
+ private String hatLiningCode;
+
+
+ @Override
+ public String toString() {
+ return "DeviceExt{" +
+ "id=" + id +
+ ", deviceId=" + deviceId +
+ ", cameraCode=" + cameraCode +
+ ", cameraIp=" + cameraIp +
+ ", cameraPort=" + cameraPort +
+ ", gasCode=" + gasCode +
+ ", gasIp=" + gasIp +
+ ", gasPort=" + gasPort +
+ ", gasThreshold=" + gasThreshold +
+ ", hatLiningCode=" + hatLiningCode +
+ "}";
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
new file mode 100644
index 0000000..6fd7b24
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
@@ -0,0 +1,68 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "WorkerLocationDTO",description = "人员位置列表(首页)")
+@Data
+public class WorkerLocationDTO {
+
+ @ApiModelProperty("人员ID")
+ private Long workerId;
+
+ @ApiModelProperty("人员姓名")
+ private String workerName;
+
+ @ApiModelProperty("安全帽编号")
+ private String hatCode;
+
+ @ApiModelProperty("安全帽ID")
+ private Long hatId;
+
+ @ApiModelProperty("背心编号")
+ private String vastCode;
+
+ @ApiModelProperty("手环编号")
+ private String braceletCode;
+
+ @ApiModelProperty("位置")
+ private String location;
+
+ @ApiModelProperty("时间")
+ private String time;
+
+ @ApiModelProperty("经度")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ private String lat;
+
+ @ApiModelProperty("心率")
+ private String heartRate;
+
+ @ApiModelProperty("血氧")
+ private String bloodOxygen;
+
+ @ApiModelProperty("一氧化碳")
+ private String co;
+
+ @ApiModelProperty("甲烷")
+ private String gas;
+
+ @ApiModelProperty("硫化氢")
+ private String h2s;
+
+ @ApiModelProperty("氧气")
+ private String o2;
+
+ @ApiModelProperty("信号")
+ private String signal;
+
+ @ApiModelProperty("电量")
+ private String cell;
+
+ @ApiModelProperty("是否报警")
+ private boolean alarmFlag;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
new file mode 100644
index 0000000..efb4a23
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
@@ -0,0 +1,159 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 报警记录表
+ *
+ *
+ * @author zyj
+ * @since 2023-05-16
+ */
+@Data
+@ApiModel("Alarm")
+@TableName("br_bus_alarm")
+public class BusAlarm implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 项目ID
+ */
+ @ApiModelProperty(value = "项目ID")
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 报警类型
+ */
+ @ApiModelProperty(value = "报警类型")
+ @TableField("ALARM_TYPE")
+ private String alarmType;
+
+ /**
+ * 报警状态
+ */
+ @ApiModelProperty(value = "报警状态")
+ @TableField("ALARM_STATUS")
+ private String alarmStatus;
+
+ /**
+ * 报警值
+ */
+ @ApiModelProperty(value = "报警值")
+ @TableField("ALARM_VALUE")
+ private String alarmValue;
+
+ /**
+ * 报警图片
+ */
+ @ApiModelProperty(value = "报警图片")
+ @TableField("ALARM_IMAGE")
+ private String alarmImage;
+
+ /**
+ * 报警内容
+ */
+ @ApiModelProperty(value = "报警内容")
+ @TableField("ALARM_CONTENT")
+ private String alarmContent;
+
+ /**
+ * 报警时间
+ */
+ @ApiModelProperty(value = "报警时间")
+ @TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date alarmTime;
+
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "消警时间")
+ @TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date cancelTime;
+
+ /**
+ * 报警位置经度
+ */
+ @ApiModelProperty(value = "报警位置经度")
+ @TableField("ALARM_LNG")
+ private String alarmLng;
+
+ /**
+ * 报警位置纬度
+ */
+ @ApiModelProperty(value = "报警位置纬度")
+ @TableField("ALARM_LAT")
+ private String alarmLat;
+
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty("作业名称")
+ @TableField(exist = false)
+ private String workTitle;
+ @ApiModelProperty("所属道路")
+ @TableField(exist = false)
+ private String workRoad;
+ @ApiModelProperty("作业状态")
+ @TableField(exist = false)
+ private String projectState;
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+ @ApiModelProperty("负责人姓名")
+ @TableField(exist = false)
+ private String workPersonName;
+ @ApiModelProperty("负责人联系方式")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+
+ @Override
+ public String toString() {
+ return "BusAlarm{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ ", alarmType=" + alarmType +
+ ", alarmValue=" + alarmValue +
+ ", alarmStatus=" + alarmStatus +
+ ", alarmImage=" + alarmImage +
+ ", alarmContent=" + alarmContent +
+ ", alarmTime=" + alarmTime +
+ ", cancelTime=" + cancelTime +
+ ", alarmLng=" + alarmLng +
+ ", alarmLat=" + alarmLat +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
new file mode 100644
index 0000000..a0b7543
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
@@ -0,0 +1,100 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 事件表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event")
+@Data
+@ApiModel("BusEvent")
+public class BusEvent implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("事件ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件标题
+ */
+ @ApiModelProperty("事件名称")
+ @TableField("EVENT_TITLE")
+ private String eventTitle;
+
+ /**
+ * 上报人员
+ */
+ @ApiModelProperty("上报人员")
+ @TableField("UPLOAD_NAME")
+ private String uploadName;
+
+ /**
+ * 联系方式
+ */
+ @ApiModelProperty("联系方式")
+ @TableField("PHONE_NUMBER")
+ private String phoneNumber;
+
+ /**
+ * 事件描述
+ */
+ @ApiModelProperty("事件描述")
+ @TableField("EVENT_DESCRIPTION")
+ private String eventDescription;
+
+ @ApiModelProperty("经度")
+ @TableField("LNG")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ @TableField("LAT")
+ private String lat;
+
+ /**
+ * 事件上传时间
+ */
+ @ApiModelProperty("事件上传时间")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty("事件照片")
+ @TableField(exist = false)
+ private List imageList;
+
+
+
+ @Override
+ public String toString() {
+ return "BusEvent{" +
+ "id=" + id +
+ ", eventTitle=" + eventTitle +
+ ", uploadName=" + uploadName +
+ ", phoneNumber=" + phoneNumber +
+ ", eventDescription=" + eventDescription +
+ ", lng=" + lng +
+ ", lat=" + lat +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
new file mode 100644
index 0000000..1e75245
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
@@ -0,0 +1,47 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 事件图片表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event_image")
+@Data
+@ApiModel("BusEventImage")
+public class BusEventImage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件ID
+ */
+ @TableField("EVENT_ID")
+ private Long eventId;
+
+ /**
+ * 报警图片
+ */
+ @TableField("IMAGE")
+ @ApiModelProperty("图片url")
+ private String image;
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
new file mode 100644
index 0000000..df89c70
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
@@ -0,0 +1,113 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.casic.missiles.core.base.json.DateDeserializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("Device")
+@TableName("br_device")
+@Data
+public class Device implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @ApiModelProperty(value = "设备编号")
+ @TableField("DEVICE_CODE")
+ private String deviceCode;
+
+ /**
+ * 设备类型
+ */
+ @ApiModelProperty(value = "设备类型")
+ @TableField("DEVICE_TYPE")
+ private String deviceType;
+
+ /**
+ * 设备批次
+ */
+ @ApiModelProperty(value = "设备批次")
+ @TableField("DEVICE_BATCH")
+ private String deviceBatch;
+
+ /**
+ * 厂家
+ */
+ @ApiModelProperty(value = "厂家")
+ @TableField("MANUFACTURER")
+ private String manufacturer;
+
+ /**
+ * 是否供电
+ */
+ @ApiModelProperty(value = "是否供电")
+ @TableField("IS_POWER_SUPPLY")
+ private String isPowerSupply;
+
+ /**
+ * 创建时间
+ */
+ @ApiModelProperty(value = "创建时间",dataType = "Date")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty(value = "设备类型名称")
+ @TableField(exist = false)
+ private String deviceTypeName;
+
+ @ApiModelProperty(value = "是否供电名称")
+ @TableField(exist = false)
+ private String isPowerSupplyName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty(value = "当前状态")
+ @TableField(exist = false)
+ private String status;
+
+ @ApiModelProperty(value = "当前状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
+ @Override
+ public String toString() {
+ return "Device{" +
+ "id=" + id +
+ ", deviceCode=" + deviceCode +
+ ", deviceType=" + deviceType +
+ ", deviceBatch=" + deviceBatch +
+ ", manufacturer=" + manufacturer +
+ ", isPowerSupply=" + isPowerSupply +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
new file mode 100644
index 0000000..5ee7015
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
@@ -0,0 +1,99 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 设备扩展信息表(安全树)
+ *
+ *
+ * @author zyj
+ * @since 2023-04-27
+ */
+@Data
+@TableName("br_device_ext")
+public class DeviceExt implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备ID
+ */
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 摄像头编号
+ */
+ @TableField("CAMERA_CODE")
+ private String cameraCode;
+
+ /**
+ * 摄像头IP
+ */
+ @TableField("CAMERA_IP")
+ private String cameraIp;
+
+ /**
+ * 摄像头端口
+ */
+ @TableField("CAMERA_PORT")
+ private String cameraPort;
+
+ /**
+ * 激甲编号
+ */
+ @TableField("GAS_CODE")
+ private String gasCode;
+
+ /**
+ * 激甲IP
+ */
+ @TableField("GAS_IP")
+ private String gasIp;
+
+ /**
+ * 激甲端口
+ */
+ @TableField("GAS_PORT")
+ private String gasPort;
+
+ /**
+ * 甲烷报警阈值
+ */
+ @TableField("GAS_THRESHOLD")
+ private String gasThreshold;
+
+ @TableField(value = "HAT_LINING_CODE")
+ private String hatLiningCode;
+
+
+ @Override
+ public String toString() {
+ return "DeviceExt{" +
+ "id=" + id +
+ ", deviceId=" + deviceId +
+ ", cameraCode=" + cameraCode +
+ ", cameraIp=" + cameraIp +
+ ", cameraPort=" + cameraPort +
+ ", gasCode=" + gasCode +
+ ", gasIp=" + gasIp +
+ ", gasPort=" + gasPort +
+ ", gasThreshold=" + gasThreshold +
+ ", hatLiningCode=" + hatLiningCode +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java
new file mode 100644
index 0000000..c4f3472
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Data
+@ApiModel("ProjectDevice")
+@TableName("br_project_device")
+public class ProjectDevice implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业现场ID
+ */
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @TableField("DEVICE_ID")
+ @ApiModelProperty("设备ID(新增编辑时传)")
+ private Long deviceId;
+
+ /**
+ * 设备编号
+ */
+ @TableField(exist = false)
+ @ApiModelProperty("设备编号(详情中展示,新增编辑不用传)")
+ private String deviceCode;
+
+ @Override
+ public String toString() {
+ return "ProjectDevice{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ "}";
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
new file mode 100644
index 0000000..6fd7b24
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
@@ -0,0 +1,68 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "WorkerLocationDTO",description = "人员位置列表(首页)")
+@Data
+public class WorkerLocationDTO {
+
+ @ApiModelProperty("人员ID")
+ private Long workerId;
+
+ @ApiModelProperty("人员姓名")
+ private String workerName;
+
+ @ApiModelProperty("安全帽编号")
+ private String hatCode;
+
+ @ApiModelProperty("安全帽ID")
+ private Long hatId;
+
+ @ApiModelProperty("背心编号")
+ private String vastCode;
+
+ @ApiModelProperty("手环编号")
+ private String braceletCode;
+
+ @ApiModelProperty("位置")
+ private String location;
+
+ @ApiModelProperty("时间")
+ private String time;
+
+ @ApiModelProperty("经度")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ private String lat;
+
+ @ApiModelProperty("心率")
+ private String heartRate;
+
+ @ApiModelProperty("血氧")
+ private String bloodOxygen;
+
+ @ApiModelProperty("一氧化碳")
+ private String co;
+
+ @ApiModelProperty("甲烷")
+ private String gas;
+
+ @ApiModelProperty("硫化氢")
+ private String h2s;
+
+ @ApiModelProperty("氧气")
+ private String o2;
+
+ @ApiModelProperty("信号")
+ private String signal;
+
+ @ApiModelProperty("电量")
+ private String cell;
+
+ @ApiModelProperty("是否报警")
+ private boolean alarmFlag;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
new file mode 100644
index 0000000..efb4a23
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
@@ -0,0 +1,159 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 报警记录表
+ *
+ *
+ * @author zyj
+ * @since 2023-05-16
+ */
+@Data
+@ApiModel("Alarm")
+@TableName("br_bus_alarm")
+public class BusAlarm implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 项目ID
+ */
+ @ApiModelProperty(value = "项目ID")
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 报警类型
+ */
+ @ApiModelProperty(value = "报警类型")
+ @TableField("ALARM_TYPE")
+ private String alarmType;
+
+ /**
+ * 报警状态
+ */
+ @ApiModelProperty(value = "报警状态")
+ @TableField("ALARM_STATUS")
+ private String alarmStatus;
+
+ /**
+ * 报警值
+ */
+ @ApiModelProperty(value = "报警值")
+ @TableField("ALARM_VALUE")
+ private String alarmValue;
+
+ /**
+ * 报警图片
+ */
+ @ApiModelProperty(value = "报警图片")
+ @TableField("ALARM_IMAGE")
+ private String alarmImage;
+
+ /**
+ * 报警内容
+ */
+ @ApiModelProperty(value = "报警内容")
+ @TableField("ALARM_CONTENT")
+ private String alarmContent;
+
+ /**
+ * 报警时间
+ */
+ @ApiModelProperty(value = "报警时间")
+ @TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date alarmTime;
+
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "消警时间")
+ @TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date cancelTime;
+
+ /**
+ * 报警位置经度
+ */
+ @ApiModelProperty(value = "报警位置经度")
+ @TableField("ALARM_LNG")
+ private String alarmLng;
+
+ /**
+ * 报警位置纬度
+ */
+ @ApiModelProperty(value = "报警位置纬度")
+ @TableField("ALARM_LAT")
+ private String alarmLat;
+
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty("作业名称")
+ @TableField(exist = false)
+ private String workTitle;
+ @ApiModelProperty("所属道路")
+ @TableField(exist = false)
+ private String workRoad;
+ @ApiModelProperty("作业状态")
+ @TableField(exist = false)
+ private String projectState;
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+ @ApiModelProperty("负责人姓名")
+ @TableField(exist = false)
+ private String workPersonName;
+ @ApiModelProperty("负责人联系方式")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+
+ @Override
+ public String toString() {
+ return "BusAlarm{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ ", alarmType=" + alarmType +
+ ", alarmValue=" + alarmValue +
+ ", alarmStatus=" + alarmStatus +
+ ", alarmImage=" + alarmImage +
+ ", alarmContent=" + alarmContent +
+ ", alarmTime=" + alarmTime +
+ ", cancelTime=" + cancelTime +
+ ", alarmLng=" + alarmLng +
+ ", alarmLat=" + alarmLat +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
new file mode 100644
index 0000000..a0b7543
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
@@ -0,0 +1,100 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 事件表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event")
+@Data
+@ApiModel("BusEvent")
+public class BusEvent implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("事件ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件标题
+ */
+ @ApiModelProperty("事件名称")
+ @TableField("EVENT_TITLE")
+ private String eventTitle;
+
+ /**
+ * 上报人员
+ */
+ @ApiModelProperty("上报人员")
+ @TableField("UPLOAD_NAME")
+ private String uploadName;
+
+ /**
+ * 联系方式
+ */
+ @ApiModelProperty("联系方式")
+ @TableField("PHONE_NUMBER")
+ private String phoneNumber;
+
+ /**
+ * 事件描述
+ */
+ @ApiModelProperty("事件描述")
+ @TableField("EVENT_DESCRIPTION")
+ private String eventDescription;
+
+ @ApiModelProperty("经度")
+ @TableField("LNG")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ @TableField("LAT")
+ private String lat;
+
+ /**
+ * 事件上传时间
+ */
+ @ApiModelProperty("事件上传时间")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty("事件照片")
+ @TableField(exist = false)
+ private List imageList;
+
+
+
+ @Override
+ public String toString() {
+ return "BusEvent{" +
+ "id=" + id +
+ ", eventTitle=" + eventTitle +
+ ", uploadName=" + uploadName +
+ ", phoneNumber=" + phoneNumber +
+ ", eventDescription=" + eventDescription +
+ ", lng=" + lng +
+ ", lat=" + lat +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
new file mode 100644
index 0000000..1e75245
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
@@ -0,0 +1,47 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 事件图片表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event_image")
+@Data
+@ApiModel("BusEventImage")
+public class BusEventImage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件ID
+ */
+ @TableField("EVENT_ID")
+ private Long eventId;
+
+ /**
+ * 报警图片
+ */
+ @TableField("IMAGE")
+ @ApiModelProperty("图片url")
+ private String image;
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
new file mode 100644
index 0000000..df89c70
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
@@ -0,0 +1,113 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.casic.missiles.core.base.json.DateDeserializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("Device")
+@TableName("br_device")
+@Data
+public class Device implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @ApiModelProperty(value = "设备编号")
+ @TableField("DEVICE_CODE")
+ private String deviceCode;
+
+ /**
+ * 设备类型
+ */
+ @ApiModelProperty(value = "设备类型")
+ @TableField("DEVICE_TYPE")
+ private String deviceType;
+
+ /**
+ * 设备批次
+ */
+ @ApiModelProperty(value = "设备批次")
+ @TableField("DEVICE_BATCH")
+ private String deviceBatch;
+
+ /**
+ * 厂家
+ */
+ @ApiModelProperty(value = "厂家")
+ @TableField("MANUFACTURER")
+ private String manufacturer;
+
+ /**
+ * 是否供电
+ */
+ @ApiModelProperty(value = "是否供电")
+ @TableField("IS_POWER_SUPPLY")
+ private String isPowerSupply;
+
+ /**
+ * 创建时间
+ */
+ @ApiModelProperty(value = "创建时间",dataType = "Date")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty(value = "设备类型名称")
+ @TableField(exist = false)
+ private String deviceTypeName;
+
+ @ApiModelProperty(value = "是否供电名称")
+ @TableField(exist = false)
+ private String isPowerSupplyName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty(value = "当前状态")
+ @TableField(exist = false)
+ private String status;
+
+ @ApiModelProperty(value = "当前状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
+ @Override
+ public String toString() {
+ return "Device{" +
+ "id=" + id +
+ ", deviceCode=" + deviceCode +
+ ", deviceType=" + deviceType +
+ ", deviceBatch=" + deviceBatch +
+ ", manufacturer=" + manufacturer +
+ ", isPowerSupply=" + isPowerSupply +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
new file mode 100644
index 0000000..5ee7015
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
@@ -0,0 +1,99 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 设备扩展信息表(安全树)
+ *
+ *
+ * @author zyj
+ * @since 2023-04-27
+ */
+@Data
+@TableName("br_device_ext")
+public class DeviceExt implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备ID
+ */
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 摄像头编号
+ */
+ @TableField("CAMERA_CODE")
+ private String cameraCode;
+
+ /**
+ * 摄像头IP
+ */
+ @TableField("CAMERA_IP")
+ private String cameraIp;
+
+ /**
+ * 摄像头端口
+ */
+ @TableField("CAMERA_PORT")
+ private String cameraPort;
+
+ /**
+ * 激甲编号
+ */
+ @TableField("GAS_CODE")
+ private String gasCode;
+
+ /**
+ * 激甲IP
+ */
+ @TableField("GAS_IP")
+ private String gasIp;
+
+ /**
+ * 激甲端口
+ */
+ @TableField("GAS_PORT")
+ private String gasPort;
+
+ /**
+ * 甲烷报警阈值
+ */
+ @TableField("GAS_THRESHOLD")
+ private String gasThreshold;
+
+ @TableField(value = "HAT_LINING_CODE")
+ private String hatLiningCode;
+
+
+ @Override
+ public String toString() {
+ return "DeviceExt{" +
+ "id=" + id +
+ ", deviceId=" + deviceId +
+ ", cameraCode=" + cameraCode +
+ ", cameraIp=" + cameraIp +
+ ", cameraPort=" + cameraPort +
+ ", gasCode=" + gasCode +
+ ", gasIp=" + gasIp +
+ ", gasPort=" + gasPort +
+ ", gasThreshold=" + gasThreshold +
+ ", hatLiningCode=" + hatLiningCode +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java
new file mode 100644
index 0000000..c4f3472
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Data
+@ApiModel("ProjectDevice")
+@TableName("br_project_device")
+public class ProjectDevice implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业现场ID
+ */
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @TableField("DEVICE_ID")
+ @ApiModelProperty("设备ID(新增编辑时传)")
+ private Long deviceId;
+
+ /**
+ * 设备编号
+ */
+ @TableField(exist = false)
+ @ApiModelProperty("设备编号(详情中展示,新增编辑不用传)")
+ private String deviceCode;
+
+ @Override
+ public String toString() {
+ return "ProjectDevice{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java
new file mode 100644
index 0000000..10b23c4
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java
@@ -0,0 +1,104 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("ProjectWorker")
+@TableName("br_project_worker")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProjectWorker implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业现场ID
+ */
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 人员ID
+ */
+ @ApiModelProperty("人员ID")
+ @TableField("WORKER_ID")
+ private Long workerId;
+
+ /**
+ * 安全帽编号
+ */
+ @ApiModelProperty("安全帽编号")
+ @TableField("HAT_CODE")
+ private String hatCode;
+
+ /**
+ * 背心编号
+ */
+ @ApiModelProperty("背心编号")
+ @TableField("VAST_CODE")
+ private String vastCode;
+
+ /**
+ * 手环编号
+ */
+ @ApiModelProperty("手环编号")
+ @TableField("BRACELET_CODE")
+ private String braceletCode;
+
+ @ApiModelProperty("人员姓名(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerName;
+
+ @ApiModelProperty("人员部门ID(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerDeptId;
+
+ @ApiModelProperty("人员部门名称(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerDeptName;
+
+ @ApiModelProperty("人员联系方式(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerPhoneNumber;
+
+ public ProjectWorker(Long projectId, Long workerId) {
+ this.projectId = projectId;
+ this.workerId = workerId;
+ }
+
+ @Override
+ public String toString() {
+ return "ProjectWorker{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", workerId=" + workerId +
+ ", hatCode=" + hatCode +
+ ", vastCode=" + vastCode +
+ ", braceletCode=" + braceletCode +
+ "}";
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
new file mode 100644
index 0000000..6fd7b24
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
@@ -0,0 +1,68 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "WorkerLocationDTO",description = "人员位置列表(首页)")
+@Data
+public class WorkerLocationDTO {
+
+ @ApiModelProperty("人员ID")
+ private Long workerId;
+
+ @ApiModelProperty("人员姓名")
+ private String workerName;
+
+ @ApiModelProperty("安全帽编号")
+ private String hatCode;
+
+ @ApiModelProperty("安全帽ID")
+ private Long hatId;
+
+ @ApiModelProperty("背心编号")
+ private String vastCode;
+
+ @ApiModelProperty("手环编号")
+ private String braceletCode;
+
+ @ApiModelProperty("位置")
+ private String location;
+
+ @ApiModelProperty("时间")
+ private String time;
+
+ @ApiModelProperty("经度")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ private String lat;
+
+ @ApiModelProperty("心率")
+ private String heartRate;
+
+ @ApiModelProperty("血氧")
+ private String bloodOxygen;
+
+ @ApiModelProperty("一氧化碳")
+ private String co;
+
+ @ApiModelProperty("甲烷")
+ private String gas;
+
+ @ApiModelProperty("硫化氢")
+ private String h2s;
+
+ @ApiModelProperty("氧气")
+ private String o2;
+
+ @ApiModelProperty("信号")
+ private String signal;
+
+ @ApiModelProperty("电量")
+ private String cell;
+
+ @ApiModelProperty("是否报警")
+ private boolean alarmFlag;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
new file mode 100644
index 0000000..efb4a23
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
@@ -0,0 +1,159 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 报警记录表
+ *
+ *
+ * @author zyj
+ * @since 2023-05-16
+ */
+@Data
+@ApiModel("Alarm")
+@TableName("br_bus_alarm")
+public class BusAlarm implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 项目ID
+ */
+ @ApiModelProperty(value = "项目ID")
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 报警类型
+ */
+ @ApiModelProperty(value = "报警类型")
+ @TableField("ALARM_TYPE")
+ private String alarmType;
+
+ /**
+ * 报警状态
+ */
+ @ApiModelProperty(value = "报警状态")
+ @TableField("ALARM_STATUS")
+ private String alarmStatus;
+
+ /**
+ * 报警值
+ */
+ @ApiModelProperty(value = "报警值")
+ @TableField("ALARM_VALUE")
+ private String alarmValue;
+
+ /**
+ * 报警图片
+ */
+ @ApiModelProperty(value = "报警图片")
+ @TableField("ALARM_IMAGE")
+ private String alarmImage;
+
+ /**
+ * 报警内容
+ */
+ @ApiModelProperty(value = "报警内容")
+ @TableField("ALARM_CONTENT")
+ private String alarmContent;
+
+ /**
+ * 报警时间
+ */
+ @ApiModelProperty(value = "报警时间")
+ @TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date alarmTime;
+
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "消警时间")
+ @TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date cancelTime;
+
+ /**
+ * 报警位置经度
+ */
+ @ApiModelProperty(value = "报警位置经度")
+ @TableField("ALARM_LNG")
+ private String alarmLng;
+
+ /**
+ * 报警位置纬度
+ */
+ @ApiModelProperty(value = "报警位置纬度")
+ @TableField("ALARM_LAT")
+ private String alarmLat;
+
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty("作业名称")
+ @TableField(exist = false)
+ private String workTitle;
+ @ApiModelProperty("所属道路")
+ @TableField(exist = false)
+ private String workRoad;
+ @ApiModelProperty("作业状态")
+ @TableField(exist = false)
+ private String projectState;
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+ @ApiModelProperty("负责人姓名")
+ @TableField(exist = false)
+ private String workPersonName;
+ @ApiModelProperty("负责人联系方式")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+
+ @Override
+ public String toString() {
+ return "BusAlarm{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ ", alarmType=" + alarmType +
+ ", alarmValue=" + alarmValue +
+ ", alarmStatus=" + alarmStatus +
+ ", alarmImage=" + alarmImage +
+ ", alarmContent=" + alarmContent +
+ ", alarmTime=" + alarmTime +
+ ", cancelTime=" + cancelTime +
+ ", alarmLng=" + alarmLng +
+ ", alarmLat=" + alarmLat +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
new file mode 100644
index 0000000..a0b7543
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
@@ -0,0 +1,100 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 事件表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event")
+@Data
+@ApiModel("BusEvent")
+public class BusEvent implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("事件ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件标题
+ */
+ @ApiModelProperty("事件名称")
+ @TableField("EVENT_TITLE")
+ private String eventTitle;
+
+ /**
+ * 上报人员
+ */
+ @ApiModelProperty("上报人员")
+ @TableField("UPLOAD_NAME")
+ private String uploadName;
+
+ /**
+ * 联系方式
+ */
+ @ApiModelProperty("联系方式")
+ @TableField("PHONE_NUMBER")
+ private String phoneNumber;
+
+ /**
+ * 事件描述
+ */
+ @ApiModelProperty("事件描述")
+ @TableField("EVENT_DESCRIPTION")
+ private String eventDescription;
+
+ @ApiModelProperty("经度")
+ @TableField("LNG")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ @TableField("LAT")
+ private String lat;
+
+ /**
+ * 事件上传时间
+ */
+ @ApiModelProperty("事件上传时间")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty("事件照片")
+ @TableField(exist = false)
+ private List imageList;
+
+
+
+ @Override
+ public String toString() {
+ return "BusEvent{" +
+ "id=" + id +
+ ", eventTitle=" + eventTitle +
+ ", uploadName=" + uploadName +
+ ", phoneNumber=" + phoneNumber +
+ ", eventDescription=" + eventDescription +
+ ", lng=" + lng +
+ ", lat=" + lat +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
new file mode 100644
index 0000000..1e75245
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
@@ -0,0 +1,47 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 事件图片表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event_image")
+@Data
+@ApiModel("BusEventImage")
+public class BusEventImage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件ID
+ */
+ @TableField("EVENT_ID")
+ private Long eventId;
+
+ /**
+ * 报警图片
+ */
+ @TableField("IMAGE")
+ @ApiModelProperty("图片url")
+ private String image;
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
new file mode 100644
index 0000000..df89c70
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
@@ -0,0 +1,113 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.casic.missiles.core.base.json.DateDeserializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("Device")
+@TableName("br_device")
+@Data
+public class Device implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @ApiModelProperty(value = "设备编号")
+ @TableField("DEVICE_CODE")
+ private String deviceCode;
+
+ /**
+ * 设备类型
+ */
+ @ApiModelProperty(value = "设备类型")
+ @TableField("DEVICE_TYPE")
+ private String deviceType;
+
+ /**
+ * 设备批次
+ */
+ @ApiModelProperty(value = "设备批次")
+ @TableField("DEVICE_BATCH")
+ private String deviceBatch;
+
+ /**
+ * 厂家
+ */
+ @ApiModelProperty(value = "厂家")
+ @TableField("MANUFACTURER")
+ private String manufacturer;
+
+ /**
+ * 是否供电
+ */
+ @ApiModelProperty(value = "是否供电")
+ @TableField("IS_POWER_SUPPLY")
+ private String isPowerSupply;
+
+ /**
+ * 创建时间
+ */
+ @ApiModelProperty(value = "创建时间",dataType = "Date")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty(value = "设备类型名称")
+ @TableField(exist = false)
+ private String deviceTypeName;
+
+ @ApiModelProperty(value = "是否供电名称")
+ @TableField(exist = false)
+ private String isPowerSupplyName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty(value = "当前状态")
+ @TableField(exist = false)
+ private String status;
+
+ @ApiModelProperty(value = "当前状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
+ @Override
+ public String toString() {
+ return "Device{" +
+ "id=" + id +
+ ", deviceCode=" + deviceCode +
+ ", deviceType=" + deviceType +
+ ", deviceBatch=" + deviceBatch +
+ ", manufacturer=" + manufacturer +
+ ", isPowerSupply=" + isPowerSupply +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
new file mode 100644
index 0000000..5ee7015
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
@@ -0,0 +1,99 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 设备扩展信息表(安全树)
+ *
+ *
+ * @author zyj
+ * @since 2023-04-27
+ */
+@Data
+@TableName("br_device_ext")
+public class DeviceExt implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备ID
+ */
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 摄像头编号
+ */
+ @TableField("CAMERA_CODE")
+ private String cameraCode;
+
+ /**
+ * 摄像头IP
+ */
+ @TableField("CAMERA_IP")
+ private String cameraIp;
+
+ /**
+ * 摄像头端口
+ */
+ @TableField("CAMERA_PORT")
+ private String cameraPort;
+
+ /**
+ * 激甲编号
+ */
+ @TableField("GAS_CODE")
+ private String gasCode;
+
+ /**
+ * 激甲IP
+ */
+ @TableField("GAS_IP")
+ private String gasIp;
+
+ /**
+ * 激甲端口
+ */
+ @TableField("GAS_PORT")
+ private String gasPort;
+
+ /**
+ * 甲烷报警阈值
+ */
+ @TableField("GAS_THRESHOLD")
+ private String gasThreshold;
+
+ @TableField(value = "HAT_LINING_CODE")
+ private String hatLiningCode;
+
+
+ @Override
+ public String toString() {
+ return "DeviceExt{" +
+ "id=" + id +
+ ", deviceId=" + deviceId +
+ ", cameraCode=" + cameraCode +
+ ", cameraIp=" + cameraIp +
+ ", cameraPort=" + cameraPort +
+ ", gasCode=" + gasCode +
+ ", gasIp=" + gasIp +
+ ", gasPort=" + gasPort +
+ ", gasThreshold=" + gasThreshold +
+ ", hatLiningCode=" + hatLiningCode +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java
new file mode 100644
index 0000000..c4f3472
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Data
+@ApiModel("ProjectDevice")
+@TableName("br_project_device")
+public class ProjectDevice implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业现场ID
+ */
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @TableField("DEVICE_ID")
+ @ApiModelProperty("设备ID(新增编辑时传)")
+ private Long deviceId;
+
+ /**
+ * 设备编号
+ */
+ @TableField(exist = false)
+ @ApiModelProperty("设备编号(详情中展示,新增编辑不用传)")
+ private String deviceCode;
+
+ @Override
+ public String toString() {
+ return "ProjectDevice{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java
new file mode 100644
index 0000000..10b23c4
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java
@@ -0,0 +1,104 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("ProjectWorker")
+@TableName("br_project_worker")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProjectWorker implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业现场ID
+ */
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 人员ID
+ */
+ @ApiModelProperty("人员ID")
+ @TableField("WORKER_ID")
+ private Long workerId;
+
+ /**
+ * 安全帽编号
+ */
+ @ApiModelProperty("安全帽编号")
+ @TableField("HAT_CODE")
+ private String hatCode;
+
+ /**
+ * 背心编号
+ */
+ @ApiModelProperty("背心编号")
+ @TableField("VAST_CODE")
+ private String vastCode;
+
+ /**
+ * 手环编号
+ */
+ @ApiModelProperty("手环编号")
+ @TableField("BRACELET_CODE")
+ private String braceletCode;
+
+ @ApiModelProperty("人员姓名(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerName;
+
+ @ApiModelProperty("人员部门ID(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerDeptId;
+
+ @ApiModelProperty("人员部门名称(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerDeptName;
+
+ @ApiModelProperty("人员联系方式(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerPhoneNumber;
+
+ public ProjectWorker(Long projectId, Long workerId) {
+ this.projectId = projectId;
+ this.workerId = workerId;
+ }
+
+ @Override
+ public String toString() {
+ return "ProjectWorker{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", workerId=" + workerId +
+ ", hatCode=" + hatCode +
+ ", vastCode=" + vastCode +
+ ", braceletCode=" + braceletCode +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/WorkSiteInfo.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/WorkSiteInfo.java
new file mode 100644
index 0000000..fa6f41d
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/WorkSiteInfo.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 作业现场表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("WorkSiteInfo")
+@TableName("br_work_site_info")
+@Data
+public class WorkSiteInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("作业现场ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业名称
+ */
+ @ApiModelProperty("作业名称")
+ @TableField("WORK_TITLE")
+ private String workTitle;
+
+ /**
+ * 责任人
+ */
+ @ApiModelProperty("责任人(人员ID)")
+ @TableField("WORK_PERSON")
+ private Long workPerson;
+
+ /**
+ * 作业描述
+ */
+ @ApiModelProperty("作业描述")
+ @TableField("WORK_SITE_DESC")
+ private String workSiteDesc;
+
+ /**
+ * 作业状态
+ */
+ @ApiModelProperty("作业状态")
+ @TableField("PROJECT_STATE")
+ private String projectState;
+
+ /**
+ * 所属道路
+ */
+ @ApiModelProperty("所属道路")
+ @TableField("WORK_ROAD")
+ private String workRoad;
+
+ @TableField("IMAGE_URL")
+ private String imageUrl;
+
+ @TableField("CREATE_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+ @TableField("UPDATE_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ @ApiModelProperty("开始时间")
+ @TableField("START_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date startTime;
+
+ @ApiModelProperty("结束时间")
+ @TableField("FINISH_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date finishTime;
+
+ @ApiModelProperty("负责人姓名(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workPersonName;
+
+ @ApiModelProperty("负责人联系方式(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+ @ApiModelProperty("负责人所属部门ID(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private Long workPersonDeptId;
+
+ @ApiModelProperty("负责人所属部门名称(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workPersonDeptName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+
+ @Override
+ public String toString() {
+ return "WorkSiteInfo{" +
+ "id=" + id +
+ ", workTitle=" + workTitle +
+ ", workPerson=" + workPerson +
+ ", workSiteDesc=" + workSiteDesc +
+ ", projectState=" + projectState +
+ ", imageUrl=" + imageUrl +
+ ", updateTime=" + updateTime +
+ ", workRoad=" + workRoad +
+ "}";
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
new file mode 100644
index 0000000..6fd7b24
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
@@ -0,0 +1,68 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "WorkerLocationDTO",description = "人员位置列表(首页)")
+@Data
+public class WorkerLocationDTO {
+
+ @ApiModelProperty("人员ID")
+ private Long workerId;
+
+ @ApiModelProperty("人员姓名")
+ private String workerName;
+
+ @ApiModelProperty("安全帽编号")
+ private String hatCode;
+
+ @ApiModelProperty("安全帽ID")
+ private Long hatId;
+
+ @ApiModelProperty("背心编号")
+ private String vastCode;
+
+ @ApiModelProperty("手环编号")
+ private String braceletCode;
+
+ @ApiModelProperty("位置")
+ private String location;
+
+ @ApiModelProperty("时间")
+ private String time;
+
+ @ApiModelProperty("经度")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ private String lat;
+
+ @ApiModelProperty("心率")
+ private String heartRate;
+
+ @ApiModelProperty("血氧")
+ private String bloodOxygen;
+
+ @ApiModelProperty("一氧化碳")
+ private String co;
+
+ @ApiModelProperty("甲烷")
+ private String gas;
+
+ @ApiModelProperty("硫化氢")
+ private String h2s;
+
+ @ApiModelProperty("氧气")
+ private String o2;
+
+ @ApiModelProperty("信号")
+ private String signal;
+
+ @ApiModelProperty("电量")
+ private String cell;
+
+ @ApiModelProperty("是否报警")
+ private boolean alarmFlag;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
new file mode 100644
index 0000000..efb4a23
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
@@ -0,0 +1,159 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 报警记录表
+ *
+ *
+ * @author zyj
+ * @since 2023-05-16
+ */
+@Data
+@ApiModel("Alarm")
+@TableName("br_bus_alarm")
+public class BusAlarm implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 项目ID
+ */
+ @ApiModelProperty(value = "项目ID")
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 报警类型
+ */
+ @ApiModelProperty(value = "报警类型")
+ @TableField("ALARM_TYPE")
+ private String alarmType;
+
+ /**
+ * 报警状态
+ */
+ @ApiModelProperty(value = "报警状态")
+ @TableField("ALARM_STATUS")
+ private String alarmStatus;
+
+ /**
+ * 报警值
+ */
+ @ApiModelProperty(value = "报警值")
+ @TableField("ALARM_VALUE")
+ private String alarmValue;
+
+ /**
+ * 报警图片
+ */
+ @ApiModelProperty(value = "报警图片")
+ @TableField("ALARM_IMAGE")
+ private String alarmImage;
+
+ /**
+ * 报警内容
+ */
+ @ApiModelProperty(value = "报警内容")
+ @TableField("ALARM_CONTENT")
+ private String alarmContent;
+
+ /**
+ * 报警时间
+ */
+ @ApiModelProperty(value = "报警时间")
+ @TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date alarmTime;
+
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "消警时间")
+ @TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date cancelTime;
+
+ /**
+ * 报警位置经度
+ */
+ @ApiModelProperty(value = "报警位置经度")
+ @TableField("ALARM_LNG")
+ private String alarmLng;
+
+ /**
+ * 报警位置纬度
+ */
+ @ApiModelProperty(value = "报警位置纬度")
+ @TableField("ALARM_LAT")
+ private String alarmLat;
+
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty("作业名称")
+ @TableField(exist = false)
+ private String workTitle;
+ @ApiModelProperty("所属道路")
+ @TableField(exist = false)
+ private String workRoad;
+ @ApiModelProperty("作业状态")
+ @TableField(exist = false)
+ private String projectState;
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+ @ApiModelProperty("负责人姓名")
+ @TableField(exist = false)
+ private String workPersonName;
+ @ApiModelProperty("负责人联系方式")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+
+ @Override
+ public String toString() {
+ return "BusAlarm{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ ", alarmType=" + alarmType +
+ ", alarmValue=" + alarmValue +
+ ", alarmStatus=" + alarmStatus +
+ ", alarmImage=" + alarmImage +
+ ", alarmContent=" + alarmContent +
+ ", alarmTime=" + alarmTime +
+ ", cancelTime=" + cancelTime +
+ ", alarmLng=" + alarmLng +
+ ", alarmLat=" + alarmLat +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
new file mode 100644
index 0000000..a0b7543
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
@@ -0,0 +1,100 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 事件表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event")
+@Data
+@ApiModel("BusEvent")
+public class BusEvent implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("事件ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件标题
+ */
+ @ApiModelProperty("事件名称")
+ @TableField("EVENT_TITLE")
+ private String eventTitle;
+
+ /**
+ * 上报人员
+ */
+ @ApiModelProperty("上报人员")
+ @TableField("UPLOAD_NAME")
+ private String uploadName;
+
+ /**
+ * 联系方式
+ */
+ @ApiModelProperty("联系方式")
+ @TableField("PHONE_NUMBER")
+ private String phoneNumber;
+
+ /**
+ * 事件描述
+ */
+ @ApiModelProperty("事件描述")
+ @TableField("EVENT_DESCRIPTION")
+ private String eventDescription;
+
+ @ApiModelProperty("经度")
+ @TableField("LNG")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ @TableField("LAT")
+ private String lat;
+
+ /**
+ * 事件上传时间
+ */
+ @ApiModelProperty("事件上传时间")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty("事件照片")
+ @TableField(exist = false)
+ private List imageList;
+
+
+
+ @Override
+ public String toString() {
+ return "BusEvent{" +
+ "id=" + id +
+ ", eventTitle=" + eventTitle +
+ ", uploadName=" + uploadName +
+ ", phoneNumber=" + phoneNumber +
+ ", eventDescription=" + eventDescription +
+ ", lng=" + lng +
+ ", lat=" + lat +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
new file mode 100644
index 0000000..1e75245
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
@@ -0,0 +1,47 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 事件图片表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event_image")
+@Data
+@ApiModel("BusEventImage")
+public class BusEventImage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件ID
+ */
+ @TableField("EVENT_ID")
+ private Long eventId;
+
+ /**
+ * 报警图片
+ */
+ @TableField("IMAGE")
+ @ApiModelProperty("图片url")
+ private String image;
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
new file mode 100644
index 0000000..df89c70
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
@@ -0,0 +1,113 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.casic.missiles.core.base.json.DateDeserializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("Device")
+@TableName("br_device")
+@Data
+public class Device implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @ApiModelProperty(value = "设备编号")
+ @TableField("DEVICE_CODE")
+ private String deviceCode;
+
+ /**
+ * 设备类型
+ */
+ @ApiModelProperty(value = "设备类型")
+ @TableField("DEVICE_TYPE")
+ private String deviceType;
+
+ /**
+ * 设备批次
+ */
+ @ApiModelProperty(value = "设备批次")
+ @TableField("DEVICE_BATCH")
+ private String deviceBatch;
+
+ /**
+ * 厂家
+ */
+ @ApiModelProperty(value = "厂家")
+ @TableField("MANUFACTURER")
+ private String manufacturer;
+
+ /**
+ * 是否供电
+ */
+ @ApiModelProperty(value = "是否供电")
+ @TableField("IS_POWER_SUPPLY")
+ private String isPowerSupply;
+
+ /**
+ * 创建时间
+ */
+ @ApiModelProperty(value = "创建时间",dataType = "Date")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty(value = "设备类型名称")
+ @TableField(exist = false)
+ private String deviceTypeName;
+
+ @ApiModelProperty(value = "是否供电名称")
+ @TableField(exist = false)
+ private String isPowerSupplyName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty(value = "当前状态")
+ @TableField(exist = false)
+ private String status;
+
+ @ApiModelProperty(value = "当前状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
+ @Override
+ public String toString() {
+ return "Device{" +
+ "id=" + id +
+ ", deviceCode=" + deviceCode +
+ ", deviceType=" + deviceType +
+ ", deviceBatch=" + deviceBatch +
+ ", manufacturer=" + manufacturer +
+ ", isPowerSupply=" + isPowerSupply +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
new file mode 100644
index 0000000..5ee7015
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
@@ -0,0 +1,99 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 设备扩展信息表(安全树)
+ *
+ *
+ * @author zyj
+ * @since 2023-04-27
+ */
+@Data
+@TableName("br_device_ext")
+public class DeviceExt implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备ID
+ */
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 摄像头编号
+ */
+ @TableField("CAMERA_CODE")
+ private String cameraCode;
+
+ /**
+ * 摄像头IP
+ */
+ @TableField("CAMERA_IP")
+ private String cameraIp;
+
+ /**
+ * 摄像头端口
+ */
+ @TableField("CAMERA_PORT")
+ private String cameraPort;
+
+ /**
+ * 激甲编号
+ */
+ @TableField("GAS_CODE")
+ private String gasCode;
+
+ /**
+ * 激甲IP
+ */
+ @TableField("GAS_IP")
+ private String gasIp;
+
+ /**
+ * 激甲端口
+ */
+ @TableField("GAS_PORT")
+ private String gasPort;
+
+ /**
+ * 甲烷报警阈值
+ */
+ @TableField("GAS_THRESHOLD")
+ private String gasThreshold;
+
+ @TableField(value = "HAT_LINING_CODE")
+ private String hatLiningCode;
+
+
+ @Override
+ public String toString() {
+ return "DeviceExt{" +
+ "id=" + id +
+ ", deviceId=" + deviceId +
+ ", cameraCode=" + cameraCode +
+ ", cameraIp=" + cameraIp +
+ ", cameraPort=" + cameraPort +
+ ", gasCode=" + gasCode +
+ ", gasIp=" + gasIp +
+ ", gasPort=" + gasPort +
+ ", gasThreshold=" + gasThreshold +
+ ", hatLiningCode=" + hatLiningCode +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java
new file mode 100644
index 0000000..c4f3472
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Data
+@ApiModel("ProjectDevice")
+@TableName("br_project_device")
+public class ProjectDevice implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业现场ID
+ */
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @TableField("DEVICE_ID")
+ @ApiModelProperty("设备ID(新增编辑时传)")
+ private Long deviceId;
+
+ /**
+ * 设备编号
+ */
+ @TableField(exist = false)
+ @ApiModelProperty("设备编号(详情中展示,新增编辑不用传)")
+ private String deviceCode;
+
+ @Override
+ public String toString() {
+ return "ProjectDevice{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java
new file mode 100644
index 0000000..10b23c4
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java
@@ -0,0 +1,104 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("ProjectWorker")
+@TableName("br_project_worker")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProjectWorker implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业现场ID
+ */
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 人员ID
+ */
+ @ApiModelProperty("人员ID")
+ @TableField("WORKER_ID")
+ private Long workerId;
+
+ /**
+ * 安全帽编号
+ */
+ @ApiModelProperty("安全帽编号")
+ @TableField("HAT_CODE")
+ private String hatCode;
+
+ /**
+ * 背心编号
+ */
+ @ApiModelProperty("背心编号")
+ @TableField("VAST_CODE")
+ private String vastCode;
+
+ /**
+ * 手环编号
+ */
+ @ApiModelProperty("手环编号")
+ @TableField("BRACELET_CODE")
+ private String braceletCode;
+
+ @ApiModelProperty("人员姓名(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerName;
+
+ @ApiModelProperty("人员部门ID(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerDeptId;
+
+ @ApiModelProperty("人员部门名称(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerDeptName;
+
+ @ApiModelProperty("人员联系方式(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerPhoneNumber;
+
+ public ProjectWorker(Long projectId, Long workerId) {
+ this.projectId = projectId;
+ this.workerId = workerId;
+ }
+
+ @Override
+ public String toString() {
+ return "ProjectWorker{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", workerId=" + workerId +
+ ", hatCode=" + hatCode +
+ ", vastCode=" + vastCode +
+ ", braceletCode=" + braceletCode +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/WorkSiteInfo.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/WorkSiteInfo.java
new file mode 100644
index 0000000..fa6f41d
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/WorkSiteInfo.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 作业现场表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("WorkSiteInfo")
+@TableName("br_work_site_info")
+@Data
+public class WorkSiteInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("作业现场ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业名称
+ */
+ @ApiModelProperty("作业名称")
+ @TableField("WORK_TITLE")
+ private String workTitle;
+
+ /**
+ * 责任人
+ */
+ @ApiModelProperty("责任人(人员ID)")
+ @TableField("WORK_PERSON")
+ private Long workPerson;
+
+ /**
+ * 作业描述
+ */
+ @ApiModelProperty("作业描述")
+ @TableField("WORK_SITE_DESC")
+ private String workSiteDesc;
+
+ /**
+ * 作业状态
+ */
+ @ApiModelProperty("作业状态")
+ @TableField("PROJECT_STATE")
+ private String projectState;
+
+ /**
+ * 所属道路
+ */
+ @ApiModelProperty("所属道路")
+ @TableField("WORK_ROAD")
+ private String workRoad;
+
+ @TableField("IMAGE_URL")
+ private String imageUrl;
+
+ @TableField("CREATE_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+ @TableField("UPDATE_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ @ApiModelProperty("开始时间")
+ @TableField("START_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date startTime;
+
+ @ApiModelProperty("结束时间")
+ @TableField("FINISH_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date finishTime;
+
+ @ApiModelProperty("负责人姓名(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workPersonName;
+
+ @ApiModelProperty("负责人联系方式(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+ @ApiModelProperty("负责人所属部门ID(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private Long workPersonDeptId;
+
+ @ApiModelProperty("负责人所属部门名称(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workPersonDeptName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+
+ @Override
+ public String toString() {
+ return "WorkSiteInfo{" +
+ "id=" + id +
+ ", workTitle=" + workTitle +
+ ", workPerson=" + workPerson +
+ ", workSiteDesc=" + workSiteDesc +
+ ", projectState=" + projectState +
+ ", imageUrl=" + imageUrl +
+ ", updateTime=" + updateTime +
+ ", workRoad=" + workRoad +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Worker.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Worker.java
new file mode 100644
index 0000000..28a4daa
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Worker.java
@@ -0,0 +1,147 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("Worker")
+@TableName("br_worker")
+@Data
+public class Worker implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "人员ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 姓名
+ */
+ @ApiModelProperty(value = "姓名")
+ @TableField("WORKER_NAME")
+ private String workerName;
+
+ /**
+ * 性别
+ */
+ @ApiModelProperty(value = "性别")
+ @TableField("GENDER")
+ private String gender;
+
+ /**
+ * 所属部门
+ */
+ @ApiModelProperty(value = "所属部门(人员管理)")
+ @TableField("DEPT_ID")
+ private Long deptId;
+
+ /**
+ * 所属单位
+ */
+ @ApiModelProperty(value = "所属单位(入场申请中使用)")
+ @TableField("OWNER_SHIP")
+ private String ownerShip;
+
+ /**
+ * 联系方式
+ */
+ @ApiModelProperty(value = "联系方式")
+ @TableField("PHONE_NUMBER")
+ private String phoneNumber;
+
+ /**
+ * 证件号
+ */
+ @ApiModelProperty(value = "证件号")
+ @TableField("ID_CARD_NUMBER")
+ private String idCardNumber;
+
+ /**
+ * 入场原因
+ */
+ @ApiModelProperty(value = "入场原因(入场申请中使用)")
+ @TableField("ENTER_REASON")
+ private String enterReason;
+
+ /**
+ * 入场人脸照片
+ */
+ @ApiModelProperty(value = "人脸照片(照片路径)")
+ @TableField("WORKER_AVATAR")
+ private String workerAvatar;
+
+ /**
+ * 申请入场时间
+ */
+ @ApiModelProperty(value = "注册时间/申请入场时间")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ /**
+ * 人员类型
+ */
+ @ApiModelProperty(value = "人员类型(区分人员管理和入场申请)")
+ @TableField("WORKER_TYPE")
+ private String workerType;
+
+ @ApiModelProperty(value = "性别名称")
+ @TableField(exist = false)
+ private String genderName;
+
+ @ApiModelProperty(value = "部门名称")
+ @TableField(exist = false)
+ private String deptName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty(value = "当前状态")
+ @TableField(exist = false)
+ private String status;
+
+ @ApiModelProperty(value = "当前状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
+ @ApiModelProperty(value = "是否注册(0未注册;1已注册)",allowableValues = "0,1")
+ @TableField(exist = false)
+ private String isRegister;
+
+ @Override
+ public String toString() {
+ return "Worker{" +
+ "id=" + id +
+ ", workerName=" + workerName +
+ ", gender=" + gender +
+ ", deptId=" + deptId +
+ ", ownerShip=" + ownerShip +
+ ", phoneNumber=" + phoneNumber +
+ ", idCardNumber=" + idCardNumber +
+ ", enterReason=" + enterReason +
+ ", workerAvatar=" + workerAvatar +
+ ", createTime=" + createTime +
+ ", workerType=" + workerType +
+ "}";
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9e20bc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+**/target/**
+logs/
+*.iml
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5fa98f0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# casic项目 V2.0.0
+
+[^_^]: # (Talk is cheap,Show me the code!)
+
+## 介绍
+基于SpringBoot,致力于做更简洁的后台管理系统,完美整合springboot2.4 + shiro + mybatis-plus !
+基于casic项目代码简洁,注释丰富,上手容易,同时包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块)
+可以直接作为一个后台管理系统的脚手架! 2021目标 `更简洁`,`更规范`!
+
+
+#### 其他
+>* [git地址](http://192.168.0.203:8080/gitbucket)
+>* [本地免登地址](http://localhost:8083/route/mockToken)
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
new file mode 100644
index 0000000..353504b
--- /dev/null
+++ b/casic_video_283_server/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+
+ com.casic
+ casic_video_283
+ ../pom.xml
+ 1.0.0
+
+
+ casic_video_283_server
+ 1.0.0
+ jar
+ casic_video_283-server
+ casic 的spring boot版本
+
+
+
+
+ com.casic
+ casic-core
+ ${core.version}
+ provided
+
+
+ com.casic
+ casic-admin-support
+ ${admin.version}
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${boot.version}
+ provided
+
+
+
+
+
+ com.casic
+ casic-file
+ ${admin.version}
+
+
+ com.casic
+ casic-file-support
+ ${admin.version}
+
+
+ io.springfox
+ springfox-swagger2
+ ${swagger.version}
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.version}
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+
+
+
+
\ No newline at end of file
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
new file mode 100644
index 0000000..1f82ebb
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusAlarmController.java
@@ -0,0 +1,102 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_MANUAL_CANCEL;
+
+/**
+ *
+ * 报警记录表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "报警管理接口")
+@Controller
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class BusAlarmController extends BaseController {
+
+ private final IBusAlarmService alarmService;
+
+ @ApiOperation("报警上报接口")
+ @PostMapping("/upload")
+ @ResponseBody
+ public Object upload(@RequestBody AlarmUpload alarmUpload){
+ alarmService.alarmUpload(alarmUpload);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("报警列表分页查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle", value = "作业名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query",example = "0"),
+ @ApiImplicitParam(name = "alarmStatus", value = "报警状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState", value = "作业状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmType", value = "报警类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmStartTime", value = "报警开始时间",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "alarmEndTime", value = "报警结束时间",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = BusAlarm.class),
+ })
+ @GetMapping("/listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,Long projectId,String alarmStatus,String projectState,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("p.WORK_TITLE",workTitle);
+ }
+ if(ObjectUtil.isNotEmpty(projectId)){
+ queryWrapper.eq("alarm.PROJECT_ID",projectId);
+ }
+ if(StrUtil.isNotEmpty(alarmStatus)){
+ queryWrapper.eq("alarm.ALARM_STATUS",alarmStatus);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("p.PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(alarmType)){
+ queryWrapper.eq("alarm.ALARM_TYPE",alarmType);
+ }
+ if(StrUtil.isNotEmpty(alarmStartTime)){
+ queryWrapper.ge("alarm.ALARM_TIME",alarmStartTime);
+ }
+ if(StrUtil.isNotEmpty(alarmEndTime)){
+ queryWrapper.le("alarm.ALARM_TIME",alarmEndTime);
+ }
+ page = alarmService.listPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("消警")
+ @PostMapping("/cancel")
+ @ResponseBody
+ public Object cancel(@RequestParam("alarmId") Long alarmId){
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("ID",alarmId);
+ updateWrapper.set("ALARM_STATUS",ALARM_STATUS_MANUAL_CANCEL);
+ alarmService.update(updateWrapper);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
new file mode 100644
index 0000000..dde5aad
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/BusEventController.java
@@ -0,0 +1,41 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.entity.BusEvent;
+import com.casic.missiles.modular.system.service.IBusEventService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ *
+ * 事件表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/event")
+@Api(tags = "事件上报")
+@RequiredArgsConstructor
+public class BusEventController {
+
+ private final IBusEventService eventService;
+
+ @ApiOperation("事件上报")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody BusEvent busEvent){
+ eventService.saveBusEvent(busEvent);
+ return ResponseData.success();
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
new file mode 100644
index 0000000..03abc5f
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IDeviceExtService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Api(tags = "设备管理接口")
+@RequiredArgsConstructor
+@Controller
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+ private final IDeviceService deviceService;
+ private final IDeviceExtService deviceExtService;
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceType", value = "设备类型",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deviceCode", value = "设备编号",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "status", value = "设备状态",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectId", value = "作业ID(如果传此参数,列表中返回该作业使用的设备)",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceDetailDTO.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceType, String deviceCode, String status,Long projectId){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceType)){
+ queryWrapper.eq("DEVICE_TYPE",deviceType);
+ }
+ if(StrUtil.isNotEmpty(deviceCode)){
+ queryWrapper.like("DEVICE_CODE",deviceCode);
+ }
+ page = deviceService.listPage(page,queryWrapper,status,projectId);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.saveDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody DeviceDetailDTO deviceDetailDTO){
+ deviceService.updateDevice(deviceDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("设备id列表")@RequestBody List deviceIds){
+ deviceService.deleteDevices(deviceIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("设置甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "threshold", value = "甲烷阈值",dataType = "String", paramType = "query")
+ })
+ @PostMapping("setThreshold")
+ @ResponseBody
+ public Object setThreshold(String gasIp,String gasPort,String threshold){
+ deviceExtService.setGasThreshold(gasIp, gasPort, threshold);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("查询甲烷阈值")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "gasIp", value = "安全树甲烷设备IP",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "gasPort", value = "安全树甲烷端口",dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = "{\"code\": 200,\"data\": \"100\",\"message\": \"请求成功\",\"success\": true}",response = String.class),
+ })
+ @GetMapping("getThreshold")
+ @ResponseBody
+ public Object getThreshold(String gasIp,String gasPort){
+ String data = deviceExtService.getGasThreshold(gasIp, gasPort);
+ return ResponseData.success(data);
+ }
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
new file mode 100644
index 0000000..7570504
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/OverviewController.java
@@ -0,0 +1,70 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.dto.DeviceLocationDTO;
+import com.casic.missiles.modular.system.dto.WorkerLocationDTO;
+import com.casic.missiles.modular.system.service.IBusAlarmService;
+import com.casic.missiles.modular.system.service.IProjectDeviceService;
+import com.casic.missiles.modular.system.service.IProjectWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+import static com.casic.missiles.modular.system.consts.AlarmConst.ALARM_STATUS_ON;
+
+@Api(tags = "首页看板接口")
+@Controller
+@RequestMapping("overview")
+@RequiredArgsConstructor
+public class OverviewController {
+
+ private final IBusAlarmService alarmService;
+ private final IProjectDeviceService projectDeviceService;
+
+ private final IProjectWorkerService projectWorkerService;
+
+
+ @ApiOperation("报警统计接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = AlarmTypeCountDTO.class),
+ })
+ @GetMapping("/alarmCount")
+ @ResponseBody
+ public Object alarmCount(Long projectId){
+ return ResponseData.success(alarmService.alarmCount(projectId,ALARM_STATUS_ON));
+ }
+
+ @ApiOperation("设备列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = DeviceLocationDTO.class),
+ })
+ @GetMapping("/deviceList")
+ @ResponseBody
+ public Object deviceList(Long projectId){
+ return ResponseData.success(projectDeviceService.selectDeviceLocationList(projectId));
+ }
+
+ @ApiOperation("人员列表接口")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "作业ID",dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkerLocationDTO.class),
+ })
+ @GetMapping("/workerList")
+ @ResponseBody
+ public Object workerList(Long projectId){
+ return ResponseData.success(projectWorkerService.selectWorkerLocationDTO(projectId));
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
new file mode 100644
index 0000000..af36d69
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkSiteInfoController.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.WorkSiteDetailDTO;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import com.casic.missiles.modular.system.service.IWorkSiteInfoService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 作业现场表 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/site")
+@Api(tags = "作业现场管理")
+@RequiredArgsConstructor
+public class WorkSiteInfoController extends BaseController {
+
+
+ private final IWorkSiteInfoService workSiteInfoService;
+
+ @ApiOperation("新增作业现场")
+ @PostMapping("add")
+ @ResponseBody
+ public Object addWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.addWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑作业现场")
+ @PostMapping("update")
+ @ResponseBody
+ public Object updateWorkSite(@RequestBody WorkSiteDetailDTO workSiteDetailDTO){
+ workSiteInfoService.updateWorkSiteInfo(workSiteDetailDTO);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("删除作业现场")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("作业现场id列表")@RequestBody List projectIds){
+ workSiteInfoService.deleteProjects(projectIds);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("查询作业现场详情")
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteDetailDTO.class),
+ })
+ @GetMapping("detail")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ WorkSiteDetailDTO detailDTO = workSiteInfoService.getWorkSiteDetail(projectId);
+ return ResponseData.success(detailDTO);
+ }
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "workTitle",value = "作业名称", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workRoad",value = "所属道路", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workPersonName",value = "责任人姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "projectState",value = "当前状态(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = WorkSiteInfo.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String workTitle,String workRoad,String workPersonName,String projectState,String startDate,String endDate){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(workTitle)){
+ queryWrapper.like("WORK_TITLE",workTitle);
+ }
+ if(StrUtil.isNotEmpty(workRoad)){
+ queryWrapper.like("WORK_ROAD",workRoad);
+ }
+ if(StrUtil.isNotEmpty(workPersonName)){
+ queryWrapper.like("WORKER_NAME",workPersonName);
+ }
+ if(StrUtil.isNotEmpty(projectState)){
+ queryWrapper.eq("PROJECT_STATE",projectState);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("br_work_site_info.CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("br_work_site_info.CREATE_TIME",endDate + " 23:59:59");
+ }
+ page = workSiteInfoService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("开始作业")
+ @PostMapping("start")
+ @ResponseBody
+ public Object start(@ApiParam(value = "作业现场id",example = "0")@RequestParam Long projectId){
+ workSiteInfoService.start(projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("完成作业")
+ @PostMapping("finish")
+ @ResponseBody
+ public Object finish(@ApiParam(value = "作业现场id", example = "0")@RequestParam Long projectId){
+ workSiteInfoService.finish(projectId);
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
new file mode 100644
index 0000000..796f94c
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/WorkerController.java
@@ -0,0 +1,136 @@
+package com.casic.missiles.modular.system.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.BaseController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.DeviceDetailDTO;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.entity.Worker;
+import com.casic.missiles.modular.system.service.IWorkerService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
+/**
+ *
+ * 前端控制器
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Controller
+@RequestMapping("/worker")
+@RequiredArgsConstructor
+@Api(tags = "人员管理接口")
+public class WorkerController extends BaseController {
+
+ private final IWorkerService workerService;
+
+ @ApiOperation("分页列表查询")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "name",value = "姓名", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "deptId",value = "所属部门", dataType = "Long", paramType = "query", example = "0"),
+ @ApiImplicitParam(name = "status",value = "当前状态(字典值)", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "startDate",value = "注册开始日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "endDate",value = "注册结束日期", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "workerType",value = "人员类型(字典值)", dataType = "String", paramType = "query")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String name,Long deptId, String status,String startDate,String endDate,String workerType){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(name)){
+ queryWrapper.like("WORKER_NAME",name);
+ }
+ if(ObjectUtil.isNotEmpty(deptId)){
+ queryWrapper.eq("DEPT_ID",deptId);
+ }
+ if(StrUtil.isNotEmpty(workerType)){
+ queryWrapper.eq("WORKER_TYPE",workerType);
+ }
+ if(StrUtil.isNotEmpty(startDate)){
+ queryWrapper.ge("CREATE_TIME",startDate + " 00:00:00");
+ }
+ if(StrUtil.isNotEmpty(endDate)){
+ queryWrapper.le("CREATE_TIME",endDate + " 23:59:59");
+ }
+ if(StrUtil.isNotEmpty(status)){
+ queryWrapper.eq("`STATUS`",status);
+ }
+ page = workerService.selectListPage(page,queryWrapper);
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("新增人员")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "worker", value = "人员信息", dataType = "Worker", paramType = "body", required = true),
+ @ApiImplicitParam(name = "projectId", value = "项目ID(入场申请需要)", dataType = "Long", paramType = "query", example = "0")
+ })
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@ApiParam("worker")@RequestBody Worker worker,
+ @RequestParam(required = false) Long projectId){
+ workerService.addWorker(worker,projectId);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑人员")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Worker worker){
+ workerService.updateById(worker);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除人员")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam("人员id列表")@RequestBody List workIds){
+ workerService.removeByIds(workIds);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation(value = "获取人脸图片",notes = "返回人脸图片url")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "cameraIp",value = "摄像头IP", dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "cameraPort",value = "摄像头端口号", dataType = "String", paramType = "query"),
+ })
+ @GetMapping("/face/register")
+ @ResponseBody
+ public Object faceRegister(String cameraIp,String cameraPort){
+ return ResponseData.success(workerService.faceRegister(cameraIp, cameraPort));
+ }
+
+
+ @ApiOperation(value = "查询临时入场人员列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectId", value = "项目ID",required = true,dataType = "Long", paramType = "query", example = "0")
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Worker.class),
+ })
+ @GetMapping("/projectTempWorker")
+ @ResponseBody
+ public Object projectTempWorker(Long projectId){
+ return ResponseData.success(workerService.projectTempWorker(projectId));
+ }
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
new file mode 100644
index 0000000..1a165a1
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmTypeCountDTO.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@ApiModel(value = "AlarmTypeCountDTO",description = "报警类型统计(首页)")
+@Data
+public class AlarmTypeCountDTO {
+
+ private String alarmType;
+ private String alarmTypeName;
+ private Integer alarmCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
new file mode 100644
index 0000000..73d7799
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,46 @@
+package com.casic.missiles.modular.system.dto;
+
+import cn.hutool.core.util.StrUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "AlarmUpload",description = "报警上传")
+@Data
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "摄像头ip")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+ @ApiModelProperty(value = "安全树甲烷设备ip")
+ private String gasIp;
+ @ApiModelProperty(value = "安全树甲烷设备端口")
+ private String gasPort;
+ @ApiModelProperty(value = "报警值")
+ private String alarmValue;
+ @ApiModelProperty(value = "报警时间")
+ private String alarmTime;
+ @ApiModelProperty(value = "报警类型")
+ private String alarmType;
+ @ApiModelProperty(value = "报警图片")
+ private String alarmImage;
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @Override
+ public String toString() {
+ return "AlarmUpload{" +
+ "cameraIp='" + cameraIp + '\'' +
+ ", cameraPort='" + cameraPort + '\'' +
+ ", gasIp='" + gasIp + '\'' +
+ ", gasPort='" + gasPort + '\'' +
+ ", alarmValue='" + alarmValue + '\'' +
+ ", alarmTime='" + alarmTime + '\'' +
+ ", alarmType='" + alarmType + '\'' +
+ ", alarmImage='" + (StrUtil.isNotEmpty(alarmImage) ? alarmImage.substring(0,50) : "null") + '\'' +
+ ", alarmContent='" + alarmContent + '\'' +
+ '}';
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
new file mode 100644
index 0000000..ea518d9
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/DeviceDetailDTO.java
@@ -0,0 +1,33 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.casic.missiles.modular.system.entity.Device;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("DeviceDetailDTO")
+@Data
+public class DeviceDetailDTO extends Device {
+
+ @ApiModelProperty(value = "摄像头编号")
+ private String cameraCode;
+
+ @ApiModelProperty(value = "摄像头IP")
+ private String cameraIp;
+
+ @ApiModelProperty(value = "摄像头端口")
+ private String cameraPort;
+
+ @ApiModelProperty(value = "激甲编号")
+ private String gasCode;
+
+ @ApiModelProperty(value = "激甲IP")
+ private String gasIp;
+
+ @ApiModelProperty(value = "激甲端口")
+ private String gasPort;
+
+ @ApiModelProperty(value = "智能帽衬编号")
+ private String hatLiningCode;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
new file mode 100644
index 0000000..29378ff
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkSiteDetailDTO.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.entity.ProjectDevice;
+import com.casic.missiles.modular.system.entity.ProjectWorker;
+import com.casic.missiles.modular.system.entity.WorkSiteInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("WorkSiteDetailDTO")
+public class WorkSiteDetailDTO extends WorkSiteInfo {
+
+ @ApiModelProperty(value = "安全树列表",dataType = "ProjectDevice")
+ private List deviceList;
+
+ @ApiModelProperty(value = "人员列表",dataType = "ProjectWorker")
+ private List workerList;
+
+
+
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
new file mode 100644
index 0000000..6fd7b24
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/WorkerLocationDTO.java
@@ -0,0 +1,68 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "WorkerLocationDTO",description = "人员位置列表(首页)")
+@Data
+public class WorkerLocationDTO {
+
+ @ApiModelProperty("人员ID")
+ private Long workerId;
+
+ @ApiModelProperty("人员姓名")
+ private String workerName;
+
+ @ApiModelProperty("安全帽编号")
+ private String hatCode;
+
+ @ApiModelProperty("安全帽ID")
+ private Long hatId;
+
+ @ApiModelProperty("背心编号")
+ private String vastCode;
+
+ @ApiModelProperty("手环编号")
+ private String braceletCode;
+
+ @ApiModelProperty("位置")
+ private String location;
+
+ @ApiModelProperty("时间")
+ private String time;
+
+ @ApiModelProperty("经度")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ private String lat;
+
+ @ApiModelProperty("心率")
+ private String heartRate;
+
+ @ApiModelProperty("血氧")
+ private String bloodOxygen;
+
+ @ApiModelProperty("一氧化碳")
+ private String co;
+
+ @ApiModelProperty("甲烷")
+ private String gas;
+
+ @ApiModelProperty("硫化氢")
+ private String h2s;
+
+ @ApiModelProperty("氧气")
+ private String o2;
+
+ @ApiModelProperty("信号")
+ private String signal;
+
+ @ApiModelProperty("电量")
+ private String cell;
+
+ @ApiModelProperty("是否报警")
+ private boolean alarmFlag;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
new file mode 100644
index 0000000..efb4a23
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusAlarm.java
@@ -0,0 +1,159 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 报警记录表
+ *
+ *
+ * @author zyj
+ * @since 2023-05-16
+ */
+@Data
+@ApiModel("Alarm")
+@TableName("br_bus_alarm")
+public class BusAlarm implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 项目ID
+ */
+ @ApiModelProperty(value = "项目ID")
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 报警类型
+ */
+ @ApiModelProperty(value = "报警类型")
+ @TableField("ALARM_TYPE")
+ private String alarmType;
+
+ /**
+ * 报警状态
+ */
+ @ApiModelProperty(value = "报警状态")
+ @TableField("ALARM_STATUS")
+ private String alarmStatus;
+
+ /**
+ * 报警值
+ */
+ @ApiModelProperty(value = "报警值")
+ @TableField("ALARM_VALUE")
+ private String alarmValue;
+
+ /**
+ * 报警图片
+ */
+ @ApiModelProperty(value = "报警图片")
+ @TableField("ALARM_IMAGE")
+ private String alarmImage;
+
+ /**
+ * 报警内容
+ */
+ @ApiModelProperty(value = "报警内容")
+ @TableField("ALARM_CONTENT")
+ private String alarmContent;
+
+ /**
+ * 报警时间
+ */
+ @ApiModelProperty(value = "报警时间")
+ @TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date alarmTime;
+
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "消警时间")
+ @TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date cancelTime;
+
+ /**
+ * 报警位置经度
+ */
+ @ApiModelProperty(value = "报警位置经度")
+ @TableField("ALARM_LNG")
+ private String alarmLng;
+
+ /**
+ * 报警位置纬度
+ */
+ @ApiModelProperty(value = "报警位置纬度")
+ @TableField("ALARM_LAT")
+ private String alarmLat;
+
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+ @ApiModelProperty("报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty("作业名称")
+ @TableField(exist = false)
+ private String workTitle;
+ @ApiModelProperty("所属道路")
+ @TableField(exist = false)
+ private String workRoad;
+ @ApiModelProperty("作业状态")
+ @TableField(exist = false)
+ private String projectState;
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+ @ApiModelProperty("负责人姓名")
+ @TableField(exist = false)
+ private String workPersonName;
+ @ApiModelProperty("负责人联系方式")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+
+ @Override
+ public String toString() {
+ return "BusAlarm{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ ", alarmType=" + alarmType +
+ ", alarmValue=" + alarmValue +
+ ", alarmStatus=" + alarmStatus +
+ ", alarmImage=" + alarmImage +
+ ", alarmContent=" + alarmContent +
+ ", alarmTime=" + alarmTime +
+ ", cancelTime=" + cancelTime +
+ ", alarmLng=" + alarmLng +
+ ", alarmLat=" + alarmLat +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
new file mode 100644
index 0000000..a0b7543
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEvent.java
@@ -0,0 +1,100 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *
+ * 事件表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event")
+@Data
+@ApiModel("BusEvent")
+public class BusEvent implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("事件ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件标题
+ */
+ @ApiModelProperty("事件名称")
+ @TableField("EVENT_TITLE")
+ private String eventTitle;
+
+ /**
+ * 上报人员
+ */
+ @ApiModelProperty("上报人员")
+ @TableField("UPLOAD_NAME")
+ private String uploadName;
+
+ /**
+ * 联系方式
+ */
+ @ApiModelProperty("联系方式")
+ @TableField("PHONE_NUMBER")
+ private String phoneNumber;
+
+ /**
+ * 事件描述
+ */
+ @ApiModelProperty("事件描述")
+ @TableField("EVENT_DESCRIPTION")
+ private String eventDescription;
+
+ @ApiModelProperty("经度")
+ @TableField("LNG")
+ private String lng;
+
+ @ApiModelProperty("纬度")
+ @TableField("LAT")
+ private String lat;
+
+ /**
+ * 事件上传时间
+ */
+ @ApiModelProperty("事件上传时间")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty("事件照片")
+ @TableField(exist = false)
+ private List imageList;
+
+
+
+ @Override
+ public String toString() {
+ return "BusEvent{" +
+ "id=" + id +
+ ", eventTitle=" + eventTitle +
+ ", uploadName=" + uploadName +
+ ", phoneNumber=" + phoneNumber +
+ ", eventDescription=" + eventDescription +
+ ", lng=" + lng +
+ ", lat=" + lat +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
new file mode 100644
index 0000000..1e75245
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/BusEventImage.java
@@ -0,0 +1,47 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 事件图片表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@TableName("br_bus_event_image")
+@Data
+@ApiModel("BusEventImage")
+public class BusEventImage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 事件ID
+ */
+ @TableField("EVENT_ID")
+ private Long eventId;
+
+ /**
+ * 报警图片
+ */
+ @TableField("IMAGE")
+ @ApiModelProperty("图片url")
+ private String image;
+
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
new file mode 100644
index 0000000..df89c70
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Device.java
@@ -0,0 +1,113 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.casic.missiles.core.base.json.DateDeserializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("Device")
+@TableName("br_device")
+@Data
+public class Device implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "设备ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ @ApiModelProperty(value = "设备编号")
+ @TableField("DEVICE_CODE")
+ private String deviceCode;
+
+ /**
+ * 设备类型
+ */
+ @ApiModelProperty(value = "设备类型")
+ @TableField("DEVICE_TYPE")
+ private String deviceType;
+
+ /**
+ * 设备批次
+ */
+ @ApiModelProperty(value = "设备批次")
+ @TableField("DEVICE_BATCH")
+ private String deviceBatch;
+
+ /**
+ * 厂家
+ */
+ @ApiModelProperty(value = "厂家")
+ @TableField("MANUFACTURER")
+ private String manufacturer;
+
+ /**
+ * 是否供电
+ */
+ @ApiModelProperty(value = "是否供电")
+ @TableField("IS_POWER_SUPPLY")
+ private String isPowerSupply;
+
+ /**
+ * 创建时间
+ */
+ @ApiModelProperty(value = "创建时间",dataType = "Date")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ @ApiModelProperty(value = "设备类型名称")
+ @TableField(exist = false)
+ private String deviceTypeName;
+
+ @ApiModelProperty(value = "是否供电名称")
+ @TableField(exist = false)
+ private String isPowerSupplyName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty(value = "当前状态")
+ @TableField(exist = false)
+ private String status;
+
+ @ApiModelProperty(value = "当前状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
+ @Override
+ public String toString() {
+ return "Device{" +
+ "id=" + id +
+ ", deviceCode=" + deviceCode +
+ ", deviceType=" + deviceType +
+ ", deviceBatch=" + deviceBatch +
+ ", manufacturer=" + manufacturer +
+ ", isPowerSupply=" + isPowerSupply +
+ ", createTime=" + createTime +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
new file mode 100644
index 0000000..5ee7015
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/DeviceExt.java
@@ -0,0 +1,99 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * 设备扩展信息表(安全树)
+ *
+ *
+ * @author zyj
+ * @since 2023-04-27
+ */
+@Data
+@TableName("br_device_ext")
+public class DeviceExt implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 设备ID
+ */
+ @TableField("DEVICE_ID")
+ private Long deviceId;
+
+ /**
+ * 摄像头编号
+ */
+ @TableField("CAMERA_CODE")
+ private String cameraCode;
+
+ /**
+ * 摄像头IP
+ */
+ @TableField("CAMERA_IP")
+ private String cameraIp;
+
+ /**
+ * 摄像头端口
+ */
+ @TableField("CAMERA_PORT")
+ private String cameraPort;
+
+ /**
+ * 激甲编号
+ */
+ @TableField("GAS_CODE")
+ private String gasCode;
+
+ /**
+ * 激甲IP
+ */
+ @TableField("GAS_IP")
+ private String gasIp;
+
+ /**
+ * 激甲端口
+ */
+ @TableField("GAS_PORT")
+ private String gasPort;
+
+ /**
+ * 甲烷报警阈值
+ */
+ @TableField("GAS_THRESHOLD")
+ private String gasThreshold;
+
+ @TableField(value = "HAT_LINING_CODE")
+ private String hatLiningCode;
+
+
+ @Override
+ public String toString() {
+ return "DeviceExt{" +
+ "id=" + id +
+ ", deviceId=" + deviceId +
+ ", cameraCode=" + cameraCode +
+ ", cameraIp=" + cameraIp +
+ ", cameraPort=" + cameraPort +
+ ", gasCode=" + gasCode +
+ ", gasIp=" + gasIp +
+ ", gasPort=" + gasPort +
+ ", gasThreshold=" + gasThreshold +
+ ", hatLiningCode=" + hatLiningCode +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java
new file mode 100644
index 0000000..c4f3472
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectDevice.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@Data
+@ApiModel("ProjectDevice")
+@TableName("br_project_device")
+public class ProjectDevice implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业现场ID
+ */
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 设备ID
+ */
+ @TableField("DEVICE_ID")
+ @ApiModelProperty("设备ID(新增编辑时传)")
+ private Long deviceId;
+
+ /**
+ * 设备编号
+ */
+ @TableField(exist = false)
+ @ApiModelProperty("设备编号(详情中展示,新增编辑不用传)")
+ private String deviceCode;
+
+ @Override
+ public String toString() {
+ return "ProjectDevice{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", deviceId=" + deviceId +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java
new file mode 100644
index 0000000..10b23c4
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/ProjectWorker.java
@@ -0,0 +1,104 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("ProjectWorker")
+@TableName("br_project_worker")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProjectWorker implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业现场ID
+ */
+ @TableField("PROJECT_ID")
+ private Long projectId;
+
+ /**
+ * 人员ID
+ */
+ @ApiModelProperty("人员ID")
+ @TableField("WORKER_ID")
+ private Long workerId;
+
+ /**
+ * 安全帽编号
+ */
+ @ApiModelProperty("安全帽编号")
+ @TableField("HAT_CODE")
+ private String hatCode;
+
+ /**
+ * 背心编号
+ */
+ @ApiModelProperty("背心编号")
+ @TableField("VAST_CODE")
+ private String vastCode;
+
+ /**
+ * 手环编号
+ */
+ @ApiModelProperty("手环编号")
+ @TableField("BRACELET_CODE")
+ private String braceletCode;
+
+ @ApiModelProperty("人员姓名(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerName;
+
+ @ApiModelProperty("人员部门ID(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerDeptId;
+
+ @ApiModelProperty("人员部门名称(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerDeptName;
+
+ @ApiModelProperty("人员联系方式(详情中展示,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workerPhoneNumber;
+
+ public ProjectWorker(Long projectId, Long workerId) {
+ this.projectId = projectId;
+ this.workerId = workerId;
+ }
+
+ @Override
+ public String toString() {
+ return "ProjectWorker{" +
+ "id=" + id +
+ ", projectId=" + projectId +
+ ", workerId=" + workerId +
+ ", hatCode=" + hatCode +
+ ", vastCode=" + vastCode +
+ ", braceletCode=" + braceletCode +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/WorkSiteInfo.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/WorkSiteInfo.java
new file mode 100644
index 0000000..fa6f41d
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/WorkSiteInfo.java
@@ -0,0 +1,130 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ * 作业现场表
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("WorkSiteInfo")
+@TableName("br_work_site_info")
+@Data
+public class WorkSiteInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty("作业现场ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 作业名称
+ */
+ @ApiModelProperty("作业名称")
+ @TableField("WORK_TITLE")
+ private String workTitle;
+
+ /**
+ * 责任人
+ */
+ @ApiModelProperty("责任人(人员ID)")
+ @TableField("WORK_PERSON")
+ private Long workPerson;
+
+ /**
+ * 作业描述
+ */
+ @ApiModelProperty("作业描述")
+ @TableField("WORK_SITE_DESC")
+ private String workSiteDesc;
+
+ /**
+ * 作业状态
+ */
+ @ApiModelProperty("作业状态")
+ @TableField("PROJECT_STATE")
+ private String projectState;
+
+ /**
+ * 所属道路
+ */
+ @ApiModelProperty("所属道路")
+ @TableField("WORK_ROAD")
+ private String workRoad;
+
+ @TableField("IMAGE_URL")
+ private String imageUrl;
+
+ @TableField("CREATE_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+ @TableField("UPDATE_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ @ApiModelProperty("开始时间")
+ @TableField("START_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date startTime;
+
+ @ApiModelProperty("结束时间")
+ @TableField("FINISH_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+ private Date finishTime;
+
+ @ApiModelProperty("负责人姓名(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workPersonName;
+
+ @ApiModelProperty("负责人联系方式(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workPersonPhoneNumber;
+
+ @ApiModelProperty("负责人所属部门ID(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private Long workPersonDeptId;
+
+ @ApiModelProperty("负责人所属部门名称(详情中使用,新增编辑不用传)")
+ @TableField(exist = false)
+ private String workPersonDeptName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty("作业状态名称")
+ @TableField(exist = false)
+ private String projectStateName;
+
+ @Override
+ public String toString() {
+ return "WorkSiteInfo{" +
+ "id=" + id +
+ ", workTitle=" + workTitle +
+ ", workPerson=" + workPerson +
+ ", workSiteDesc=" + workSiteDesc +
+ ", projectState=" + projectState +
+ ", imageUrl=" + imageUrl +
+ ", updateTime=" + updateTime +
+ ", workRoad=" + workRoad +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Worker.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Worker.java
new file mode 100644
index 0000000..28a4daa
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Worker.java
@@ -0,0 +1,147 @@
+package com.casic.missiles.modular.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ *
+ *
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+@ApiModel("Worker")
+@TableName("br_worker")
+@Data
+public class Worker implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ApiModelProperty(value = "人员ID")
+ @TableId(value = "ID",type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 姓名
+ */
+ @ApiModelProperty(value = "姓名")
+ @TableField("WORKER_NAME")
+ private String workerName;
+
+ /**
+ * 性别
+ */
+ @ApiModelProperty(value = "性别")
+ @TableField("GENDER")
+ private String gender;
+
+ /**
+ * 所属部门
+ */
+ @ApiModelProperty(value = "所属部门(人员管理)")
+ @TableField("DEPT_ID")
+ private Long deptId;
+
+ /**
+ * 所属单位
+ */
+ @ApiModelProperty(value = "所属单位(入场申请中使用)")
+ @TableField("OWNER_SHIP")
+ private String ownerShip;
+
+ /**
+ * 联系方式
+ */
+ @ApiModelProperty(value = "联系方式")
+ @TableField("PHONE_NUMBER")
+ private String phoneNumber;
+
+ /**
+ * 证件号
+ */
+ @ApiModelProperty(value = "证件号")
+ @TableField("ID_CARD_NUMBER")
+ private String idCardNumber;
+
+ /**
+ * 入场原因
+ */
+ @ApiModelProperty(value = "入场原因(入场申请中使用)")
+ @TableField("ENTER_REASON")
+ private String enterReason;
+
+ /**
+ * 入场人脸照片
+ */
+ @ApiModelProperty(value = "人脸照片(照片路径)")
+ @TableField("WORKER_AVATAR")
+ private String workerAvatar;
+
+ /**
+ * 申请入场时间
+ */
+ @ApiModelProperty(value = "注册时间/申请入场时间")
+ @TableField("CREATE_TIME")
+ private Date createTime;
+
+ /**
+ * 人员类型
+ */
+ @ApiModelProperty(value = "人员类型(区分人员管理和入场申请)")
+ @TableField("WORKER_TYPE")
+ private String workerType;
+
+ @ApiModelProperty(value = "性别名称")
+ @TableField(exist = false)
+ private String genderName;
+
+ @ApiModelProperty(value = "部门名称")
+ @TableField(exist = false)
+ private String deptName;
+
+ @ApiModelProperty(value = "注册时间",dataType = "String")
+ @TableField(exist = false)
+ private String registerTime;
+
+ @ApiModelProperty(value = "当前状态")
+ @TableField(exist = false)
+ private String status;
+
+ @ApiModelProperty(value = "当前状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
+ @ApiModelProperty(value = "是否注册(0未注册;1已注册)",allowableValues = "0,1")
+ @TableField(exist = false)
+ private String isRegister;
+
+ @Override
+ public String toString() {
+ return "Worker{" +
+ "id=" + id +
+ ", workerName=" + workerName +
+ ", gender=" + gender +
+ ", deptId=" + deptId +
+ ", ownerShip=" + ownerShip +
+ ", phoneNumber=" + phoneNumber +
+ ", idCardNumber=" + idCardNumber +
+ ", enterReason=" + enterReason +
+ ", workerAvatar=" + workerAvatar +
+ ", createTime=" + createTime +
+ ", workerType=" + workerType +
+ "}";
+ }
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/BusAlarmMapper.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/BusAlarmMapper.java
new file mode 100644
index 0000000..9801742
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/BusAlarmMapper.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.modular.system.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.modular.system.dto.AlarmTypeCountDTO;
+import com.casic.missiles.modular.system.entity.BusAlarm;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ *
+ * 报警记录表 Mapper 接口
+ *
+ *
+ * @author zyj
+ * @since 2023-04-14
+ */
+public interface BusAlarmMapper extends BaseMapper {
+
+ Page