diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
new file mode 100644
index 0000000..d7cb90e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
@@ -0,0 +1,22 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PeopleUpload",description = "监测人数上报")
+public class PeopleUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "监测人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
new file mode 100644
index 0000000..d7cb90e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
@@ -0,0 +1,22 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PeopleUpload",description = "监测人数上报")
+public class PeopleUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "监测人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
index 4d2b7ef..c7db111 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
@@ -1,13 +1,15 @@
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;
/**
@@ -18,6 +20,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Alarm")
@Data
@TableName("bus_alarm")
public class Alarm implements Serializable {
@@ -33,58 +36,87 @@
/**
* 设备ID
*/
+ @ApiModelProperty(value = "设备ID",example = "0")
@TableField("DEVICE_ID")
private Long deviceId;
/**
* 报警类型
*/
+ @ApiModelProperty(value = "报警类型(字典值)")
@TableField("ALARM_TYPE")
private String alarmType;
/**
* 报警时间
*/
+ @ApiModelProperty(value = "报警时间")
@TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date alarmTime;
/**
* 报警状态
*/
+ @ApiModelProperty(value = "报警状态(字典值)")
@TableField("ALARM_STATUS")
private String alarmStatus;
/**
* 报警位置
*/
+ @ApiModelProperty(value = "报警位置")
@TableField("ALARM_LOCATION")
private String alarmLocation;
/**
* 报警图片
*/
+ @ApiModelProperty(value = "报警图片(url)")
@TableField("ALARM_IMAGE")
private String alarmImage;
/**
* 视频通道号
*/
+ @ApiModelProperty(value = "视频通道号(预留)")
@TableField("CHANNEL_NO")
private Integer channelNo;
/**
* 报警内容
*/
+ @ApiModelProperty(value = "报警内容(预留)")
@TableField("ALARM_CONTENT")
private String alarmContent;
/**
* 消警时间
*/
+ @ApiModelProperty(value = "消警时间")
@TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date cancelTime;
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "报警人数")
+ @TableField("PEOPLE_COUNT")
+ private Integer peopleCount;
+
+
+ @ApiModelProperty(value = "报警设备名称")
+ @TableField(exist = false)
+ private String deviceName;
+ @ApiModelProperty(value = "报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty(value = "报警状态名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+
@Override
public String toString() {
return "Alarm{" +
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
new file mode 100644
index 0000000..d7cb90e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
@@ -0,0 +1,22 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PeopleUpload",description = "监测人数上报")
+public class PeopleUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "监测人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
index 4d2b7ef..c7db111 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
@@ -1,13 +1,15 @@
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;
/**
@@ -18,6 +20,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Alarm")
@Data
@TableName("bus_alarm")
public class Alarm implements Serializable {
@@ -33,58 +36,87 @@
/**
* 设备ID
*/
+ @ApiModelProperty(value = "设备ID",example = "0")
@TableField("DEVICE_ID")
private Long deviceId;
/**
* 报警类型
*/
+ @ApiModelProperty(value = "报警类型(字典值)")
@TableField("ALARM_TYPE")
private String alarmType;
/**
* 报警时间
*/
+ @ApiModelProperty(value = "报警时间")
@TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date alarmTime;
/**
* 报警状态
*/
+ @ApiModelProperty(value = "报警状态(字典值)")
@TableField("ALARM_STATUS")
private String alarmStatus;
/**
* 报警位置
*/
+ @ApiModelProperty(value = "报警位置")
@TableField("ALARM_LOCATION")
private String alarmLocation;
/**
* 报警图片
*/
+ @ApiModelProperty(value = "报警图片(url)")
@TableField("ALARM_IMAGE")
private String alarmImage;
/**
* 视频通道号
*/
+ @ApiModelProperty(value = "视频通道号(预留)")
@TableField("CHANNEL_NO")
private Integer channelNo;
/**
* 报警内容
*/
+ @ApiModelProperty(value = "报警内容(预留)")
@TableField("ALARM_CONTENT")
private String alarmContent;
/**
* 消警时间
*/
+ @ApiModelProperty(value = "消警时间")
@TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date cancelTime;
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "报警人数")
+ @TableField("PEOPLE_COUNT")
+ private Integer peopleCount;
+
+
+ @ApiModelProperty(value = "报警设备名称")
+ @TableField(exist = false)
+ private String deviceName;
+ @ApiModelProperty(value = "报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty(value = "报警状态名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+
@Override
public String toString() {
return "Alarm{" +
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
index ea7db5f..0f8ba79 100644
--- 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
@@ -4,6 +4,8 @@
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;
@@ -16,6 +18,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Device")
@Data
@TableName("bus_device")
public class Device implements Serializable {
@@ -31,66 +34,82 @@
/**
* 设备名称
*/
+ @ApiModelProperty(value = "设备名称")
@TableField("DEVICE_NAME")
private String deviceName;
/**
* IP
*/
+ @ApiModelProperty(value = "IP")
@TableField("IP")
private String ip;
/**
* 端口
*/
+ @ApiModelProperty(value = "端口")
@TableField("PORT")
private String port;
/**
* 用户名
*/
+ @ApiModelProperty(value = "用户名")
@TableField("USER_NAME")
private String userName;
/**
* 密码
*/
+ @ApiModelProperty(value = "密码")
@TableField("PASSWORD")
private String password;
/**
* 连接类型
*/
+ @ApiModelProperty(value = "连接类型(字典值)")
@TableField("CONNECT_TYPE")
private String connectType;
/**
* 位置
*/
+ @ApiModelProperty(value = "位置")
@TableField("LOCATION")
-
private String location;
/**
* 设备状态
*/
+ @ApiModelProperty(value = "设备状态(字典值)")
@TableField("STATUS")
-
private String status;
/**
* 报警分组
*/
+ @ApiModelProperty(value = "报警分组",example = "0")
@TableField("ALARM_GROUP")
-
private Long alarmGroup;
/**
* 视频通道数(预留)
*/
+ @ApiModelProperty(value = "视频通道数(预留)")
@TableField("CHANNEL_NUM")
private Integer channelNum;
+
+ @ApiModelProperty(value = "连接类型名称")
+ @TableField(exist = false)
+ private String connectTypeName;
+
+ @ApiModelProperty(value = "设备状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
@Override
public String toString() {
return "Device{" +
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
new file mode 100644
index 0000000..d7cb90e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
@@ -0,0 +1,22 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PeopleUpload",description = "监测人数上报")
+public class PeopleUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "监测人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
index 4d2b7ef..c7db111 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
@@ -1,13 +1,15 @@
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;
/**
@@ -18,6 +20,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Alarm")
@Data
@TableName("bus_alarm")
public class Alarm implements Serializable {
@@ -33,58 +36,87 @@
/**
* 设备ID
*/
+ @ApiModelProperty(value = "设备ID",example = "0")
@TableField("DEVICE_ID")
private Long deviceId;
/**
* 报警类型
*/
+ @ApiModelProperty(value = "报警类型(字典值)")
@TableField("ALARM_TYPE")
private String alarmType;
/**
* 报警时间
*/
+ @ApiModelProperty(value = "报警时间")
@TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date alarmTime;
/**
* 报警状态
*/
+ @ApiModelProperty(value = "报警状态(字典值)")
@TableField("ALARM_STATUS")
private String alarmStatus;
/**
* 报警位置
*/
+ @ApiModelProperty(value = "报警位置")
@TableField("ALARM_LOCATION")
private String alarmLocation;
/**
* 报警图片
*/
+ @ApiModelProperty(value = "报警图片(url)")
@TableField("ALARM_IMAGE")
private String alarmImage;
/**
* 视频通道号
*/
+ @ApiModelProperty(value = "视频通道号(预留)")
@TableField("CHANNEL_NO")
private Integer channelNo;
/**
* 报警内容
*/
+ @ApiModelProperty(value = "报警内容(预留)")
@TableField("ALARM_CONTENT")
private String alarmContent;
/**
* 消警时间
*/
+ @ApiModelProperty(value = "消警时间")
@TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date cancelTime;
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "报警人数")
+ @TableField("PEOPLE_COUNT")
+ private Integer peopleCount;
+
+
+ @ApiModelProperty(value = "报警设备名称")
+ @TableField(exist = false)
+ private String deviceName;
+ @ApiModelProperty(value = "报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty(value = "报警状态名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+
@Override
public String toString() {
return "Alarm{" +
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
index ea7db5f..0f8ba79 100644
--- 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
@@ -4,6 +4,8 @@
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;
@@ -16,6 +18,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Device")
@Data
@TableName("bus_device")
public class Device implements Serializable {
@@ -31,66 +34,82 @@
/**
* 设备名称
*/
+ @ApiModelProperty(value = "设备名称")
@TableField("DEVICE_NAME")
private String deviceName;
/**
* IP
*/
+ @ApiModelProperty(value = "IP")
@TableField("IP")
private String ip;
/**
* 端口
*/
+ @ApiModelProperty(value = "端口")
@TableField("PORT")
private String port;
/**
* 用户名
*/
+ @ApiModelProperty(value = "用户名")
@TableField("USER_NAME")
private String userName;
/**
* 密码
*/
+ @ApiModelProperty(value = "密码")
@TableField("PASSWORD")
private String password;
/**
* 连接类型
*/
+ @ApiModelProperty(value = "连接类型(字典值)")
@TableField("CONNECT_TYPE")
private String connectType;
/**
* 位置
*/
+ @ApiModelProperty(value = "位置")
@TableField("LOCATION")
-
private String location;
/**
* 设备状态
*/
+ @ApiModelProperty(value = "设备状态(字典值)")
@TableField("STATUS")
-
private String status;
/**
* 报警分组
*/
+ @ApiModelProperty(value = "报警分组",example = "0")
@TableField("ALARM_GROUP")
-
private Long alarmGroup;
/**
* 视频通道数(预留)
*/
+ @ApiModelProperty(value = "视频通道数(预留)")
@TableField("CHANNEL_NUM")
private Integer channelNum;
+
+ @ApiModelProperty(value = "连接类型名称")
+ @TableField(exist = false)
+ private String connectTypeName;
+
+ @ApiModelProperty(value = "设备状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
@Override
public String toString() {
return "Device{" +
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
index ea4c8be..c235dd8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
@@ -1,7 +1,10 @@
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.entity.Alarm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
/**
*
@@ -13,4 +16,6 @@
*/
public interface AlarmMapper extends BaseMapper {
+ Page listPage(@Param("page")Page page, @Param("ew")QueryWrapper queryWrapper);
+
}
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
new file mode 100644
index 0000000..d7cb90e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
@@ -0,0 +1,22 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PeopleUpload",description = "监测人数上报")
+public class PeopleUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "监测人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
index 4d2b7ef..c7db111 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
@@ -1,13 +1,15 @@
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;
/**
@@ -18,6 +20,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Alarm")
@Data
@TableName("bus_alarm")
public class Alarm implements Serializable {
@@ -33,58 +36,87 @@
/**
* 设备ID
*/
+ @ApiModelProperty(value = "设备ID",example = "0")
@TableField("DEVICE_ID")
private Long deviceId;
/**
* 报警类型
*/
+ @ApiModelProperty(value = "报警类型(字典值)")
@TableField("ALARM_TYPE")
private String alarmType;
/**
* 报警时间
*/
+ @ApiModelProperty(value = "报警时间")
@TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date alarmTime;
/**
* 报警状态
*/
+ @ApiModelProperty(value = "报警状态(字典值)")
@TableField("ALARM_STATUS")
private String alarmStatus;
/**
* 报警位置
*/
+ @ApiModelProperty(value = "报警位置")
@TableField("ALARM_LOCATION")
private String alarmLocation;
/**
* 报警图片
*/
+ @ApiModelProperty(value = "报警图片(url)")
@TableField("ALARM_IMAGE")
private String alarmImage;
/**
* 视频通道号
*/
+ @ApiModelProperty(value = "视频通道号(预留)")
@TableField("CHANNEL_NO")
private Integer channelNo;
/**
* 报警内容
*/
+ @ApiModelProperty(value = "报警内容(预留)")
@TableField("ALARM_CONTENT")
private String alarmContent;
/**
* 消警时间
*/
+ @ApiModelProperty(value = "消警时间")
@TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date cancelTime;
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "报警人数")
+ @TableField("PEOPLE_COUNT")
+ private Integer peopleCount;
+
+
+ @ApiModelProperty(value = "报警设备名称")
+ @TableField(exist = false)
+ private String deviceName;
+ @ApiModelProperty(value = "报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty(value = "报警状态名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+
@Override
public String toString() {
return "Alarm{" +
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
index ea7db5f..0f8ba79 100644
--- 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
@@ -4,6 +4,8 @@
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;
@@ -16,6 +18,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Device")
@Data
@TableName("bus_device")
public class Device implements Serializable {
@@ -31,66 +34,82 @@
/**
* 设备名称
*/
+ @ApiModelProperty(value = "设备名称")
@TableField("DEVICE_NAME")
private String deviceName;
/**
* IP
*/
+ @ApiModelProperty(value = "IP")
@TableField("IP")
private String ip;
/**
* 端口
*/
+ @ApiModelProperty(value = "端口")
@TableField("PORT")
private String port;
/**
* 用户名
*/
+ @ApiModelProperty(value = "用户名")
@TableField("USER_NAME")
private String userName;
/**
* 密码
*/
+ @ApiModelProperty(value = "密码")
@TableField("PASSWORD")
private String password;
/**
* 连接类型
*/
+ @ApiModelProperty(value = "连接类型(字典值)")
@TableField("CONNECT_TYPE")
private String connectType;
/**
* 位置
*/
+ @ApiModelProperty(value = "位置")
@TableField("LOCATION")
-
private String location;
/**
* 设备状态
*/
+ @ApiModelProperty(value = "设备状态(字典值)")
@TableField("STATUS")
-
private String status;
/**
* 报警分组
*/
+ @ApiModelProperty(value = "报警分组",example = "0")
@TableField("ALARM_GROUP")
-
private Long alarmGroup;
/**
* 视频通道数(预留)
*/
+ @ApiModelProperty(value = "视频通道数(预留)")
@TableField("CHANNEL_NUM")
private Integer channelNum;
+
+ @ApiModelProperty(value = "连接类型名称")
+ @TableField(exist = false)
+ private String connectTypeName;
+
+ @ApiModelProperty(value = "设备状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
@Override
public String toString() {
return "Device{" +
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
index ea4c8be..c235dd8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
@@ -1,7 +1,10 @@
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.entity.Alarm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
/**
*
@@ -13,4 +16,6 @@
*/
public interface AlarmMapper extends BaseMapper {
+ Page listPage(@Param("page")Page page, @Param("ew")QueryWrapper queryWrapper);
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
index 25cb4ab..703fcc5 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
@@ -2,4 +2,25 @@
+
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
new file mode 100644
index 0000000..d7cb90e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
@@ -0,0 +1,22 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PeopleUpload",description = "监测人数上报")
+public class PeopleUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "监测人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
index 4d2b7ef..c7db111 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
@@ -1,13 +1,15 @@
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;
/**
@@ -18,6 +20,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Alarm")
@Data
@TableName("bus_alarm")
public class Alarm implements Serializable {
@@ -33,58 +36,87 @@
/**
* 设备ID
*/
+ @ApiModelProperty(value = "设备ID",example = "0")
@TableField("DEVICE_ID")
private Long deviceId;
/**
* 报警类型
*/
+ @ApiModelProperty(value = "报警类型(字典值)")
@TableField("ALARM_TYPE")
private String alarmType;
/**
* 报警时间
*/
+ @ApiModelProperty(value = "报警时间")
@TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date alarmTime;
/**
* 报警状态
*/
+ @ApiModelProperty(value = "报警状态(字典值)")
@TableField("ALARM_STATUS")
private String alarmStatus;
/**
* 报警位置
*/
+ @ApiModelProperty(value = "报警位置")
@TableField("ALARM_LOCATION")
private String alarmLocation;
/**
* 报警图片
*/
+ @ApiModelProperty(value = "报警图片(url)")
@TableField("ALARM_IMAGE")
private String alarmImage;
/**
* 视频通道号
*/
+ @ApiModelProperty(value = "视频通道号(预留)")
@TableField("CHANNEL_NO")
private Integer channelNo;
/**
* 报警内容
*/
+ @ApiModelProperty(value = "报警内容(预留)")
@TableField("ALARM_CONTENT")
private String alarmContent;
/**
* 消警时间
*/
+ @ApiModelProperty(value = "消警时间")
@TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date cancelTime;
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "报警人数")
+ @TableField("PEOPLE_COUNT")
+ private Integer peopleCount;
+
+
+ @ApiModelProperty(value = "报警设备名称")
+ @TableField(exist = false)
+ private String deviceName;
+ @ApiModelProperty(value = "报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty(value = "报警状态名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+
@Override
public String toString() {
return "Alarm{" +
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
index ea7db5f..0f8ba79 100644
--- 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
@@ -4,6 +4,8 @@
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;
@@ -16,6 +18,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Device")
@Data
@TableName("bus_device")
public class Device implements Serializable {
@@ -31,66 +34,82 @@
/**
* 设备名称
*/
+ @ApiModelProperty(value = "设备名称")
@TableField("DEVICE_NAME")
private String deviceName;
/**
* IP
*/
+ @ApiModelProperty(value = "IP")
@TableField("IP")
private String ip;
/**
* 端口
*/
+ @ApiModelProperty(value = "端口")
@TableField("PORT")
private String port;
/**
* 用户名
*/
+ @ApiModelProperty(value = "用户名")
@TableField("USER_NAME")
private String userName;
/**
* 密码
*/
+ @ApiModelProperty(value = "密码")
@TableField("PASSWORD")
private String password;
/**
* 连接类型
*/
+ @ApiModelProperty(value = "连接类型(字典值)")
@TableField("CONNECT_TYPE")
private String connectType;
/**
* 位置
*/
+ @ApiModelProperty(value = "位置")
@TableField("LOCATION")
-
private String location;
/**
* 设备状态
*/
+ @ApiModelProperty(value = "设备状态(字典值)")
@TableField("STATUS")
-
private String status;
/**
* 报警分组
*/
+ @ApiModelProperty(value = "报警分组",example = "0")
@TableField("ALARM_GROUP")
-
private Long alarmGroup;
/**
* 视频通道数(预留)
*/
+ @ApiModelProperty(value = "视频通道数(预留)")
@TableField("CHANNEL_NUM")
private Integer channelNum;
+
+ @ApiModelProperty(value = "连接类型名称")
+ @TableField(exist = false)
+ private String connectTypeName;
+
+ @ApiModelProperty(value = "设备状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
@Override
public String toString() {
return "Device{" +
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
index ea4c8be..c235dd8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
@@ -1,7 +1,10 @@
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.entity.Alarm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
/**
*
@@ -13,4 +16,6 @@
*/
public interface AlarmMapper extends BaseMapper {
+ Page listPage(@Param("page")Page page, @Param("ew")QueryWrapper queryWrapper);
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
index 25cb4ab..703fcc5 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
@@ -2,4 +2,25 @@
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
index 8bc01f4..469085f 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
@@ -1,5 +1,8 @@
package com.casic.missiles.modular.system.service;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
import com.casic.missiles.modular.system.entity.Alarm;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -13,4 +16,9 @@
*/
public interface IAlarmService extends IService {
+ Page listPage(Page page, QueryWrapper queryWrapper);
+
+ Alarm alarmUpload(AlarmUpload alarmUpload);
+
+
}
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
new file mode 100644
index 0000000..d7cb90e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
@@ -0,0 +1,22 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PeopleUpload",description = "监测人数上报")
+public class PeopleUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "监测人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
index 4d2b7ef..c7db111 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
@@ -1,13 +1,15 @@
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;
/**
@@ -18,6 +20,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Alarm")
@Data
@TableName("bus_alarm")
public class Alarm implements Serializable {
@@ -33,58 +36,87 @@
/**
* 设备ID
*/
+ @ApiModelProperty(value = "设备ID",example = "0")
@TableField("DEVICE_ID")
private Long deviceId;
/**
* 报警类型
*/
+ @ApiModelProperty(value = "报警类型(字典值)")
@TableField("ALARM_TYPE")
private String alarmType;
/**
* 报警时间
*/
+ @ApiModelProperty(value = "报警时间")
@TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date alarmTime;
/**
* 报警状态
*/
+ @ApiModelProperty(value = "报警状态(字典值)")
@TableField("ALARM_STATUS")
private String alarmStatus;
/**
* 报警位置
*/
+ @ApiModelProperty(value = "报警位置")
@TableField("ALARM_LOCATION")
private String alarmLocation;
/**
* 报警图片
*/
+ @ApiModelProperty(value = "报警图片(url)")
@TableField("ALARM_IMAGE")
private String alarmImage;
/**
* 视频通道号
*/
+ @ApiModelProperty(value = "视频通道号(预留)")
@TableField("CHANNEL_NO")
private Integer channelNo;
/**
* 报警内容
*/
+ @ApiModelProperty(value = "报警内容(预留)")
@TableField("ALARM_CONTENT")
private String alarmContent;
/**
* 消警时间
*/
+ @ApiModelProperty(value = "消警时间")
@TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date cancelTime;
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "报警人数")
+ @TableField("PEOPLE_COUNT")
+ private Integer peopleCount;
+
+
+ @ApiModelProperty(value = "报警设备名称")
+ @TableField(exist = false)
+ private String deviceName;
+ @ApiModelProperty(value = "报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty(value = "报警状态名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+
@Override
public String toString() {
return "Alarm{" +
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
index ea7db5f..0f8ba79 100644
--- 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
@@ -4,6 +4,8 @@
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;
@@ -16,6 +18,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Device")
@Data
@TableName("bus_device")
public class Device implements Serializable {
@@ -31,66 +34,82 @@
/**
* 设备名称
*/
+ @ApiModelProperty(value = "设备名称")
@TableField("DEVICE_NAME")
private String deviceName;
/**
* IP
*/
+ @ApiModelProperty(value = "IP")
@TableField("IP")
private String ip;
/**
* 端口
*/
+ @ApiModelProperty(value = "端口")
@TableField("PORT")
private String port;
/**
* 用户名
*/
+ @ApiModelProperty(value = "用户名")
@TableField("USER_NAME")
private String userName;
/**
* 密码
*/
+ @ApiModelProperty(value = "密码")
@TableField("PASSWORD")
private String password;
/**
* 连接类型
*/
+ @ApiModelProperty(value = "连接类型(字典值)")
@TableField("CONNECT_TYPE")
private String connectType;
/**
* 位置
*/
+ @ApiModelProperty(value = "位置")
@TableField("LOCATION")
-
private String location;
/**
* 设备状态
*/
+ @ApiModelProperty(value = "设备状态(字典值)")
@TableField("STATUS")
-
private String status;
/**
* 报警分组
*/
+ @ApiModelProperty(value = "报警分组",example = "0")
@TableField("ALARM_GROUP")
-
private Long alarmGroup;
/**
* 视频通道数(预留)
*/
+ @ApiModelProperty(value = "视频通道数(预留)")
@TableField("CHANNEL_NUM")
private Integer channelNum;
+
+ @ApiModelProperty(value = "连接类型名称")
+ @TableField(exist = false)
+ private String connectTypeName;
+
+ @ApiModelProperty(value = "设备状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
@Override
public String toString() {
return "Device{" +
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
index ea4c8be..c235dd8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
@@ -1,7 +1,10 @@
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.entity.Alarm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
/**
*
@@ -13,4 +16,6 @@
*/
public interface AlarmMapper extends BaseMapper {
+ Page listPage(@Param("page")Page page, @Param("ew")QueryWrapper queryWrapper);
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
index 25cb4ab..703fcc5 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
@@ -2,4 +2,25 @@
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
index 8bc01f4..469085f 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
@@ -1,5 +1,8 @@
package com.casic.missiles.modular.system.service;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
import com.casic.missiles.modular.system.entity.Alarm;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -13,4 +16,9 @@
*/
public interface IAlarmService extends IService {
+ Page listPage(Page page, QueryWrapper queryWrapper);
+
+ Alarm alarmUpload(AlarmUpload alarmUpload);
+
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
index 00a421d..c851c83 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
@@ -13,4 +13,6 @@
*/
public interface IDeviceService extends IService {
+ Device selectDevice(String ip,String port,Integer channelNo);
+
}
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
new file mode 100644
index 0000000..d7cb90e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
@@ -0,0 +1,22 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PeopleUpload",description = "监测人数上报")
+public class PeopleUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "监测人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
index 4d2b7ef..c7db111 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
@@ -1,13 +1,15 @@
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;
/**
@@ -18,6 +20,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Alarm")
@Data
@TableName("bus_alarm")
public class Alarm implements Serializable {
@@ -33,58 +36,87 @@
/**
* 设备ID
*/
+ @ApiModelProperty(value = "设备ID",example = "0")
@TableField("DEVICE_ID")
private Long deviceId;
/**
* 报警类型
*/
+ @ApiModelProperty(value = "报警类型(字典值)")
@TableField("ALARM_TYPE")
private String alarmType;
/**
* 报警时间
*/
+ @ApiModelProperty(value = "报警时间")
@TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date alarmTime;
/**
* 报警状态
*/
+ @ApiModelProperty(value = "报警状态(字典值)")
@TableField("ALARM_STATUS")
private String alarmStatus;
/**
* 报警位置
*/
+ @ApiModelProperty(value = "报警位置")
@TableField("ALARM_LOCATION")
private String alarmLocation;
/**
* 报警图片
*/
+ @ApiModelProperty(value = "报警图片(url)")
@TableField("ALARM_IMAGE")
private String alarmImage;
/**
* 视频通道号
*/
+ @ApiModelProperty(value = "视频通道号(预留)")
@TableField("CHANNEL_NO")
private Integer channelNo;
/**
* 报警内容
*/
+ @ApiModelProperty(value = "报警内容(预留)")
@TableField("ALARM_CONTENT")
private String alarmContent;
/**
* 消警时间
*/
+ @ApiModelProperty(value = "消警时间")
@TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date cancelTime;
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "报警人数")
+ @TableField("PEOPLE_COUNT")
+ private Integer peopleCount;
+
+
+ @ApiModelProperty(value = "报警设备名称")
+ @TableField(exist = false)
+ private String deviceName;
+ @ApiModelProperty(value = "报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty(value = "报警状态名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+
@Override
public String toString() {
return "Alarm{" +
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
index ea7db5f..0f8ba79 100644
--- 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
@@ -4,6 +4,8 @@
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;
@@ -16,6 +18,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Device")
@Data
@TableName("bus_device")
public class Device implements Serializable {
@@ -31,66 +34,82 @@
/**
* 设备名称
*/
+ @ApiModelProperty(value = "设备名称")
@TableField("DEVICE_NAME")
private String deviceName;
/**
* IP
*/
+ @ApiModelProperty(value = "IP")
@TableField("IP")
private String ip;
/**
* 端口
*/
+ @ApiModelProperty(value = "端口")
@TableField("PORT")
private String port;
/**
* 用户名
*/
+ @ApiModelProperty(value = "用户名")
@TableField("USER_NAME")
private String userName;
/**
* 密码
*/
+ @ApiModelProperty(value = "密码")
@TableField("PASSWORD")
private String password;
/**
* 连接类型
*/
+ @ApiModelProperty(value = "连接类型(字典值)")
@TableField("CONNECT_TYPE")
private String connectType;
/**
* 位置
*/
+ @ApiModelProperty(value = "位置")
@TableField("LOCATION")
-
private String location;
/**
* 设备状态
*/
+ @ApiModelProperty(value = "设备状态(字典值)")
@TableField("STATUS")
-
private String status;
/**
* 报警分组
*/
+ @ApiModelProperty(value = "报警分组",example = "0")
@TableField("ALARM_GROUP")
-
private Long alarmGroup;
/**
* 视频通道数(预留)
*/
+ @ApiModelProperty(value = "视频通道数(预留)")
@TableField("CHANNEL_NUM")
private Integer channelNum;
+
+ @ApiModelProperty(value = "连接类型名称")
+ @TableField(exist = false)
+ private String connectTypeName;
+
+ @ApiModelProperty(value = "设备状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
@Override
public String toString() {
return "Device{" +
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
index ea4c8be..c235dd8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
@@ -1,7 +1,10 @@
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.entity.Alarm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
/**
*
@@ -13,4 +16,6 @@
*/
public interface AlarmMapper extends BaseMapper {
+ Page listPage(@Param("page")Page page, @Param("ew")QueryWrapper queryWrapper);
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
index 25cb4ab..703fcc5 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
@@ -2,4 +2,25 @@
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
index 8bc01f4..469085f 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
@@ -1,5 +1,8 @@
package com.casic.missiles.modular.system.service;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
import com.casic.missiles.modular.system.entity.Alarm;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -13,4 +16,9 @@
*/
public interface IAlarmService extends IService {
+ Page listPage(Page page, QueryWrapper queryWrapper);
+
+ Alarm alarmUpload(AlarmUpload alarmUpload);
+
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
index 00a421d..c851c83 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
@@ -13,4 +13,6 @@
*/
public interface IDeviceService extends IService {
+ Device selectDevice(String ip,String port,Integer channelNo);
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
index 6e5959b..dead3c8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
@@ -1,9 +1,20 @@
package com.casic.missiles.modular.system.service.impl;
+import cn.hutool.core.date.DateUtil;
+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.application.service.AbstractDictService;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
import com.casic.missiles.modular.system.mapper.AlarmMapper;
import com.casic.missiles.modular.system.service.IAlarmService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.modular.system.service.ICasicFileService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
@@ -15,6 +26,51 @@
* @since 2023-05-25
*/
@Service
+@RequiredArgsConstructor
public class AlarmServiceImpl extends ServiceImpl implements IAlarmService {
+ private final AbstractDictService dictService;
+ private final IDeviceService deviceService;
+ private final ICasicFileService fileService;
+
+ private static final String ALARM_STATUS_ON = "0";
+
+ @Override
+ public Page listPage(Page page, QueryWrapper queryWrapper) {
+ page = this.baseMapper.listPage(page, queryWrapper);
+ for (Alarm alarm : page.getRecords()) {
+ if(StrUtil.isNotEmpty(alarm.getAlarmType())){
+ alarm.setAlarmTypeName(dictService.getDictNameByCode("alarmType",alarm.getAlarmType()));
+ }
+ if(StrUtil.isNotEmpty(alarm.getAlarmStatus())){
+ alarm.setAlarmStatusName(dictService.getDictNameByCode("alarmStatus",alarm.getAlarmStatus()));
+ }
+ }
+ return page;
+ }
+
+ @Override
+ public Alarm alarmUpload(AlarmUpload alarmUpload) {
+ Alarm alarm = new Alarm();
+ if(StrUtil.isAllNotEmpty(alarmUpload.getIp(),alarmUpload.getPort())){
+ Device device = deviceService.selectDevice(alarmUpload.getIp(),alarmUpload.getPort(),alarmUpload.getChannelNo());
+ if(ObjectUtil.isNotEmpty(device)){
+ alarm.setDeviceId(device.getId());
+ alarm.setAlarmLocation(device.getLocation());
+ }
+ }
+ alarm.setAlarmType(alarmUpload.getAlarmType());
+ alarm.setAlarmTime(DateUtil.parseDateTime(alarmUpload.getAlarmTime()));
+ alarm.setAlarmStatus(ALARM_STATUS_ON);
+ if(StrUtil.isNotEmpty(alarmUpload.getAlarmImage())){
+ String imgBase64 = "data:image/jpeg;base64," + alarmUpload.getAlarmImage();
+ String imageUrl = fileService.saveFile(imgBase64);
+ alarm.setAlarmImage(imageUrl);
+ }
+ alarm.setChannelNo(alarmUpload.getChannelNo());
+ alarm.setPeopleCount(alarmUpload.getPeopleCount());
+ alarm.setAlarmContent(alarmUpload.getAlarmContent());
+ this.save(alarm);
+ return alarm;
+ }
}
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
new file mode 100644
index 0000000..d7cb90e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
@@ -0,0 +1,22 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PeopleUpload",description = "监测人数上报")
+public class PeopleUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "监测人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
index 4d2b7ef..c7db111 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
@@ -1,13 +1,15 @@
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;
/**
@@ -18,6 +20,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Alarm")
@Data
@TableName("bus_alarm")
public class Alarm implements Serializable {
@@ -33,58 +36,87 @@
/**
* 设备ID
*/
+ @ApiModelProperty(value = "设备ID",example = "0")
@TableField("DEVICE_ID")
private Long deviceId;
/**
* 报警类型
*/
+ @ApiModelProperty(value = "报警类型(字典值)")
@TableField("ALARM_TYPE")
private String alarmType;
/**
* 报警时间
*/
+ @ApiModelProperty(value = "报警时间")
@TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date alarmTime;
/**
* 报警状态
*/
+ @ApiModelProperty(value = "报警状态(字典值)")
@TableField("ALARM_STATUS")
private String alarmStatus;
/**
* 报警位置
*/
+ @ApiModelProperty(value = "报警位置")
@TableField("ALARM_LOCATION")
private String alarmLocation;
/**
* 报警图片
*/
+ @ApiModelProperty(value = "报警图片(url)")
@TableField("ALARM_IMAGE")
private String alarmImage;
/**
* 视频通道号
*/
+ @ApiModelProperty(value = "视频通道号(预留)")
@TableField("CHANNEL_NO")
private Integer channelNo;
/**
* 报警内容
*/
+ @ApiModelProperty(value = "报警内容(预留)")
@TableField("ALARM_CONTENT")
private String alarmContent;
/**
* 消警时间
*/
+ @ApiModelProperty(value = "消警时间")
@TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date cancelTime;
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "报警人数")
+ @TableField("PEOPLE_COUNT")
+ private Integer peopleCount;
+
+
+ @ApiModelProperty(value = "报警设备名称")
+ @TableField(exist = false)
+ private String deviceName;
+ @ApiModelProperty(value = "报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty(value = "报警状态名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+
@Override
public String toString() {
return "Alarm{" +
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
index ea7db5f..0f8ba79 100644
--- 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
@@ -4,6 +4,8 @@
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;
@@ -16,6 +18,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Device")
@Data
@TableName("bus_device")
public class Device implements Serializable {
@@ -31,66 +34,82 @@
/**
* 设备名称
*/
+ @ApiModelProperty(value = "设备名称")
@TableField("DEVICE_NAME")
private String deviceName;
/**
* IP
*/
+ @ApiModelProperty(value = "IP")
@TableField("IP")
private String ip;
/**
* 端口
*/
+ @ApiModelProperty(value = "端口")
@TableField("PORT")
private String port;
/**
* 用户名
*/
+ @ApiModelProperty(value = "用户名")
@TableField("USER_NAME")
private String userName;
/**
* 密码
*/
+ @ApiModelProperty(value = "密码")
@TableField("PASSWORD")
private String password;
/**
* 连接类型
*/
+ @ApiModelProperty(value = "连接类型(字典值)")
@TableField("CONNECT_TYPE")
private String connectType;
/**
* 位置
*/
+ @ApiModelProperty(value = "位置")
@TableField("LOCATION")
-
private String location;
/**
* 设备状态
*/
+ @ApiModelProperty(value = "设备状态(字典值)")
@TableField("STATUS")
-
private String status;
/**
* 报警分组
*/
+ @ApiModelProperty(value = "报警分组",example = "0")
@TableField("ALARM_GROUP")
-
private Long alarmGroup;
/**
* 视频通道数(预留)
*/
+ @ApiModelProperty(value = "视频通道数(预留)")
@TableField("CHANNEL_NUM")
private Integer channelNum;
+
+ @ApiModelProperty(value = "连接类型名称")
+ @TableField(exist = false)
+ private String connectTypeName;
+
+ @ApiModelProperty(value = "设备状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
@Override
public String toString() {
return "Device{" +
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
index ea4c8be..c235dd8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
@@ -1,7 +1,10 @@
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.entity.Alarm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
/**
*
@@ -13,4 +16,6 @@
*/
public interface AlarmMapper extends BaseMapper {
+ Page listPage(@Param("page")Page page, @Param("ew")QueryWrapper queryWrapper);
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
index 25cb4ab..703fcc5 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
@@ -2,4 +2,25 @@
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
index 8bc01f4..469085f 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
@@ -1,5 +1,8 @@
package com.casic.missiles.modular.system.service;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
import com.casic.missiles.modular.system.entity.Alarm;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -13,4 +16,9 @@
*/
public interface IAlarmService extends IService {
+ Page listPage(Page page, QueryWrapper queryWrapper);
+
+ Alarm alarmUpload(AlarmUpload alarmUpload);
+
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
index 00a421d..c851c83 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
@@ -13,4 +13,6 @@
*/
public interface IDeviceService extends IService {
+ Device selectDevice(String ip,String port,Integer channelNo);
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
index 6e5959b..dead3c8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
@@ -1,9 +1,20 @@
package com.casic.missiles.modular.system.service.impl;
+import cn.hutool.core.date.DateUtil;
+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.application.service.AbstractDictService;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
import com.casic.missiles.modular.system.mapper.AlarmMapper;
import com.casic.missiles.modular.system.service.IAlarmService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.modular.system.service.ICasicFileService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
@@ -15,6 +26,51 @@
* @since 2023-05-25
*/
@Service
+@RequiredArgsConstructor
public class AlarmServiceImpl extends ServiceImpl implements IAlarmService {
+ private final AbstractDictService dictService;
+ private final IDeviceService deviceService;
+ private final ICasicFileService fileService;
+
+ private static final String ALARM_STATUS_ON = "0";
+
+ @Override
+ public Page listPage(Page page, QueryWrapper queryWrapper) {
+ page = this.baseMapper.listPage(page, queryWrapper);
+ for (Alarm alarm : page.getRecords()) {
+ if(StrUtil.isNotEmpty(alarm.getAlarmType())){
+ alarm.setAlarmTypeName(dictService.getDictNameByCode("alarmType",alarm.getAlarmType()));
+ }
+ if(StrUtil.isNotEmpty(alarm.getAlarmStatus())){
+ alarm.setAlarmStatusName(dictService.getDictNameByCode("alarmStatus",alarm.getAlarmStatus()));
+ }
+ }
+ return page;
+ }
+
+ @Override
+ public Alarm alarmUpload(AlarmUpload alarmUpload) {
+ Alarm alarm = new Alarm();
+ if(StrUtil.isAllNotEmpty(alarmUpload.getIp(),alarmUpload.getPort())){
+ Device device = deviceService.selectDevice(alarmUpload.getIp(),alarmUpload.getPort(),alarmUpload.getChannelNo());
+ if(ObjectUtil.isNotEmpty(device)){
+ alarm.setDeviceId(device.getId());
+ alarm.setAlarmLocation(device.getLocation());
+ }
+ }
+ alarm.setAlarmType(alarmUpload.getAlarmType());
+ alarm.setAlarmTime(DateUtil.parseDateTime(alarmUpload.getAlarmTime()));
+ alarm.setAlarmStatus(ALARM_STATUS_ON);
+ if(StrUtil.isNotEmpty(alarmUpload.getAlarmImage())){
+ String imgBase64 = "data:image/jpeg;base64," + alarmUpload.getAlarmImage();
+ String imageUrl = fileService.saveFile(imgBase64);
+ alarm.setAlarmImage(imageUrl);
+ }
+ alarm.setChannelNo(alarmUpload.getChannelNo());
+ alarm.setPeopleCount(alarmUpload.getPeopleCount());
+ alarm.setAlarmContent(alarmUpload.getAlarmContent());
+ this.save(alarm);
+ return alarm;
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java
index 31a5a18..3f0202c 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java
@@ -1,5 +1,6 @@
package com.casic.missiles.modular.system.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.casic.missiles.modular.system.entity.Device;
import com.casic.missiles.modular.system.mapper.DeviceMapper;
import com.casic.missiles.modular.system.service.IDeviceService;
@@ -17,4 +18,12 @@
@Service
public class DeviceServiceImpl extends ServiceImpl implements IDeviceService {
+
+ @Override
+ public Device selectDevice(String ip, String port, Integer channelNo) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("IP",ip);
+ queryWrapper.eq("PORT",port);
+ return this.getOne(queryWrapper);
+ }
}
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
new file mode 100644
index 0000000..d7cb90e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
@@ -0,0 +1,22 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PeopleUpload",description = "监测人数上报")
+public class PeopleUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "监测人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
index 4d2b7ef..c7db111 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
@@ -1,13 +1,15 @@
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;
/**
@@ -18,6 +20,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Alarm")
@Data
@TableName("bus_alarm")
public class Alarm implements Serializable {
@@ -33,58 +36,87 @@
/**
* 设备ID
*/
+ @ApiModelProperty(value = "设备ID",example = "0")
@TableField("DEVICE_ID")
private Long deviceId;
/**
* 报警类型
*/
+ @ApiModelProperty(value = "报警类型(字典值)")
@TableField("ALARM_TYPE")
private String alarmType;
/**
* 报警时间
*/
+ @ApiModelProperty(value = "报警时间")
@TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date alarmTime;
/**
* 报警状态
*/
+ @ApiModelProperty(value = "报警状态(字典值)")
@TableField("ALARM_STATUS")
private String alarmStatus;
/**
* 报警位置
*/
+ @ApiModelProperty(value = "报警位置")
@TableField("ALARM_LOCATION")
private String alarmLocation;
/**
* 报警图片
*/
+ @ApiModelProperty(value = "报警图片(url)")
@TableField("ALARM_IMAGE")
private String alarmImage;
/**
* 视频通道号
*/
+ @ApiModelProperty(value = "视频通道号(预留)")
@TableField("CHANNEL_NO")
private Integer channelNo;
/**
* 报警内容
*/
+ @ApiModelProperty(value = "报警内容(预留)")
@TableField("ALARM_CONTENT")
private String alarmContent;
/**
* 消警时间
*/
+ @ApiModelProperty(value = "消警时间")
@TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date cancelTime;
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "报警人数")
+ @TableField("PEOPLE_COUNT")
+ private Integer peopleCount;
+
+
+ @ApiModelProperty(value = "报警设备名称")
+ @TableField(exist = false)
+ private String deviceName;
+ @ApiModelProperty(value = "报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty(value = "报警状态名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+
@Override
public String toString() {
return "Alarm{" +
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
index ea7db5f..0f8ba79 100644
--- 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
@@ -4,6 +4,8 @@
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;
@@ -16,6 +18,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Device")
@Data
@TableName("bus_device")
public class Device implements Serializable {
@@ -31,66 +34,82 @@
/**
* 设备名称
*/
+ @ApiModelProperty(value = "设备名称")
@TableField("DEVICE_NAME")
private String deviceName;
/**
* IP
*/
+ @ApiModelProperty(value = "IP")
@TableField("IP")
private String ip;
/**
* 端口
*/
+ @ApiModelProperty(value = "端口")
@TableField("PORT")
private String port;
/**
* 用户名
*/
+ @ApiModelProperty(value = "用户名")
@TableField("USER_NAME")
private String userName;
/**
* 密码
*/
+ @ApiModelProperty(value = "密码")
@TableField("PASSWORD")
private String password;
/**
* 连接类型
*/
+ @ApiModelProperty(value = "连接类型(字典值)")
@TableField("CONNECT_TYPE")
private String connectType;
/**
* 位置
*/
+ @ApiModelProperty(value = "位置")
@TableField("LOCATION")
-
private String location;
/**
* 设备状态
*/
+ @ApiModelProperty(value = "设备状态(字典值)")
@TableField("STATUS")
-
private String status;
/**
* 报警分组
*/
+ @ApiModelProperty(value = "报警分组",example = "0")
@TableField("ALARM_GROUP")
-
private Long alarmGroup;
/**
* 视频通道数(预留)
*/
+ @ApiModelProperty(value = "视频通道数(预留)")
@TableField("CHANNEL_NUM")
private Integer channelNum;
+
+ @ApiModelProperty(value = "连接类型名称")
+ @TableField(exist = false)
+ private String connectTypeName;
+
+ @ApiModelProperty(value = "设备状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
@Override
public String toString() {
return "Device{" +
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
index ea4c8be..c235dd8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
@@ -1,7 +1,10 @@
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.entity.Alarm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
/**
*
@@ -13,4 +16,6 @@
*/
public interface AlarmMapper extends BaseMapper {
+ Page listPage(@Param("page")Page page, @Param("ew")QueryWrapper queryWrapper);
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
index 25cb4ab..703fcc5 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
@@ -2,4 +2,25 @@
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
index 8bc01f4..469085f 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
@@ -1,5 +1,8 @@
package com.casic.missiles.modular.system.service;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
import com.casic.missiles.modular.system.entity.Alarm;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -13,4 +16,9 @@
*/
public interface IAlarmService extends IService {
+ Page listPage(Page page, QueryWrapper queryWrapper);
+
+ Alarm alarmUpload(AlarmUpload alarmUpload);
+
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
index 00a421d..c851c83 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
@@ -13,4 +13,6 @@
*/
public interface IDeviceService extends IService {
+ Device selectDevice(String ip,String port,Integer channelNo);
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
index 6e5959b..dead3c8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
@@ -1,9 +1,20 @@
package com.casic.missiles.modular.system.service.impl;
+import cn.hutool.core.date.DateUtil;
+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.application.service.AbstractDictService;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
import com.casic.missiles.modular.system.mapper.AlarmMapper;
import com.casic.missiles.modular.system.service.IAlarmService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.modular.system.service.ICasicFileService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
@@ -15,6 +26,51 @@
* @since 2023-05-25
*/
@Service
+@RequiredArgsConstructor
public class AlarmServiceImpl extends ServiceImpl implements IAlarmService {
+ private final AbstractDictService dictService;
+ private final IDeviceService deviceService;
+ private final ICasicFileService fileService;
+
+ private static final String ALARM_STATUS_ON = "0";
+
+ @Override
+ public Page listPage(Page page, QueryWrapper queryWrapper) {
+ page = this.baseMapper.listPage(page, queryWrapper);
+ for (Alarm alarm : page.getRecords()) {
+ if(StrUtil.isNotEmpty(alarm.getAlarmType())){
+ alarm.setAlarmTypeName(dictService.getDictNameByCode("alarmType",alarm.getAlarmType()));
+ }
+ if(StrUtil.isNotEmpty(alarm.getAlarmStatus())){
+ alarm.setAlarmStatusName(dictService.getDictNameByCode("alarmStatus",alarm.getAlarmStatus()));
+ }
+ }
+ return page;
+ }
+
+ @Override
+ public Alarm alarmUpload(AlarmUpload alarmUpload) {
+ Alarm alarm = new Alarm();
+ if(StrUtil.isAllNotEmpty(alarmUpload.getIp(),alarmUpload.getPort())){
+ Device device = deviceService.selectDevice(alarmUpload.getIp(),alarmUpload.getPort(),alarmUpload.getChannelNo());
+ if(ObjectUtil.isNotEmpty(device)){
+ alarm.setDeviceId(device.getId());
+ alarm.setAlarmLocation(device.getLocation());
+ }
+ }
+ alarm.setAlarmType(alarmUpload.getAlarmType());
+ alarm.setAlarmTime(DateUtil.parseDateTime(alarmUpload.getAlarmTime()));
+ alarm.setAlarmStatus(ALARM_STATUS_ON);
+ if(StrUtil.isNotEmpty(alarmUpload.getAlarmImage())){
+ String imgBase64 = "data:image/jpeg;base64," + alarmUpload.getAlarmImage();
+ String imageUrl = fileService.saveFile(imgBase64);
+ alarm.setAlarmImage(imageUrl);
+ }
+ alarm.setChannelNo(alarmUpload.getChannelNo());
+ alarm.setPeopleCount(alarmUpload.getPeopleCount());
+ alarm.setAlarmContent(alarmUpload.getAlarmContent());
+ this.save(alarm);
+ return alarm;
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java
index 31a5a18..3f0202c 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/DeviceServiceImpl.java
@@ -1,5 +1,6 @@
package com.casic.missiles.modular.system.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.casic.missiles.modular.system.entity.Device;
import com.casic.missiles.modular.system.mapper.DeviceMapper;
import com.casic.missiles.modular.system.service.IDeviceService;
@@ -17,4 +18,12 @@
@Service
public class DeviceServiceImpl extends ServiceImpl implements IDeviceService {
+
+ @Override
+ public Device selectDevice(String ip, String port, Integer channelNo) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("IP",ip);
+ queryWrapper.eq("PORT",port);
+ return this.getOne(queryWrapper);
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/websocket/WebSocket.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/websocket/WebSocket.java
new file mode 100644
index 0000000..c7bd687
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/websocket/WebSocket.java
@@ -0,0 +1,103 @@
+package com.casic.missiles.modular.system.websocket;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@Slf4j
+@Component
+@ServerEndpoint("/websocket/{userId}")
+//此注解相当于设置访问URL
+public class WebSocket {
+ private Session session;
+
+ private static CopyOnWriteArraySet webSockets =new CopyOnWriteArraySet<>();
+ private static Map sessionPool = new HashMap();
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam(value="userId")String userId) {
+ this.session = session;
+ webSockets.add(this);
+ sessionPool.put(userId, session);
+ log.info("[websocket]connection open from {}, current size:{}",userId,webSockets.size());
+ }
+
+ @OnClose
+ public void onClose() {
+ webSockets.remove(this);
+ log.info("[websocket]connection close, current size:"+webSockets.size());
+ }
+
+ @OnMessage
+ public void onMessage(String message) {
+ log.info("[websocket]receiveMessage:"+message);
+ }
+
+ // 此为广播消息
+ public void sendAllMessage(String message) {
+ for(WebSocket webSocket : webSockets) {
+ log.info("[websocket]sendAllMessage:"+message);
+ try {
+ webSocket.session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ // 发送列表消息
+ public void sendListMessage(List userIds, String message){
+ log.info("[websocket]sendListMessage:"+message);
+ for (String userId : userIds) {
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ // 发送列表消息
+
+// public void sendListMessage(List userIds, Object data){
+// log.info("【websocket消息】列表消息:"+data);
+// for (String userId : userIds) {
+// Session session = sessionPool.get(userId);
+// if (session != null) {
+// try {
+//// session.getAsyncRemote().sendText(message);
+// session.getAsyncRemote().sendObject(data);
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// }
+// }
+// }
+
+ // 此为单点消息
+ public void sendOneMessage(String userId, String message) {
+ log.info("[websocket]sendOneMessage:"+message);
+ Session session = sessionPool.get(userId);
+ if (session != null) {
+ try {
+ session.getAsyncRemote().sendText(message);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+}
diff --git a/casic_video_283_server/pom.xml b/casic_video_283_server/pom.xml
index 353504b..7edf41f 100644
--- a/casic_video_283_server/pom.xml
+++ b/casic_video_283_server/pom.xml
@@ -63,6 +63,10 @@
knife4j-spring-boot-starter
${knife4j.version}
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
index 1795cf1..fa6b41e 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java
@@ -1,9 +1,24 @@
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.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
/**
*
@@ -13,8 +28,42 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "报警管理接口")
@Controller
-@RequestMapping("/system/alarm")
-public class AlarmController {
+@RequestMapping("/alarm")
+@RequiredArgsConstructor
+public class AlarmController extends BaseController {
+ private final IAlarmService alarmService;
+
+ @ApiOperation("报警分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "alarmLocation", 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 = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String alarmLocation,String alarmType,String alarmStartTime,String alarmEndTime){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(alarmLocation)){
+ queryWrapper.like("alarm.ALARM_LOCATION",alarmLocation);
+ }
+ 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));
+ }
}
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
index aa50d78..4a9243e 100644
--- 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
@@ -1,10 +1,25 @@
package com.casic.missiles.modular.system.controller;
-import org.springframework.web.bind.annotation.RequestMapping;
+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.application.service.AbstractDictService;
+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.entity.Device;
+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.util.List;
+
+import static com.casic.missiles.model.response.ResponseData.DEFAULT_SUCCESS_MESSAGE;
+
/**
*
* 设备记录表 前端控制器
@@ -13,8 +28,92 @@
* @author zyj
* @since 2023-05-25
*/
+@Api(tags = "设备管理接口")
@Controller
-@RequestMapping("/system/device")
-public class DeviceController {
+@RequestMapping("/device")
+@RequiredArgsConstructor
+public class DeviceController extends BaseController {
+
+ private final IDeviceService deviceService;
+ private final AbstractDictService dictService;
+
+ @ApiOperation("新增设备")
+ @PostMapping("add")
+ @ResponseBody
+ public Object add(@RequestBody Device device){
+ deviceService.save(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("编辑设备")
+ @PostMapping("update")
+ @ResponseBody
+ public Object update(@RequestBody Device device){
+ deviceService.updateById(device);
+ return ResponseData.success();
+ }
+
+ @ApiOperation("删除设备")
+ @PostMapping("delete")
+ @ResponseBody
+ public Object delete(@ApiParam(value = "设备id",example = "0")@RequestParam Long deviceId){
+ deviceService.removeById(deviceId);
+ return ResponseData.success();
+ }
+
+
+ @ApiOperation("设备分页列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("listPage")
+ @ResponseBody
+ public Object listPage(String deviceName){
+ Page page = PageFactory.defaultPage();
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ page = deviceService.page(page,queryWrapper);
+ wrapperDevice(page.getRecords());
+ return ResponseData.success(super.packForBT(page));
+ }
+
+ @ApiOperation("设备列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "deviceName", value = "设备名称",dataType = "String", paramType = "query"),
+ @ApiImplicitParam(name = "location", value = "设备位置",dataType = "String", paramType = "query"),
+ })
+ @ApiResponses({
+ @ApiResponse(code = 200,message = DEFAULT_SUCCESS_MESSAGE,response = Device.class),
+ })
+ @GetMapping("list")
+ @ResponseBody
+ public Object list(String deviceName,String location){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if(StrUtil.isNotEmpty(deviceName)){
+ queryWrapper.like("DEVICE_NAME",deviceName);
+ }
+ if(StrUtil.isNotEmpty(location)){
+ queryWrapper.like("LOCATION",location);
+ }
+ List deviceList = deviceService.list(queryWrapper);
+ wrapperDevice(deviceList);
+ return ResponseData.success(deviceList);
+ }
+
+ private void wrapperDevice(List page) {
+ for (Device device : page) {
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setStatusName(dictService.getDictNameByCode("deviceStatus", device.getStatus()));
+ }
+ if (StrUtil.isNotEmpty(device.getConnectType())) {
+ device.setConnectTypeName(dictService.getDictNameByCode("connectType", device.getConnectType()));
+ }
+ }
+ }
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
new file mode 100644
index 0000000..f2fc224
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/controller/UploadController.java
@@ -0,0 +1,51 @@
+package com.casic.missiles.modular.system.controller;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
+import com.casic.missiles.modular.system.dto.PeopleUpload;
+import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.service.IAlarmService;
+import com.casic.missiles.modular.system.websocket.WebSocket;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Date;
+
+@Api(tags = "数据上报接口")
+@Controller
+@RequestMapping("/upload")
+@RequiredArgsConstructor
+public class UploadController {
+
+ private final IAlarmService alarmService;
+ private final WebSocket webSocket;
+
+ @ApiOperation("报警上报")
+ @PostMapping("alarm")
+ @ResponseBody
+ public Object alarmUpload(@RequestBody AlarmUpload alarmUpload){
+ if(StrUtil.isEmpty(alarmUpload.getAlarmTime())){
+ alarmUpload.setAlarmTime(DateUtil.formatDateTime(new Date()));
+ }
+ Alarm alarm = alarmService.alarmUpload(alarmUpload);
+ webSocket.sendAllMessage(JSONObject.toJSONString(alarmUpload));
+ return ResponseData.success();
+ }
+
+ @ApiOperation("工作台人数上报")
+ @PostMapping("people")
+ @ResponseBody
+ public Object peopleUpload(@RequestBody PeopleUpload peopleUpload){
+ webSocket.sendAllMessage(JSONObject.toJSONString(peopleUpload));
+ return ResponseData.success();
+ }
+}
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..3cb6e6e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/AlarmUpload.java
@@ -0,0 +1,34 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AlarmUpload",description = "报警上报")
+public class AlarmUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "报警类型",required = true)
+ private String alarmType;
+
+ @ApiModelProperty(value = "报警图片(base64,不包含头)")
+ private String alarmImage;
+
+ @ApiModelProperty(value = "报警时间(可以不传,默认为上传时间)")
+ private String alarmTime;
+
+ @ApiModelProperty(value = "报警内容")
+ private String alarmContent;
+
+ @ApiModelProperty(value = "报警人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
new file mode 100644
index 0000000..d7cb90e
--- /dev/null
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/dto/PeopleUpload.java
@@ -0,0 +1,22 @@
+package com.casic.missiles.modular.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PeopleUpload",description = "监测人数上报")
+public class PeopleUpload {
+
+ @ApiModelProperty(value = "IP",required = true)
+ private String ip;
+
+ @ApiModelProperty(value = "端口号",required = true)
+ private String port;
+
+ @ApiModelProperty(value = "通道号")
+ private Integer channelNo;
+
+ @ApiModelProperty(value = "监测人数")
+ private Integer peopleCount;
+}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
index 4d2b7ef..c7db111 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/entity/Alarm.java
@@ -1,13 +1,15 @@
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;
/**
@@ -18,6 +20,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Alarm")
@Data
@TableName("bus_alarm")
public class Alarm implements Serializable {
@@ -33,58 +36,87 @@
/**
* 设备ID
*/
+ @ApiModelProperty(value = "设备ID",example = "0")
@TableField("DEVICE_ID")
private Long deviceId;
/**
* 报警类型
*/
+ @ApiModelProperty(value = "报警类型(字典值)")
@TableField("ALARM_TYPE")
private String alarmType;
/**
* 报警时间
*/
+ @ApiModelProperty(value = "报警时间")
@TableField("ALARM_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date alarmTime;
/**
* 报警状态
*/
+ @ApiModelProperty(value = "报警状态(字典值)")
@TableField("ALARM_STATUS")
private String alarmStatus;
/**
* 报警位置
*/
+ @ApiModelProperty(value = "报警位置")
@TableField("ALARM_LOCATION")
private String alarmLocation;
/**
* 报警图片
*/
+ @ApiModelProperty(value = "报警图片(url)")
@TableField("ALARM_IMAGE")
private String alarmImage;
/**
* 视频通道号
*/
+ @ApiModelProperty(value = "视频通道号(预留)")
@TableField("CHANNEL_NO")
private Integer channelNo;
/**
* 报警内容
*/
+ @ApiModelProperty(value = "报警内容(预留)")
@TableField("ALARM_CONTENT")
private String alarmContent;
/**
* 消警时间
*/
+ @ApiModelProperty(value = "消警时间")
@TableField("CANCEL_TIME")
+ @JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date cancelTime;
+ /**
+ * 消警时间
+ */
+ @ApiModelProperty(value = "报警人数")
+ @TableField("PEOPLE_COUNT")
+ private Integer peopleCount;
+
+
+ @ApiModelProperty(value = "报警设备名称")
+ @TableField(exist = false)
+ private String deviceName;
+ @ApiModelProperty(value = "报警类型名称")
+ @TableField(exist = false)
+ private String alarmTypeName;
+ @ApiModelProperty(value = "报警状态名称")
+ @TableField(exist = false)
+ private String alarmStatusName;
+
@Override
public String toString() {
return "Alarm{" +
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
index ea7db5f..0f8ba79 100644
--- 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
@@ -4,6 +4,8 @@
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;
@@ -16,6 +18,7 @@
* @author zyj
* @since 2023-05-25
*/
+@ApiModel("Device")
@Data
@TableName("bus_device")
public class Device implements Serializable {
@@ -31,66 +34,82 @@
/**
* 设备名称
*/
+ @ApiModelProperty(value = "设备名称")
@TableField("DEVICE_NAME")
private String deviceName;
/**
* IP
*/
+ @ApiModelProperty(value = "IP")
@TableField("IP")
private String ip;
/**
* 端口
*/
+ @ApiModelProperty(value = "端口")
@TableField("PORT")
private String port;
/**
* 用户名
*/
+ @ApiModelProperty(value = "用户名")
@TableField("USER_NAME")
private String userName;
/**
* 密码
*/
+ @ApiModelProperty(value = "密码")
@TableField("PASSWORD")
private String password;
/**
* 连接类型
*/
+ @ApiModelProperty(value = "连接类型(字典值)")
@TableField("CONNECT_TYPE")
private String connectType;
/**
* 位置
*/
+ @ApiModelProperty(value = "位置")
@TableField("LOCATION")
-
private String location;
/**
* 设备状态
*/
+ @ApiModelProperty(value = "设备状态(字典值)")
@TableField("STATUS")
-
private String status;
/**
* 报警分组
*/
+ @ApiModelProperty(value = "报警分组",example = "0")
@TableField("ALARM_GROUP")
-
private Long alarmGroup;
/**
* 视频通道数(预留)
*/
+ @ApiModelProperty(value = "视频通道数(预留)")
@TableField("CHANNEL_NUM")
private Integer channelNum;
+
+ @ApiModelProperty(value = "连接类型名称")
+ @TableField(exist = false)
+ private String connectTypeName;
+
+ @ApiModelProperty(value = "设备状态名称")
+ @TableField(exist = false)
+ private String statusName;
+
@Override
public String toString() {
return "Device{" +
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
index ea4c8be..c235dd8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/AlarmMapper.java
@@ -1,7 +1,10 @@
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.entity.Alarm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
/**
*
@@ -13,4 +16,6 @@
*/
public interface AlarmMapper extends BaseMapper {
+ Page listPage(@Param("page")Page page, @Param("ew")QueryWrapper queryWrapper);
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
index 25cb4ab..703fcc5 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/mapper/mapping/AlarmMapper.xml
@@ -2,4 +2,25 @@
+
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
index 8bc01f4..469085f 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java
@@ -1,5 +1,8 @@
package com.casic.missiles.modular.system.service;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
import com.casic.missiles.modular.system.entity.Alarm;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -13,4 +16,9 @@
*/
public interface IAlarmService extends IService {
+ Page listPage(Page page, QueryWrapper queryWrapper);
+
+ Alarm alarmUpload(AlarmUpload alarmUpload);
+
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
index 00a421d..c851c83 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/IDeviceService.java
@@ -13,4 +13,6 @@
*/
public interface IDeviceService extends IService {
+ Device selectDevice(String ip,String port,Integer channelNo);
+
}
diff --git a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
index 6e5959b..dead3c8 100644
--- a/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
+++ b/casic_video_283_server/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java
@@ -1,9 +1,20 @@
package com.casic.missiles.modular.system.service.impl;
+import cn.hutool.core.date.DateUtil;
+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.application.service.AbstractDictService;
+import com.casic.missiles.modular.system.dto.AlarmUpload;
import com.casic.missiles.modular.system.entity.Alarm;
+import com.casic.missiles.modular.system.entity.Device;
import com.casic.missiles.modular.system.mapper.AlarmMapper;
import com.casic.missiles.modular.system.service.IAlarmService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.modular.system.service.ICasicFileService;
+import com.casic.missiles.modular.system.service.IDeviceService;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
@@ -15,6 +26,51 @@
* @since 2023-05-25
*/
@Service
+@RequiredArgsConstructor
public class AlarmServiceImpl extends ServiceImpl implements IAlarmService {
+ private final AbstractDictService dictService;
+ private final IDeviceService deviceService;
+ private final ICasicFileService fileService;
+
+ private static final String ALARM_STATUS_ON = "0";
+
+ @Override
+ public Page listPage(Page page, QueryWrapper