diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java index 2d7ab31..2ebe13b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.system.dto; import com.casic.missiles.modular.system.task.AutoCruiseResertTask; -//import com.casic.missiles.modular.system.task.AutoCruiseTask; import com.casic.missiles.modular.system.task.AutoCruiseTask; import org.springframework.stereotype.Component; diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java index 2d7ab31..2ebe13b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.system.dto; import com.casic.missiles.modular.system.task.AutoCruiseResertTask; -//import com.casic.missiles.modular.system.task.AutoCruiseTask; import com.casic.missiles.modular.system.task.AutoCruiseTask; import org.springframework.stereotype.Component; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java new file mode 100644 index 0000000..caadaba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.AlarmAIDTO; + +public interface IReceptionService { + + boolean getAIRecords(AlarmAIDTO alarmAIDTO); + +} diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java index 2d7ab31..2ebe13b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.system.dto; import com.casic.missiles.modular.system.task.AutoCruiseResertTask; -//import com.casic.missiles.modular.system.task.AutoCruiseTask; import com.casic.missiles.modular.system.task.AutoCruiseTask; import org.springframework.stereotype.Component; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java new file mode 100644 index 0000000..caadaba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.AlarmAIDTO; + +public interface IReceptionService { + + boolean getAIRecords(AlarmAIDTO alarmAIDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java index 07f00de..6df5d0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java @@ -86,6 +86,11 @@ Date startTaskTime = DateUtil.parseDateTime(busPlan.getBeginDate() + " " + busPlan.getBeginTime()); Date endTaskTime = DateUtil.parseDateTime(busPlan.getEndDate() + " " + busPlan.getEndTime()); if (ObjectUtil.isAllNotEmpty(startTaskTime, endTaskTime)) { + //若起、止时间都小于当前时间,无法启动 + if (DateUtil.compare(startTaskTime, new Date()) < 0 && + DateUtil.compare(endTaskTime, new Date()) < 0) { + throw new BusinessException(BusinessExceptionEnum.RUN_TIME_FAILED); + } //在此期间若没有任务执行 if (!TaskCommom.isOnTaskInfo(busPlan.getMonitorId(), startTaskTime, endTaskTime)) { if (DateUtil.compare(startTaskTime, new Date()) <= 0 && @@ -125,24 +130,25 @@ if (null != baseInfo) { if (StatusEnum.TASK_RUNNING.equals(status)) { //若开始任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())){ + if (!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())) { TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); - }else { + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); + } else { //执行成功,设置任务执行状态开始 busPlan.setTaskStatus(status); this.updateById(busPlan); } } else if (StatusEnum.TASK_COMPLETE.equals(status)) { - //若停止任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())){ - TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); - }else { - //执行成功,设置任务执行状态完成 - busPlan.setTaskStatus(status); - //执行成功,设置任务状态完成 - busPlan.setStatus(StatusEnum.STATUS_CLOSE); - this.updateById(busPlan); - } + + if (cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())) { + //执行成功,设置任务执行状态完成 + busPlan.setTaskStatus(status); + //执行成功,设置任务状态完成 + busPlan.setStatus(StatusEnum.STATUS_CLOSE); + this.updateById(busPlan); + } + TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); } } return true; @@ -168,17 +174,22 @@ map.put("jobId", jobId); quartzManager.addJob(jobName, cls, taskTime, map); TaskCommom.addOrUpdateTaskInfo(jobName, Long.valueOf(jobId), monitorId, StatusEnum.STATUS_OPEN, taskTime); + //更新开启状态 + BusPlan busPlan = this.getById(Long.valueOf(jobId)); + busPlan.setStatus(StatusEnum.STATUS_OPEN); + this.updateById(busPlan); } //删除job public void deleteTask(String jobName, BusPlan busPlan) { + String taskStatus = busPlan.getTaskStatus(); quartzManager.removeJob(jobName); TaskCommom.deleteTaskInfos(jobName); busPlan.setStatus(StatusEnum.STATUS_CLOSE); busPlan.setTaskStatus(StatusEnum.TASK_COMPLETE); this.updateById(busPlan); //若有任务正在执行,则取消 - if (StatusEnum.STATUS_OPEN.equals(busPlan.getTaskStatus())) { + if (StatusEnum.STATUS_OPEN.equals(taskStatus)) { BusMonipoiInfo baseInfo = monipoiInfoService.getById(busPlan.getMonitorId()); if (null != baseInfo) { cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum()); @@ -195,7 +206,7 @@ } //开启或停止巡航 return ihcNetService.cruise(userId.intValue(), command, lineNum, null); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java index 2d7ab31..2ebe13b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.system.dto; import com.casic.missiles.modular.system.task.AutoCruiseResertTask; -//import com.casic.missiles.modular.system.task.AutoCruiseTask; import com.casic.missiles.modular.system.task.AutoCruiseTask; import org.springframework.stereotype.Component; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java new file mode 100644 index 0000000..caadaba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.AlarmAIDTO; + +public interface IReceptionService { + + boolean getAIRecords(AlarmAIDTO alarmAIDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java index 07f00de..6df5d0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java @@ -86,6 +86,11 @@ Date startTaskTime = DateUtil.parseDateTime(busPlan.getBeginDate() + " " + busPlan.getBeginTime()); Date endTaskTime = DateUtil.parseDateTime(busPlan.getEndDate() + " " + busPlan.getEndTime()); if (ObjectUtil.isAllNotEmpty(startTaskTime, endTaskTime)) { + //若起、止时间都小于当前时间,无法启动 + if (DateUtil.compare(startTaskTime, new Date()) < 0 && + DateUtil.compare(endTaskTime, new Date()) < 0) { + throw new BusinessException(BusinessExceptionEnum.RUN_TIME_FAILED); + } //在此期间若没有任务执行 if (!TaskCommom.isOnTaskInfo(busPlan.getMonitorId(), startTaskTime, endTaskTime)) { if (DateUtil.compare(startTaskTime, new Date()) <= 0 && @@ -125,24 +130,25 @@ if (null != baseInfo) { if (StatusEnum.TASK_RUNNING.equals(status)) { //若开始任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())){ + if (!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())) { TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); - }else { + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); + } else { //执行成功,设置任务执行状态开始 busPlan.setTaskStatus(status); this.updateById(busPlan); } } else if (StatusEnum.TASK_COMPLETE.equals(status)) { - //若停止任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())){ - TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); - }else { - //执行成功,设置任务执行状态完成 - busPlan.setTaskStatus(status); - //执行成功,设置任务状态完成 - busPlan.setStatus(StatusEnum.STATUS_CLOSE); - this.updateById(busPlan); - } + + if (cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())) { + //执行成功,设置任务执行状态完成 + busPlan.setTaskStatus(status); + //执行成功,设置任务状态完成 + busPlan.setStatus(StatusEnum.STATUS_CLOSE); + this.updateById(busPlan); + } + TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); } } return true; @@ -168,17 +174,22 @@ map.put("jobId", jobId); quartzManager.addJob(jobName, cls, taskTime, map); TaskCommom.addOrUpdateTaskInfo(jobName, Long.valueOf(jobId), monitorId, StatusEnum.STATUS_OPEN, taskTime); + //更新开启状态 + BusPlan busPlan = this.getById(Long.valueOf(jobId)); + busPlan.setStatus(StatusEnum.STATUS_OPEN); + this.updateById(busPlan); } //删除job public void deleteTask(String jobName, BusPlan busPlan) { + String taskStatus = busPlan.getTaskStatus(); quartzManager.removeJob(jobName); TaskCommom.deleteTaskInfos(jobName); busPlan.setStatus(StatusEnum.STATUS_CLOSE); busPlan.setTaskStatus(StatusEnum.TASK_COMPLETE); this.updateById(busPlan); //若有任务正在执行,则取消 - if (StatusEnum.STATUS_OPEN.equals(busPlan.getTaskStatus())) { + if (StatusEnum.STATUS_OPEN.equals(taskStatus)) { BusMonipoiInfo baseInfo = monipoiInfoService.getById(busPlan.getMonitorId()); if (null != baseInfo) { cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum()); @@ -195,7 +206,7 @@ } //开启或停止巡航 return ihcNetService.cruise(userId.intValue(), command, lineNum, null); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java new file mode 100644 index 0000000..1f6dc83 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.model.AlarmRecord; +import com.casic.missiles.modular.system.model.BusMonipoiInfo; +import com.casic.missiles.modular.system.service.IAlarmRecordService; +import com.casic.missiles.modular.system.service.IBusMonipoiInfoService; +import com.casic.missiles.modular.system.service.IReceptionService; +import com.casic.missiles.modular.system.util.WebSocket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; + +@Service +public class ReceptionServiceImpl implements IReceptionService { + + @Resource + private ICommonFileService commonFileService; + + @Autowired + private IAlarmRecordService alarmRecordService; + + @Autowired + private IBusMonipoiInfoService iBusMonipoiInfoService; + + @Autowired + private WebSocket webSocket; + private static final Logger logger = LoggerFactory.getLogger(ReceptionServiceImpl.class); + + @Override + public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { + + try { + AlarmRecord alarmRecord = new AlarmRecord(); + //通过设备ip 或 nvr 获取设备id + if (ObjectUtil.isNotEmpty(alarmAIDTO.getDeviceIp())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByDeviceIp(alarmAIDTO.getDeviceIp()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } else if (ObjectUtil.isAllNotEmpty(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByNvr(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } + alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); + alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); + alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if (ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")) { + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + } else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } + alarmRecordService.save(alarmRecord); + //推送前端 ,若找不到对应的设备 不推送 + if (null == alarmRecord.getMonitorId()) return true; + JSONObject msg = new JSONObject(); + msg.put("type", "AIAlarm"); + msg.put("monitorId", alarmRecord.getMonitorId()); + msg.put("alarmId", alarmRecord.getId()); + msg.put("alarmTime", alarmRecord.getAlarmTime()); + msg.put("alarmPhoto", alarmRecord.getPhoto()); + webSocket.sendAllMessage(msg.toJSONString()); + logger.info("*******sendWebSocketAiRecord,monitorid=" + alarmRecord.getId() + ",time:" + new Date()); + return true; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java index 2d7ab31..2ebe13b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.system.dto; import com.casic.missiles.modular.system.task.AutoCruiseResertTask; -//import com.casic.missiles.modular.system.task.AutoCruiseTask; import com.casic.missiles.modular.system.task.AutoCruiseTask; import org.springframework.stereotype.Component; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java new file mode 100644 index 0000000..caadaba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.AlarmAIDTO; + +public interface IReceptionService { + + boolean getAIRecords(AlarmAIDTO alarmAIDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java index 07f00de..6df5d0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java @@ -86,6 +86,11 @@ Date startTaskTime = DateUtil.parseDateTime(busPlan.getBeginDate() + " " + busPlan.getBeginTime()); Date endTaskTime = DateUtil.parseDateTime(busPlan.getEndDate() + " " + busPlan.getEndTime()); if (ObjectUtil.isAllNotEmpty(startTaskTime, endTaskTime)) { + //若起、止时间都小于当前时间,无法启动 + if (DateUtil.compare(startTaskTime, new Date()) < 0 && + DateUtil.compare(endTaskTime, new Date()) < 0) { + throw new BusinessException(BusinessExceptionEnum.RUN_TIME_FAILED); + } //在此期间若没有任务执行 if (!TaskCommom.isOnTaskInfo(busPlan.getMonitorId(), startTaskTime, endTaskTime)) { if (DateUtil.compare(startTaskTime, new Date()) <= 0 && @@ -125,24 +130,25 @@ if (null != baseInfo) { if (StatusEnum.TASK_RUNNING.equals(status)) { //若开始任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())){ + if (!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())) { TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); - }else { + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); + } else { //执行成功,设置任务执行状态开始 busPlan.setTaskStatus(status); this.updateById(busPlan); } } else if (StatusEnum.TASK_COMPLETE.equals(status)) { - //若停止任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())){ - TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); - }else { - //执行成功,设置任务执行状态完成 - busPlan.setTaskStatus(status); - //执行成功,设置任务状态完成 - busPlan.setStatus(StatusEnum.STATUS_CLOSE); - this.updateById(busPlan); - } + + if (cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())) { + //执行成功,设置任务执行状态完成 + busPlan.setTaskStatus(status); + //执行成功,设置任务状态完成 + busPlan.setStatus(StatusEnum.STATUS_CLOSE); + this.updateById(busPlan); + } + TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); } } return true; @@ -168,17 +174,22 @@ map.put("jobId", jobId); quartzManager.addJob(jobName, cls, taskTime, map); TaskCommom.addOrUpdateTaskInfo(jobName, Long.valueOf(jobId), monitorId, StatusEnum.STATUS_OPEN, taskTime); + //更新开启状态 + BusPlan busPlan = this.getById(Long.valueOf(jobId)); + busPlan.setStatus(StatusEnum.STATUS_OPEN); + this.updateById(busPlan); } //删除job public void deleteTask(String jobName, BusPlan busPlan) { + String taskStatus = busPlan.getTaskStatus(); quartzManager.removeJob(jobName); TaskCommom.deleteTaskInfos(jobName); busPlan.setStatus(StatusEnum.STATUS_CLOSE); busPlan.setTaskStatus(StatusEnum.TASK_COMPLETE); this.updateById(busPlan); //若有任务正在执行,则取消 - if (StatusEnum.STATUS_OPEN.equals(busPlan.getTaskStatus())) { + if (StatusEnum.STATUS_OPEN.equals(taskStatus)) { BusMonipoiInfo baseInfo = monipoiInfoService.getById(busPlan.getMonitorId()); if (null != baseInfo) { cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum()); @@ -195,7 +206,7 @@ } //开启或停止巡航 return ihcNetService.cruise(userId.intValue(), command, lineNum, null); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java new file mode 100644 index 0000000..1f6dc83 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.model.AlarmRecord; +import com.casic.missiles.modular.system.model.BusMonipoiInfo; +import com.casic.missiles.modular.system.service.IAlarmRecordService; +import com.casic.missiles.modular.system.service.IBusMonipoiInfoService; +import com.casic.missiles.modular.system.service.IReceptionService; +import com.casic.missiles.modular.system.util.WebSocket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; + +@Service +public class ReceptionServiceImpl implements IReceptionService { + + @Resource + private ICommonFileService commonFileService; + + @Autowired + private IAlarmRecordService alarmRecordService; + + @Autowired + private IBusMonipoiInfoService iBusMonipoiInfoService; + + @Autowired + private WebSocket webSocket; + private static final Logger logger = LoggerFactory.getLogger(ReceptionServiceImpl.class); + + @Override + public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { + + try { + AlarmRecord alarmRecord = new AlarmRecord(); + //通过设备ip 或 nvr 获取设备id + if (ObjectUtil.isNotEmpty(alarmAIDTO.getDeviceIp())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByDeviceIp(alarmAIDTO.getDeviceIp()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } else if (ObjectUtil.isAllNotEmpty(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByNvr(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } + alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); + alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); + alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if (ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")) { + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + } else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } + alarmRecordService.save(alarmRecord); + //推送前端 ,若找不到对应的设备 不推送 + if (null == alarmRecord.getMonitorId()) return true; + JSONObject msg = new JSONObject(); + msg.put("type", "AIAlarm"); + msg.put("monitorId", alarmRecord.getMonitorId()); + msg.put("alarmId", alarmRecord.getId()); + msg.put("alarmTime", alarmRecord.getAlarmTime()); + msg.put("alarmPhoto", alarmRecord.getPhoto()); + webSocket.sendAllMessage(msg.toJSONString()); + logger.info("*******sendWebSocketAiRecord,monitorid=" + alarmRecord.getId() + ",time:" + new Date()); + return true; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java index f48bc3c..3082500 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java @@ -157,21 +157,21 @@ public void run() { System.out.println("Thread-" + deviceIp + " -> start... " + new Date()); // 登录,登录失败就一直尝试登录 -// while (true) { -// boolean register = registerAndStartSerial(); -// if (register) { -// break; -// } -// } -// // 登录成功后,按每秒一次查询甲烷数据 -// while (true) { -// try { -// sendGasCommand(); -// Thread.sleep(collectInterval); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// } + while (true) { + boolean register = registerAndStartSerial(); + if (register) { + break; + } + } + // 登录成功后,按每秒一次查询甲烷数据 + while (true) { + try { + sendGasCommand(); + Thread.sleep(collectInterval); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } } diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java index 2d7ab31..2ebe13b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.system.dto; import com.casic.missiles.modular.system.task.AutoCruiseResertTask; -//import com.casic.missiles.modular.system.task.AutoCruiseTask; import com.casic.missiles.modular.system.task.AutoCruiseTask; import org.springframework.stereotype.Component; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java new file mode 100644 index 0000000..caadaba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.AlarmAIDTO; + +public interface IReceptionService { + + boolean getAIRecords(AlarmAIDTO alarmAIDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java index 07f00de..6df5d0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java @@ -86,6 +86,11 @@ Date startTaskTime = DateUtil.parseDateTime(busPlan.getBeginDate() + " " + busPlan.getBeginTime()); Date endTaskTime = DateUtil.parseDateTime(busPlan.getEndDate() + " " + busPlan.getEndTime()); if (ObjectUtil.isAllNotEmpty(startTaskTime, endTaskTime)) { + //若起、止时间都小于当前时间,无法启动 + if (DateUtil.compare(startTaskTime, new Date()) < 0 && + DateUtil.compare(endTaskTime, new Date()) < 0) { + throw new BusinessException(BusinessExceptionEnum.RUN_TIME_FAILED); + } //在此期间若没有任务执行 if (!TaskCommom.isOnTaskInfo(busPlan.getMonitorId(), startTaskTime, endTaskTime)) { if (DateUtil.compare(startTaskTime, new Date()) <= 0 && @@ -125,24 +130,25 @@ if (null != baseInfo) { if (StatusEnum.TASK_RUNNING.equals(status)) { //若开始任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())){ + if (!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())) { TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); - }else { + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); + } else { //执行成功,设置任务执行状态开始 busPlan.setTaskStatus(status); this.updateById(busPlan); } } else if (StatusEnum.TASK_COMPLETE.equals(status)) { - //若停止任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())){ - TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); - }else { - //执行成功,设置任务执行状态完成 - busPlan.setTaskStatus(status); - //执行成功,设置任务状态完成 - busPlan.setStatus(StatusEnum.STATUS_CLOSE); - this.updateById(busPlan); - } + + if (cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())) { + //执行成功,设置任务执行状态完成 + busPlan.setTaskStatus(status); + //执行成功,设置任务状态完成 + busPlan.setStatus(StatusEnum.STATUS_CLOSE); + this.updateById(busPlan); + } + TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); } } return true; @@ -168,17 +174,22 @@ map.put("jobId", jobId); quartzManager.addJob(jobName, cls, taskTime, map); TaskCommom.addOrUpdateTaskInfo(jobName, Long.valueOf(jobId), monitorId, StatusEnum.STATUS_OPEN, taskTime); + //更新开启状态 + BusPlan busPlan = this.getById(Long.valueOf(jobId)); + busPlan.setStatus(StatusEnum.STATUS_OPEN); + this.updateById(busPlan); } //删除job public void deleteTask(String jobName, BusPlan busPlan) { + String taskStatus = busPlan.getTaskStatus(); quartzManager.removeJob(jobName); TaskCommom.deleteTaskInfos(jobName); busPlan.setStatus(StatusEnum.STATUS_CLOSE); busPlan.setTaskStatus(StatusEnum.TASK_COMPLETE); this.updateById(busPlan); //若有任务正在执行,则取消 - if (StatusEnum.STATUS_OPEN.equals(busPlan.getTaskStatus())) { + if (StatusEnum.STATUS_OPEN.equals(taskStatus)) { BusMonipoiInfo baseInfo = monipoiInfoService.getById(busPlan.getMonitorId()); if (null != baseInfo) { cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum()); @@ -195,7 +206,7 @@ } //开启或停止巡航 return ihcNetService.cruise(userId.intValue(), command, lineNum, null); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java new file mode 100644 index 0000000..1f6dc83 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.model.AlarmRecord; +import com.casic.missiles.modular.system.model.BusMonipoiInfo; +import com.casic.missiles.modular.system.service.IAlarmRecordService; +import com.casic.missiles.modular.system.service.IBusMonipoiInfoService; +import com.casic.missiles.modular.system.service.IReceptionService; +import com.casic.missiles.modular.system.util.WebSocket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; + +@Service +public class ReceptionServiceImpl implements IReceptionService { + + @Resource + private ICommonFileService commonFileService; + + @Autowired + private IAlarmRecordService alarmRecordService; + + @Autowired + private IBusMonipoiInfoService iBusMonipoiInfoService; + + @Autowired + private WebSocket webSocket; + private static final Logger logger = LoggerFactory.getLogger(ReceptionServiceImpl.class); + + @Override + public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { + + try { + AlarmRecord alarmRecord = new AlarmRecord(); + //通过设备ip 或 nvr 获取设备id + if (ObjectUtil.isNotEmpty(alarmAIDTO.getDeviceIp())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByDeviceIp(alarmAIDTO.getDeviceIp()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } else if (ObjectUtil.isAllNotEmpty(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByNvr(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } + alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); + alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); + alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if (ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")) { + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + } else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } + alarmRecordService.save(alarmRecord); + //推送前端 ,若找不到对应的设备 不推送 + if (null == alarmRecord.getMonitorId()) return true; + JSONObject msg = new JSONObject(); + msg.put("type", "AIAlarm"); + msg.put("monitorId", alarmRecord.getMonitorId()); + msg.put("alarmId", alarmRecord.getId()); + msg.put("alarmTime", alarmRecord.getAlarmTime()); + msg.put("alarmPhoto", alarmRecord.getPhoto()); + webSocket.sendAllMessage(msg.toJSONString()); + logger.info("*******sendWebSocketAiRecord,monitorid=" + alarmRecord.getId() + ",time:" + new Date()); + return true; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java index f48bc3c..3082500 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java @@ -157,21 +157,21 @@ public void run() { System.out.println("Thread-" + deviceIp + " -> start... " + new Date()); // 登录,登录失败就一直尝试登录 -// while (true) { -// boolean register = registerAndStartSerial(); -// if (register) { -// break; -// } -// } -// // 登录成功后,按每秒一次查询甲烷数据 -// while (true) { -// try { -// sendGasCommand(); -// Thread.sleep(collectInterval); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// } + while (true) { + boolean register = registerAndStartSerial(); + if (register) { + break; + } + } + // 登录成功后,按每秒一次查询甲烷数据 + while (true) { + try { + sendGasCommand(); + Thread.sleep(collectInterval); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } } diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml index f0a2054..f8f320e 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml @@ -94,19 +94,18 @@ device_status AS deviceStatus FROM ( - SELECT * FROM bus_monipoi_info - WHERE valid = 0 - - and monitor_name like concat('%',#{keyword},'%') - + SELECT * FROM bus_monipoi_info + WHERE valid = 0 ) bmi JOIN ( SELECT id AS idd, DEPT_ID, station_name FROM bus_station_info WHERE valid = 0 + ) bsi ON bsi.idd = bmi.station_id WHERE 1=1 - and STATION_NAME like concat('%',#{keyword},'%') + AND (STATION_NAME like concat('%',#{keyword},'%') + OR monitor_name like concat('%',#{keyword},'%') + ) - ) bsi ON bsi.idd = bmi.station_id diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java index 2d7ab31..2ebe13b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.system.dto; import com.casic.missiles.modular.system.task.AutoCruiseResertTask; -//import com.casic.missiles.modular.system.task.AutoCruiseTask; import com.casic.missiles.modular.system.task.AutoCruiseTask; import org.springframework.stereotype.Component; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java new file mode 100644 index 0000000..caadaba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.AlarmAIDTO; + +public interface IReceptionService { + + boolean getAIRecords(AlarmAIDTO alarmAIDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java index 07f00de..6df5d0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java @@ -86,6 +86,11 @@ Date startTaskTime = DateUtil.parseDateTime(busPlan.getBeginDate() + " " + busPlan.getBeginTime()); Date endTaskTime = DateUtil.parseDateTime(busPlan.getEndDate() + " " + busPlan.getEndTime()); if (ObjectUtil.isAllNotEmpty(startTaskTime, endTaskTime)) { + //若起、止时间都小于当前时间,无法启动 + if (DateUtil.compare(startTaskTime, new Date()) < 0 && + DateUtil.compare(endTaskTime, new Date()) < 0) { + throw new BusinessException(BusinessExceptionEnum.RUN_TIME_FAILED); + } //在此期间若没有任务执行 if (!TaskCommom.isOnTaskInfo(busPlan.getMonitorId(), startTaskTime, endTaskTime)) { if (DateUtil.compare(startTaskTime, new Date()) <= 0 && @@ -125,24 +130,25 @@ if (null != baseInfo) { if (StatusEnum.TASK_RUNNING.equals(status)) { //若开始任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())){ + if (!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())) { TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); - }else { + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); + } else { //执行成功,设置任务执行状态开始 busPlan.setTaskStatus(status); this.updateById(busPlan); } } else if (StatusEnum.TASK_COMPLETE.equals(status)) { - //若停止任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())){ - TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); - }else { - //执行成功,设置任务执行状态完成 - busPlan.setTaskStatus(status); - //执行成功,设置任务状态完成 - busPlan.setStatus(StatusEnum.STATUS_CLOSE); - this.updateById(busPlan); - } + + if (cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())) { + //执行成功,设置任务执行状态完成 + busPlan.setTaskStatus(status); + //执行成功,设置任务状态完成 + busPlan.setStatus(StatusEnum.STATUS_CLOSE); + this.updateById(busPlan); + } + TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); } } return true; @@ -168,17 +174,22 @@ map.put("jobId", jobId); quartzManager.addJob(jobName, cls, taskTime, map); TaskCommom.addOrUpdateTaskInfo(jobName, Long.valueOf(jobId), monitorId, StatusEnum.STATUS_OPEN, taskTime); + //更新开启状态 + BusPlan busPlan = this.getById(Long.valueOf(jobId)); + busPlan.setStatus(StatusEnum.STATUS_OPEN); + this.updateById(busPlan); } //删除job public void deleteTask(String jobName, BusPlan busPlan) { + String taskStatus = busPlan.getTaskStatus(); quartzManager.removeJob(jobName); TaskCommom.deleteTaskInfos(jobName); busPlan.setStatus(StatusEnum.STATUS_CLOSE); busPlan.setTaskStatus(StatusEnum.TASK_COMPLETE); this.updateById(busPlan); //若有任务正在执行,则取消 - if (StatusEnum.STATUS_OPEN.equals(busPlan.getTaskStatus())) { + if (StatusEnum.STATUS_OPEN.equals(taskStatus)) { BusMonipoiInfo baseInfo = monipoiInfoService.getById(busPlan.getMonitorId()); if (null != baseInfo) { cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum()); @@ -195,7 +206,7 @@ } //开启或停止巡航 return ihcNetService.cruise(userId.intValue(), command, lineNum, null); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java new file mode 100644 index 0000000..1f6dc83 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.model.AlarmRecord; +import com.casic.missiles.modular.system.model.BusMonipoiInfo; +import com.casic.missiles.modular.system.service.IAlarmRecordService; +import com.casic.missiles.modular.system.service.IBusMonipoiInfoService; +import com.casic.missiles.modular.system.service.IReceptionService; +import com.casic.missiles.modular.system.util.WebSocket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; + +@Service +public class ReceptionServiceImpl implements IReceptionService { + + @Resource + private ICommonFileService commonFileService; + + @Autowired + private IAlarmRecordService alarmRecordService; + + @Autowired + private IBusMonipoiInfoService iBusMonipoiInfoService; + + @Autowired + private WebSocket webSocket; + private static final Logger logger = LoggerFactory.getLogger(ReceptionServiceImpl.class); + + @Override + public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { + + try { + AlarmRecord alarmRecord = new AlarmRecord(); + //通过设备ip 或 nvr 获取设备id + if (ObjectUtil.isNotEmpty(alarmAIDTO.getDeviceIp())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByDeviceIp(alarmAIDTO.getDeviceIp()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } else if (ObjectUtil.isAllNotEmpty(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByNvr(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } + alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); + alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); + alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if (ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")) { + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + } else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } + alarmRecordService.save(alarmRecord); + //推送前端 ,若找不到对应的设备 不推送 + if (null == alarmRecord.getMonitorId()) return true; + JSONObject msg = new JSONObject(); + msg.put("type", "AIAlarm"); + msg.put("monitorId", alarmRecord.getMonitorId()); + msg.put("alarmId", alarmRecord.getId()); + msg.put("alarmTime", alarmRecord.getAlarmTime()); + msg.put("alarmPhoto", alarmRecord.getPhoto()); + webSocket.sendAllMessage(msg.toJSONString()); + logger.info("*******sendWebSocketAiRecord,monitorid=" + alarmRecord.getId() + ",time:" + new Date()); + return true; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java index f48bc3c..3082500 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java @@ -157,21 +157,21 @@ public void run() { System.out.println("Thread-" + deviceIp + " -> start... " + new Date()); // 登录,登录失败就一直尝试登录 -// while (true) { -// boolean register = registerAndStartSerial(); -// if (register) { -// break; -// } -// } -// // 登录成功后,按每秒一次查询甲烷数据 -// while (true) { -// try { -// sendGasCommand(); -// Thread.sleep(collectInterval); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// } + while (true) { + boolean register = registerAndStartSerial(); + if (register) { + break; + } + } + // 登录成功后,按每秒一次查询甲烷数据 + while (true) { + try { + sendGasCommand(); + Thread.sleep(collectInterval); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } } diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml index f0a2054..f8f320e 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml @@ -94,19 +94,18 @@ device_status AS deviceStatus FROM ( - SELECT * FROM bus_monipoi_info - WHERE valid = 0 - - and monitor_name like concat('%',#{keyword},'%') - + SELECT * FROM bus_monipoi_info + WHERE valid = 0 ) bmi JOIN ( SELECT id AS idd, DEPT_ID, station_name FROM bus_station_info WHERE valid = 0 + ) bsi ON bsi.idd = bmi.station_id WHERE 1=1 - and STATION_NAME like concat('%',#{keyword},'%') + AND (STATION_NAME like concat('%',#{keyword},'%') + OR monitor_name like concat('%',#{keyword},'%') + ) - ) bsi ON bsi.idd = bmi.station_id diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml index fbd7cb0..592ebfd 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml @@ -74,9 +74,9 @@ LEFT JOIN bus_station_info bs ON bm.STATION_ID = bs.id WHERE bm.VALID = 0 - AND bs.VALID =0 + AND bs.VALID =0 and bo.SERIAL_NUM is not null - and bm.LINE_NUM = #{obserpoiRequest.lineNum} + and bo.LINE_NUM = #{obserpoiRequest.lineNum} and bm.ID = #{obserpoiRequest.monitorId} diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java index 2d7ab31..2ebe13b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.system.dto; import com.casic.missiles.modular.system.task.AutoCruiseResertTask; -//import com.casic.missiles.modular.system.task.AutoCruiseTask; import com.casic.missiles.modular.system.task.AutoCruiseTask; import org.springframework.stereotype.Component; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java new file mode 100644 index 0000000..caadaba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.AlarmAIDTO; + +public interface IReceptionService { + + boolean getAIRecords(AlarmAIDTO alarmAIDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java index 07f00de..6df5d0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java @@ -86,6 +86,11 @@ Date startTaskTime = DateUtil.parseDateTime(busPlan.getBeginDate() + " " + busPlan.getBeginTime()); Date endTaskTime = DateUtil.parseDateTime(busPlan.getEndDate() + " " + busPlan.getEndTime()); if (ObjectUtil.isAllNotEmpty(startTaskTime, endTaskTime)) { + //若起、止时间都小于当前时间,无法启动 + if (DateUtil.compare(startTaskTime, new Date()) < 0 && + DateUtil.compare(endTaskTime, new Date()) < 0) { + throw new BusinessException(BusinessExceptionEnum.RUN_TIME_FAILED); + } //在此期间若没有任务执行 if (!TaskCommom.isOnTaskInfo(busPlan.getMonitorId(), startTaskTime, endTaskTime)) { if (DateUtil.compare(startTaskTime, new Date()) <= 0 && @@ -125,24 +130,25 @@ if (null != baseInfo) { if (StatusEnum.TASK_RUNNING.equals(status)) { //若开始任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())){ + if (!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())) { TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); - }else { + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); + } else { //执行成功,设置任务执行状态开始 busPlan.setTaskStatus(status); this.updateById(busPlan); } } else if (StatusEnum.TASK_COMPLETE.equals(status)) { - //若停止任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())){ - TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); - }else { - //执行成功,设置任务执行状态完成 - busPlan.setTaskStatus(status); - //执行成功,设置任务状态完成 - busPlan.setStatus(StatusEnum.STATUS_CLOSE); - this.updateById(busPlan); - } + + if (cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())) { + //执行成功,设置任务执行状态完成 + busPlan.setTaskStatus(status); + //执行成功,设置任务状态完成 + busPlan.setStatus(StatusEnum.STATUS_CLOSE); + this.updateById(busPlan); + } + TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); } } return true; @@ -168,17 +174,22 @@ map.put("jobId", jobId); quartzManager.addJob(jobName, cls, taskTime, map); TaskCommom.addOrUpdateTaskInfo(jobName, Long.valueOf(jobId), monitorId, StatusEnum.STATUS_OPEN, taskTime); + //更新开启状态 + BusPlan busPlan = this.getById(Long.valueOf(jobId)); + busPlan.setStatus(StatusEnum.STATUS_OPEN); + this.updateById(busPlan); } //删除job public void deleteTask(String jobName, BusPlan busPlan) { + String taskStatus = busPlan.getTaskStatus(); quartzManager.removeJob(jobName); TaskCommom.deleteTaskInfos(jobName); busPlan.setStatus(StatusEnum.STATUS_CLOSE); busPlan.setTaskStatus(StatusEnum.TASK_COMPLETE); this.updateById(busPlan); //若有任务正在执行,则取消 - if (StatusEnum.STATUS_OPEN.equals(busPlan.getTaskStatus())) { + if (StatusEnum.STATUS_OPEN.equals(taskStatus)) { BusMonipoiInfo baseInfo = monipoiInfoService.getById(busPlan.getMonitorId()); if (null != baseInfo) { cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum()); @@ -195,7 +206,7 @@ } //开启或停止巡航 return ihcNetService.cruise(userId.intValue(), command, lineNum, null); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java new file mode 100644 index 0000000..1f6dc83 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.model.AlarmRecord; +import com.casic.missiles.modular.system.model.BusMonipoiInfo; +import com.casic.missiles.modular.system.service.IAlarmRecordService; +import com.casic.missiles.modular.system.service.IBusMonipoiInfoService; +import com.casic.missiles.modular.system.service.IReceptionService; +import com.casic.missiles.modular.system.util.WebSocket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; + +@Service +public class ReceptionServiceImpl implements IReceptionService { + + @Resource + private ICommonFileService commonFileService; + + @Autowired + private IAlarmRecordService alarmRecordService; + + @Autowired + private IBusMonipoiInfoService iBusMonipoiInfoService; + + @Autowired + private WebSocket webSocket; + private static final Logger logger = LoggerFactory.getLogger(ReceptionServiceImpl.class); + + @Override + public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { + + try { + AlarmRecord alarmRecord = new AlarmRecord(); + //通过设备ip 或 nvr 获取设备id + if (ObjectUtil.isNotEmpty(alarmAIDTO.getDeviceIp())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByDeviceIp(alarmAIDTO.getDeviceIp()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } else if (ObjectUtil.isAllNotEmpty(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByNvr(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } + alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); + alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); + alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if (ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")) { + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + } else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } + alarmRecordService.save(alarmRecord); + //推送前端 ,若找不到对应的设备 不推送 + if (null == alarmRecord.getMonitorId()) return true; + JSONObject msg = new JSONObject(); + msg.put("type", "AIAlarm"); + msg.put("monitorId", alarmRecord.getMonitorId()); + msg.put("alarmId", alarmRecord.getId()); + msg.put("alarmTime", alarmRecord.getAlarmTime()); + msg.put("alarmPhoto", alarmRecord.getPhoto()); + webSocket.sendAllMessage(msg.toJSONString()); + logger.info("*******sendWebSocketAiRecord,monitorid=" + alarmRecord.getId() + ",time:" + new Date()); + return true; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java index f48bc3c..3082500 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java @@ -157,21 +157,21 @@ public void run() { System.out.println("Thread-" + deviceIp + " -> start... " + new Date()); // 登录,登录失败就一直尝试登录 -// while (true) { -// boolean register = registerAndStartSerial(); -// if (register) { -// break; -// } -// } -// // 登录成功后,按每秒一次查询甲烷数据 -// while (true) { -// try { -// sendGasCommand(); -// Thread.sleep(collectInterval); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// } + while (true) { + boolean register = registerAndStartSerial(); + if (register) { + break; + } + } + // 登录成功后,按每秒一次查询甲烷数据 + while (true) { + try { + sendGasCommand(); + Thread.sleep(collectInterval); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } } diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml index f0a2054..f8f320e 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml @@ -94,19 +94,18 @@ device_status AS deviceStatus FROM ( - SELECT * FROM bus_monipoi_info - WHERE valid = 0 - - and monitor_name like concat('%',#{keyword},'%') - + SELECT * FROM bus_monipoi_info + WHERE valid = 0 ) bmi JOIN ( SELECT id AS idd, DEPT_ID, station_name FROM bus_station_info WHERE valid = 0 + ) bsi ON bsi.idd = bmi.station_id WHERE 1=1 - and STATION_NAME like concat('%',#{keyword},'%') + AND (STATION_NAME like concat('%',#{keyword},'%') + OR monitor_name like concat('%',#{keyword},'%') + ) - ) bsi ON bsi.idd = bmi.station_id diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml index fbd7cb0..592ebfd 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml @@ -74,9 +74,9 @@ LEFT JOIN bus_station_info bs ON bm.STATION_ID = bs.id WHERE bm.VALID = 0 - AND bs.VALID =0 + AND bs.VALID =0 and bo.SERIAL_NUM is not null - and bm.LINE_NUM = #{obserpoiRequest.lineNum} + and bo.LINE_NUM = #{obserpoiRequest.lineNum} and bm.ID = #{obserpoiRequest.monitorId} diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java b/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java index 50a83fd..a0ad8e5 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java @@ -38,6 +38,8 @@ BusMonipoiInfo selectByDeviceIp(String deviceIp); + BusMonipoiInfo selectByNvr(String nvrIp,String channel); + void updateBusMonipoiInfo(String deviceIp,int lineNum); boolean updateStatus(String deviceIp,String status); diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java index 2d7ab31..2ebe13b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.system.dto; import com.casic.missiles.modular.system.task.AutoCruiseResertTask; -//import com.casic.missiles.modular.system.task.AutoCruiseTask; import com.casic.missiles.modular.system.task.AutoCruiseTask; import org.springframework.stereotype.Component; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java new file mode 100644 index 0000000..caadaba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.AlarmAIDTO; + +public interface IReceptionService { + + boolean getAIRecords(AlarmAIDTO alarmAIDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java index 07f00de..6df5d0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java @@ -86,6 +86,11 @@ Date startTaskTime = DateUtil.parseDateTime(busPlan.getBeginDate() + " " + busPlan.getBeginTime()); Date endTaskTime = DateUtil.parseDateTime(busPlan.getEndDate() + " " + busPlan.getEndTime()); if (ObjectUtil.isAllNotEmpty(startTaskTime, endTaskTime)) { + //若起、止时间都小于当前时间,无法启动 + if (DateUtil.compare(startTaskTime, new Date()) < 0 && + DateUtil.compare(endTaskTime, new Date()) < 0) { + throw new BusinessException(BusinessExceptionEnum.RUN_TIME_FAILED); + } //在此期间若没有任务执行 if (!TaskCommom.isOnTaskInfo(busPlan.getMonitorId(), startTaskTime, endTaskTime)) { if (DateUtil.compare(startTaskTime, new Date()) <= 0 && @@ -125,24 +130,25 @@ if (null != baseInfo) { if (StatusEnum.TASK_RUNNING.equals(status)) { //若开始任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())){ + if (!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())) { TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); - }else { + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); + } else { //执行成功,设置任务执行状态开始 busPlan.setTaskStatus(status); this.updateById(busPlan); } } else if (StatusEnum.TASK_COMPLETE.equals(status)) { - //若停止任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())){ - TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); - }else { - //执行成功,设置任务执行状态完成 - busPlan.setTaskStatus(status); - //执行成功,设置任务状态完成 - busPlan.setStatus(StatusEnum.STATUS_CLOSE); - this.updateById(busPlan); - } + + if (cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())) { + //执行成功,设置任务执行状态完成 + busPlan.setTaskStatus(status); + //执行成功,设置任务状态完成 + busPlan.setStatus(StatusEnum.STATUS_CLOSE); + this.updateById(busPlan); + } + TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); } } return true; @@ -168,17 +174,22 @@ map.put("jobId", jobId); quartzManager.addJob(jobName, cls, taskTime, map); TaskCommom.addOrUpdateTaskInfo(jobName, Long.valueOf(jobId), monitorId, StatusEnum.STATUS_OPEN, taskTime); + //更新开启状态 + BusPlan busPlan = this.getById(Long.valueOf(jobId)); + busPlan.setStatus(StatusEnum.STATUS_OPEN); + this.updateById(busPlan); } //删除job public void deleteTask(String jobName, BusPlan busPlan) { + String taskStatus = busPlan.getTaskStatus(); quartzManager.removeJob(jobName); TaskCommom.deleteTaskInfos(jobName); busPlan.setStatus(StatusEnum.STATUS_CLOSE); busPlan.setTaskStatus(StatusEnum.TASK_COMPLETE); this.updateById(busPlan); //若有任务正在执行,则取消 - if (StatusEnum.STATUS_OPEN.equals(busPlan.getTaskStatus())) { + if (StatusEnum.STATUS_OPEN.equals(taskStatus)) { BusMonipoiInfo baseInfo = monipoiInfoService.getById(busPlan.getMonitorId()); if (null != baseInfo) { cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum()); @@ -195,7 +206,7 @@ } //开启或停止巡航 return ihcNetService.cruise(userId.intValue(), command, lineNum, null); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java new file mode 100644 index 0000000..1f6dc83 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.model.AlarmRecord; +import com.casic.missiles.modular.system.model.BusMonipoiInfo; +import com.casic.missiles.modular.system.service.IAlarmRecordService; +import com.casic.missiles.modular.system.service.IBusMonipoiInfoService; +import com.casic.missiles.modular.system.service.IReceptionService; +import com.casic.missiles.modular.system.util.WebSocket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; + +@Service +public class ReceptionServiceImpl implements IReceptionService { + + @Resource + private ICommonFileService commonFileService; + + @Autowired + private IAlarmRecordService alarmRecordService; + + @Autowired + private IBusMonipoiInfoService iBusMonipoiInfoService; + + @Autowired + private WebSocket webSocket; + private static final Logger logger = LoggerFactory.getLogger(ReceptionServiceImpl.class); + + @Override + public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { + + try { + AlarmRecord alarmRecord = new AlarmRecord(); + //通过设备ip 或 nvr 获取设备id + if (ObjectUtil.isNotEmpty(alarmAIDTO.getDeviceIp())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByDeviceIp(alarmAIDTO.getDeviceIp()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } else if (ObjectUtil.isAllNotEmpty(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByNvr(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } + alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); + alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); + alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if (ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")) { + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + } else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } + alarmRecordService.save(alarmRecord); + //推送前端 ,若找不到对应的设备 不推送 + if (null == alarmRecord.getMonitorId()) return true; + JSONObject msg = new JSONObject(); + msg.put("type", "AIAlarm"); + msg.put("monitorId", alarmRecord.getMonitorId()); + msg.put("alarmId", alarmRecord.getId()); + msg.put("alarmTime", alarmRecord.getAlarmTime()); + msg.put("alarmPhoto", alarmRecord.getPhoto()); + webSocket.sendAllMessage(msg.toJSONString()); + logger.info("*******sendWebSocketAiRecord,monitorid=" + alarmRecord.getId() + ",time:" + new Date()); + return true; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java index f48bc3c..3082500 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java @@ -157,21 +157,21 @@ public void run() { System.out.println("Thread-" + deviceIp + " -> start... " + new Date()); // 登录,登录失败就一直尝试登录 -// while (true) { -// boolean register = registerAndStartSerial(); -// if (register) { -// break; -// } -// } -// // 登录成功后,按每秒一次查询甲烷数据 -// while (true) { -// try { -// sendGasCommand(); -// Thread.sleep(collectInterval); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// } + while (true) { + boolean register = registerAndStartSerial(); + if (register) { + break; + } + } + // 登录成功后,按每秒一次查询甲烷数据 + while (true) { + try { + sendGasCommand(); + Thread.sleep(collectInterval); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } } diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml index f0a2054..f8f320e 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml @@ -94,19 +94,18 @@ device_status AS deviceStatus FROM ( - SELECT * FROM bus_monipoi_info - WHERE valid = 0 - - and monitor_name like concat('%',#{keyword},'%') - + SELECT * FROM bus_monipoi_info + WHERE valid = 0 ) bmi JOIN ( SELECT id AS idd, DEPT_ID, station_name FROM bus_station_info WHERE valid = 0 + ) bsi ON bsi.idd = bmi.station_id WHERE 1=1 - and STATION_NAME like concat('%',#{keyword},'%') + AND (STATION_NAME like concat('%',#{keyword},'%') + OR monitor_name like concat('%',#{keyword},'%') + ) - ) bsi ON bsi.idd = bmi.station_id diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml index fbd7cb0..592ebfd 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml @@ -74,9 +74,9 @@ LEFT JOIN bus_station_info bs ON bm.STATION_ID = bs.id WHERE bm.VALID = 0 - AND bs.VALID =0 + AND bs.VALID =0 and bo.SERIAL_NUM is not null - and bm.LINE_NUM = #{obserpoiRequest.lineNum} + and bo.LINE_NUM = #{obserpoiRequest.lineNum} and bm.ID = #{obserpoiRequest.monitorId} diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java b/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java index 50a83fd..a0ad8e5 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java @@ -38,6 +38,8 @@ BusMonipoiInfo selectByDeviceIp(String deviceIp); + BusMonipoiInfo selectByNvr(String nvrIp,String channel); + void updateBusMonipoiInfo(String deviceIp,int lineNum); boolean updateStatus(String deviceIp,String status); diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java b/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java index 1666fa5..9c36f65 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java @@ -96,11 +96,11 @@ public ResponseData monitorDetail(Long id) { // BusMonipoiInfo busMonipoiInfo = this.baseMapper.selectById(id); BusMonipoiInfoResponse busMonipoiInfoResponse = this.baseMapper.monitorDetail(id); - if(ObjectUtil.isNotEmpty(busMonipoiInfoResponse)){ - busMonipoiInfoResponse.setDeviceStatusName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceStatus())? - dictService.getDictNameByCode(DictEnum.DEVICE_STATUS,busMonipoiInfoResponse.getDeviceStatus()):""); - busMonipoiInfoResponse.setDeviceTypeName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceType())? - dictService.getDictNameByCode(DictEnum.DEVICE_TYPE,busMonipoiInfoResponse.getDeviceType()):""); + if (ObjectUtil.isNotEmpty(busMonipoiInfoResponse)) { + busMonipoiInfoResponse.setDeviceStatusName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceStatus()) ? + dictService.getDictNameByCode(DictEnum.DEVICE_STATUS, busMonipoiInfoResponse.getDeviceStatus()) : ""); + busMonipoiInfoResponse.setDeviceTypeName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceType()) ? + dictService.getDictNameByCode(DictEnum.DEVICE_TYPE, busMonipoiInfoResponse.getDeviceType()) : ""); } return ResponseData.success(busMonipoiInfoResponse); } @@ -138,7 +138,7 @@ public List overviewMap(String keyword) throws Exception { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); dataScope.setScopeName("DEPT_ID"); - List monitorOverviewMaps = this.baseMapper.overviewMap(dataScope,keyword); + List monitorOverviewMaps = this.baseMapper.overviewMap(dataScope, keyword); for (MonitorOverviewMap monitorOverviewMap : monitorOverviewMaps) { DictCodeUtils.convertDictCodeToName(monitorOverviewMap); } @@ -157,6 +157,15 @@ return false; } + + @Override + public BusMonipoiInfo selectByNvr(String nvrIp, String channel) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("nvrIp", nvrIp); + queryWrapper.eq("nvrChannel", channel); + return this.getOne(queryWrapper); + } + private void checkIsExist(BusMonipoiInfo newBusMonitor) { List busMonipoiInfoList = this.baseMapper.selectList(null); for (BusMonipoiInfo oldBusMonitor : busMonipoiInfoList) { diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java index 2d7ab31..2ebe13b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.system.dto; import com.casic.missiles.modular.system.task.AutoCruiseResertTask; -//import com.casic.missiles.modular.system.task.AutoCruiseTask; import com.casic.missiles.modular.system.task.AutoCruiseTask; import org.springframework.stereotype.Component; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java new file mode 100644 index 0000000..caadaba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.AlarmAIDTO; + +public interface IReceptionService { + + boolean getAIRecords(AlarmAIDTO alarmAIDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java index 07f00de..6df5d0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java @@ -86,6 +86,11 @@ Date startTaskTime = DateUtil.parseDateTime(busPlan.getBeginDate() + " " + busPlan.getBeginTime()); Date endTaskTime = DateUtil.parseDateTime(busPlan.getEndDate() + " " + busPlan.getEndTime()); if (ObjectUtil.isAllNotEmpty(startTaskTime, endTaskTime)) { + //若起、止时间都小于当前时间,无法启动 + if (DateUtil.compare(startTaskTime, new Date()) < 0 && + DateUtil.compare(endTaskTime, new Date()) < 0) { + throw new BusinessException(BusinessExceptionEnum.RUN_TIME_FAILED); + } //在此期间若没有任务执行 if (!TaskCommom.isOnTaskInfo(busPlan.getMonitorId(), startTaskTime, endTaskTime)) { if (DateUtil.compare(startTaskTime, new Date()) <= 0 && @@ -125,24 +130,25 @@ if (null != baseInfo) { if (StatusEnum.TASK_RUNNING.equals(status)) { //若开始任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())){ + if (!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())) { TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); - }else { + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); + } else { //执行成功,设置任务执行状态开始 busPlan.setTaskStatus(status); this.updateById(busPlan); } } else if (StatusEnum.TASK_COMPLETE.equals(status)) { - //若停止任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())){ - TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); - }else { - //执行成功,设置任务执行状态完成 - busPlan.setTaskStatus(status); - //执行成功,设置任务状态完成 - busPlan.setStatus(StatusEnum.STATUS_CLOSE); - this.updateById(busPlan); - } + + if (cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())) { + //执行成功,设置任务执行状态完成 + busPlan.setTaskStatus(status); + //执行成功,设置任务状态完成 + busPlan.setStatus(StatusEnum.STATUS_CLOSE); + this.updateById(busPlan); + } + TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); } } return true; @@ -168,17 +174,22 @@ map.put("jobId", jobId); quartzManager.addJob(jobName, cls, taskTime, map); TaskCommom.addOrUpdateTaskInfo(jobName, Long.valueOf(jobId), monitorId, StatusEnum.STATUS_OPEN, taskTime); + //更新开启状态 + BusPlan busPlan = this.getById(Long.valueOf(jobId)); + busPlan.setStatus(StatusEnum.STATUS_OPEN); + this.updateById(busPlan); } //删除job public void deleteTask(String jobName, BusPlan busPlan) { + String taskStatus = busPlan.getTaskStatus(); quartzManager.removeJob(jobName); TaskCommom.deleteTaskInfos(jobName); busPlan.setStatus(StatusEnum.STATUS_CLOSE); busPlan.setTaskStatus(StatusEnum.TASK_COMPLETE); this.updateById(busPlan); //若有任务正在执行,则取消 - if (StatusEnum.STATUS_OPEN.equals(busPlan.getTaskStatus())) { + if (StatusEnum.STATUS_OPEN.equals(taskStatus)) { BusMonipoiInfo baseInfo = monipoiInfoService.getById(busPlan.getMonitorId()); if (null != baseInfo) { cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum()); @@ -195,7 +206,7 @@ } //开启或停止巡航 return ihcNetService.cruise(userId.intValue(), command, lineNum, null); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java new file mode 100644 index 0000000..1f6dc83 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.model.AlarmRecord; +import com.casic.missiles.modular.system.model.BusMonipoiInfo; +import com.casic.missiles.modular.system.service.IAlarmRecordService; +import com.casic.missiles.modular.system.service.IBusMonipoiInfoService; +import com.casic.missiles.modular.system.service.IReceptionService; +import com.casic.missiles.modular.system.util.WebSocket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; + +@Service +public class ReceptionServiceImpl implements IReceptionService { + + @Resource + private ICommonFileService commonFileService; + + @Autowired + private IAlarmRecordService alarmRecordService; + + @Autowired + private IBusMonipoiInfoService iBusMonipoiInfoService; + + @Autowired + private WebSocket webSocket; + private static final Logger logger = LoggerFactory.getLogger(ReceptionServiceImpl.class); + + @Override + public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { + + try { + AlarmRecord alarmRecord = new AlarmRecord(); + //通过设备ip 或 nvr 获取设备id + if (ObjectUtil.isNotEmpty(alarmAIDTO.getDeviceIp())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByDeviceIp(alarmAIDTO.getDeviceIp()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } else if (ObjectUtil.isAllNotEmpty(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByNvr(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } + alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); + alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); + alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if (ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")) { + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + } else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } + alarmRecordService.save(alarmRecord); + //推送前端 ,若找不到对应的设备 不推送 + if (null == alarmRecord.getMonitorId()) return true; + JSONObject msg = new JSONObject(); + msg.put("type", "AIAlarm"); + msg.put("monitorId", alarmRecord.getMonitorId()); + msg.put("alarmId", alarmRecord.getId()); + msg.put("alarmTime", alarmRecord.getAlarmTime()); + msg.put("alarmPhoto", alarmRecord.getPhoto()); + webSocket.sendAllMessage(msg.toJSONString()); + logger.info("*******sendWebSocketAiRecord,monitorid=" + alarmRecord.getId() + ",time:" + new Date()); + return true; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java index f48bc3c..3082500 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java @@ -157,21 +157,21 @@ public void run() { System.out.println("Thread-" + deviceIp + " -> start... " + new Date()); // 登录,登录失败就一直尝试登录 -// while (true) { -// boolean register = registerAndStartSerial(); -// if (register) { -// break; -// } -// } -// // 登录成功后,按每秒一次查询甲烷数据 -// while (true) { -// try { -// sendGasCommand(); -// Thread.sleep(collectInterval); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// } + while (true) { + boolean register = registerAndStartSerial(); + if (register) { + break; + } + } + // 登录成功后,按每秒一次查询甲烷数据 + while (true) { + try { + sendGasCommand(); + Thread.sleep(collectInterval); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } } diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml index f0a2054..f8f320e 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml @@ -94,19 +94,18 @@ device_status AS deviceStatus FROM ( - SELECT * FROM bus_monipoi_info - WHERE valid = 0 - - and monitor_name like concat('%',#{keyword},'%') - + SELECT * FROM bus_monipoi_info + WHERE valid = 0 ) bmi JOIN ( SELECT id AS idd, DEPT_ID, station_name FROM bus_station_info WHERE valid = 0 + ) bsi ON bsi.idd = bmi.station_id WHERE 1=1 - and STATION_NAME like concat('%',#{keyword},'%') + AND (STATION_NAME like concat('%',#{keyword},'%') + OR monitor_name like concat('%',#{keyword},'%') + ) - ) bsi ON bsi.idd = bmi.station_id diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml index fbd7cb0..592ebfd 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml @@ -74,9 +74,9 @@ LEFT JOIN bus_station_info bs ON bm.STATION_ID = bs.id WHERE bm.VALID = 0 - AND bs.VALID =0 + AND bs.VALID =0 and bo.SERIAL_NUM is not null - and bm.LINE_NUM = #{obserpoiRequest.lineNum} + and bo.LINE_NUM = #{obserpoiRequest.lineNum} and bm.ID = #{obserpoiRequest.monitorId} diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java b/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java index 50a83fd..a0ad8e5 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java @@ -38,6 +38,8 @@ BusMonipoiInfo selectByDeviceIp(String deviceIp); + BusMonipoiInfo selectByNvr(String nvrIp,String channel); + void updateBusMonipoiInfo(String deviceIp,int lineNum); boolean updateStatus(String deviceIp,String status); diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java b/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java index 1666fa5..9c36f65 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java @@ -96,11 +96,11 @@ public ResponseData monitorDetail(Long id) { // BusMonipoiInfo busMonipoiInfo = this.baseMapper.selectById(id); BusMonipoiInfoResponse busMonipoiInfoResponse = this.baseMapper.monitorDetail(id); - if(ObjectUtil.isNotEmpty(busMonipoiInfoResponse)){ - busMonipoiInfoResponse.setDeviceStatusName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceStatus())? - dictService.getDictNameByCode(DictEnum.DEVICE_STATUS,busMonipoiInfoResponse.getDeviceStatus()):""); - busMonipoiInfoResponse.setDeviceTypeName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceType())? - dictService.getDictNameByCode(DictEnum.DEVICE_TYPE,busMonipoiInfoResponse.getDeviceType()):""); + if (ObjectUtil.isNotEmpty(busMonipoiInfoResponse)) { + busMonipoiInfoResponse.setDeviceStatusName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceStatus()) ? + dictService.getDictNameByCode(DictEnum.DEVICE_STATUS, busMonipoiInfoResponse.getDeviceStatus()) : ""); + busMonipoiInfoResponse.setDeviceTypeName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceType()) ? + dictService.getDictNameByCode(DictEnum.DEVICE_TYPE, busMonipoiInfoResponse.getDeviceType()) : ""); } return ResponseData.success(busMonipoiInfoResponse); } @@ -138,7 +138,7 @@ public List overviewMap(String keyword) throws Exception { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); dataScope.setScopeName("DEPT_ID"); - List monitorOverviewMaps = this.baseMapper.overviewMap(dataScope,keyword); + List monitorOverviewMaps = this.baseMapper.overviewMap(dataScope, keyword); for (MonitorOverviewMap monitorOverviewMap : monitorOverviewMaps) { DictCodeUtils.convertDictCodeToName(monitorOverviewMap); } @@ -157,6 +157,15 @@ return false; } + + @Override + public BusMonipoiInfo selectByNvr(String nvrIp, String channel) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("nvrIp", nvrIp); + queryWrapper.eq("nvrChannel", channel); + return this.getOne(queryWrapper); + } + private void checkIsExist(BusMonipoiInfo newBusMonitor) { List busMonipoiInfoList = this.baseMapper.selectList(null); for (BusMonipoiInfo oldBusMonitor : busMonipoiInfoList) { diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusObserpoiInfoServiceImpl.java b/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusObserpoiInfoServiceImpl.java index 325abde..c900f35 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusObserpoiInfoServiceImpl.java +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusObserpoiInfoServiceImpl.java @@ -253,10 +253,10 @@ return false; } - @Override - @Cacheable(value = {observeCfgList}, - key = "'observe_list_'+#obserpoiRequest.getStationId()+'-'+#obserpoiRequest.getMonitorId()+'-'+#obserpoiRequest.getLineNum()" - ) +// @Override +// @Cacheable(value = {observeCfgList}, +// key = "'observe_list_'+#obserpoiRequest.getStationId()+'-'+#obserpoiRequest.getMonitorId()+'-'+#obserpoiRequest.getLineNum()" +// ) public List selectNoPage(BusObserpoiRequest obserpoiRequest) { return this.baseMapper.selectNoPage(obserpoiRequest); } diff --git a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java index c7d58b2..4db8723 100644 --- a/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java +++ b/casic-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java @@ -9,14 +9,15 @@ ID_NULL(2400, "主键不能为空"), HANDLE_FAILED(500, "操作失败"), - DEVICE_BOUND_FAILED(500, "设备绑定,场站删除失败"), - + ADD_FAILED(501, "新增失败!"), MONITOR_VAILD_FAILED(2099, "云台登录地址重复"), DEVICE_REGISTER_FAILED(2500, "设备注册失败"), RUN_TASK_FAILED(2501, "此段时间有任务正在执行"), - CRUISE_NAME_DUPLICATE(2502, "巡航路径名称重复"), - CRUISE_DELETE_ERROR(2503, "巡航路径删除过程中对设备操作异常"); + RUN_TIME_FAILED(2502, "此段时间都小于当前时间无法开启"), + CRUISE_NAME_DUPLICATE(2503, "巡航路径名称重复"), + CRUISE_DELETE_ERROR(2504, "巡航路径删除过程中对设备操作异常"), + ALARM_BASE64_ERROR(2505, "算法报警图片base64无效"); private Integer code; diff --git a/casic-data/pom.xml b/casic-data/pom.xml index ce4e1c3..5ddf8a7 100644 --- a/casic-data/pom.xml +++ b/casic-data/pom.xml @@ -61,6 +61,11 @@ 2.0.0 compile + + com.casic + casic-file + 2.0.0.alpha + diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java index a66a631..9875797 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/AlarmRecordController.java @@ -159,18 +159,18 @@ }); return ResponseData.success(alarmRecordService.dateStatistics(alarmStatisticsDTO)); } - - /** - * 接收Ai算法报警记录 - */ - @RequestMapping(value = "/getAIRecords") - @ResponseBody - public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { - System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getMonitorId()); - Assert.isFalse(bindingResult.hasErrors(), () -> { - throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); - }); - return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); - } +// +// /** +// * 接收Ai算法报警记录 +// */ +// @RequestMapping(value = "/getAIRecords") +// @ResponseBody +// public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { +// System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); +// Assert.isFalse(bindingResult.hasErrors(), () -> { +// throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); +// }); +// return ResponseData.success(alarmRecordService.getAIRecords(alarmAIDTO)); +// } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java index a9d96d0..03ab3ca 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/controller/DataGasController.java @@ -5,6 +5,7 @@ import com.casic.missiles.es.DataGasEs; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.DataGasDTO; import com.casic.missiles.modular.system.service.IDataGasService; import org.apache.poi.ss.formula.functions.T; @@ -43,9 +44,9 @@ if (dataGasList.size() == 0) { List emptyDataList = new ArrayList<>(); emptyDataList.add(new DataGasEs()); - return emptyDataList; + return ResponseData.success(emptyDataList); } else { - return dataGasList; + return ResponseData.success(dataGasList); } } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java index 8de0642..581dc86 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/dto/AlarmAIDTO.java @@ -11,10 +11,14 @@ @Data public class AlarmAIDTO { - @NotNull - private String monitorId; + + private String nvrIp; + private String channelId; + private String deviceIp; @NotNull private String alarmType; @NotNull private String alarmTime; + private String similarity; + private String photo; } diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java index 70472d5..2bf3031 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/model/AlarmRecord.java @@ -75,11 +75,14 @@ /** * 报警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("ALARM_TIME") private Date alarmTime; /** + * 报警图片 + */ + @TableField("PHOTO") + private String photo; + /** * 报警状态(0:正在报警;1:已消警) */ @TableField("ALARM_STATUS") @@ -87,8 +90,6 @@ /** * 消警时间 */ - @JSONField(serializeUsing = DateDeserializer.class) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField("CANCEL_TIME") private Date cancelTime; /** diff --git a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java index a571338..f81e2a3 100644 --- a/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java +++ b/casic-data/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmRecordServiceImpl.java @@ -7,9 +7,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; +import com.casic.missiles.core.common.service.ICommonFileService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.modular.system.dto.*; import com.casic.missiles.modular.system.model.AlarmRecord; import com.casic.missiles.modular.system.dao.AlarmRecordMapper; @@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -47,6 +51,9 @@ @Autowired private AbstractDictService dictService; + @Resource + private ICommonFileService commonFileService; + @Override public List pageList(Page page, AlarmRecordRequest request) { @@ -150,11 +157,17 @@ @Override public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { AlarmRecord alarmRecord = new AlarmRecord(); - //toDo:摄像头与云台绑定关系 - alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getMonitorId())); + //toDo:摄像头与云台绑定关系 暂存ip + alarmRecord.setMonitorId(Long.valueOf(alarmAIDTO.getDeviceIp())); alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if(ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")){ + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + }else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } return this.save(alarmRecord); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java index 7462765..b8c16a3 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/BusPlanController.java @@ -64,7 +64,7 @@ @ResponseBody public Object add(@RequestBody @Valid BusPlan busPlan) { return busPlanService.saveOrUpdateBusPlan(busPlan) ? - ResponseData.success() : ResponseData.error("新增失败"); + ResponseData.success() : ResponseData.error(BusinessExceptionEnum.ADD_FAILED.DEVICE_REGISTER_FAILED.getMessage()); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java index a441dd2..ea42aad 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/HCNetController.java @@ -2,8 +2,6 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.model.response.ResponseData; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java new file mode 100644 index 0000000..ba5bce3 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/ReceptionController.java @@ -0,0 +1,43 @@ +package com.casic.missiles.modular.system.controller; + + +import cn.hutool.core.lang.Assert; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.model.exception.enums.CoreExceptionEnum; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.service.IReceptionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + +@Controller +@RequestMapping("/alarm") +public class ReceptionController { + private static final Logger logger = LoggerFactory.getLogger(ReceptionController.class); + + @Autowired + private IReceptionService iReceptionService; + + /** + * 接收Ai算法报警记录 + */ + @RequestMapping(value = "/getAIRecords") + @ResponseBody + public Object getAIRecords(@RequestBody @Valid AlarmAIDTO alarmAIDTO, BindingResult bindingResult) { + System.out.println(alarmAIDTO.getAlarmTime()+"---->"+alarmAIDTO.getAlarmType()+"---->"+alarmAIDTO.getNvrIp()); + Assert.isFalse(bindingResult.hasErrors(), () -> { + throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage()); + }); + return ResponseData.success(iReceptionService.getAIRecords(alarmAIDTO)); + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java index 2d7ab31..2ebe13b 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TaskCommon.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.system.dto; import com.casic.missiles.modular.system.task.AutoCruiseResertTask; -//import com.casic.missiles.modular.system.task.AutoCruiseTask; import com.casic.missiles.modular.system.task.AutoCruiseTask; import org.springframework.stereotype.Component; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java new file mode 100644 index 0000000..caadaba --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IReceptionService.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.AlarmAIDTO; + +public interface IReceptionService { + + boolean getAIRecords(AlarmAIDTO alarmAIDTO); + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java index 07f00de..6df5d0c 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/BusPlanServiceImpl.java @@ -86,6 +86,11 @@ Date startTaskTime = DateUtil.parseDateTime(busPlan.getBeginDate() + " " + busPlan.getBeginTime()); Date endTaskTime = DateUtil.parseDateTime(busPlan.getEndDate() + " " + busPlan.getEndTime()); if (ObjectUtil.isAllNotEmpty(startTaskTime, endTaskTime)) { + //若起、止时间都小于当前时间,无法启动 + if (DateUtil.compare(startTaskTime, new Date()) < 0 && + DateUtil.compare(endTaskTime, new Date()) < 0) { + throw new BusinessException(BusinessExceptionEnum.RUN_TIME_FAILED); + } //在此期间若没有任务执行 if (!TaskCommom.isOnTaskInfo(busPlan.getMonitorId(), startTaskTime, endTaskTime)) { if (DateUtil.compare(startTaskTime, new Date()) <= 0 && @@ -125,24 +130,25 @@ if (null != baseInfo) { if (StatusEnum.TASK_RUNNING.equals(status)) { //若开始任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())){ + if (!cruise(baseInfo.getDeviceIp(), "start", busPlan.getLineNum())) { TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); - }else { + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); + } else { //执行成功,设置任务执行状态开始 busPlan.setTaskStatus(status); this.updateById(busPlan); } } else if (StatusEnum.TASK_COMPLETE.equals(status)) { - //若停止任务执行不成功,去掉TaskCommom中的任务 - if(!cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())){ - TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); - }else { - //执行成功,设置任务执行状态完成 - busPlan.setTaskStatus(status); - //执行成功,设置任务状态完成 - busPlan.setStatus(StatusEnum.STATUS_CLOSE); - this.updateById(busPlan); - } + + if (cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum())) { + //执行成功,设置任务执行状态完成 + busPlan.setTaskStatus(status); + //执行成功,设置任务状态完成 + busPlan.setStatus(StatusEnum.STATUS_CLOSE); + this.updateById(busPlan); + } + TaskCommom.deleteTaskInfos(DictEnum.START_TASK + busPlan.getId()); + TaskCommom.deleteTaskInfos(DictEnum.STOP_TASK + busPlan.getId()); } } return true; @@ -168,17 +174,22 @@ map.put("jobId", jobId); quartzManager.addJob(jobName, cls, taskTime, map); TaskCommom.addOrUpdateTaskInfo(jobName, Long.valueOf(jobId), monitorId, StatusEnum.STATUS_OPEN, taskTime); + //更新开启状态 + BusPlan busPlan = this.getById(Long.valueOf(jobId)); + busPlan.setStatus(StatusEnum.STATUS_OPEN); + this.updateById(busPlan); } //删除job public void deleteTask(String jobName, BusPlan busPlan) { + String taskStatus = busPlan.getTaskStatus(); quartzManager.removeJob(jobName); TaskCommom.deleteTaskInfos(jobName); busPlan.setStatus(StatusEnum.STATUS_CLOSE); busPlan.setTaskStatus(StatusEnum.TASK_COMPLETE); this.updateById(busPlan); //若有任务正在执行,则取消 - if (StatusEnum.STATUS_OPEN.equals(busPlan.getTaskStatus())) { + if (StatusEnum.STATUS_OPEN.equals(taskStatus)) { BusMonipoiInfo baseInfo = monipoiInfoService.getById(busPlan.getMonitorId()); if (null != baseInfo) { cruise(baseInfo.getDeviceIp(), "stop", busPlan.getLineNum()); @@ -195,7 +206,7 @@ } //开启或停止巡航 return ihcNetService.cruise(userId.intValue(), command, lineNum, null); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java new file mode 100644 index 0000000..1f6dc83 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/ReceptionServiceImpl.java @@ -0,0 +1,84 @@ +package com.casic.missiles.modular.system.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.core.common.service.ICommonFileService; +import com.casic.missiles.enums.BusinessExceptionEnum; +import com.casic.missiles.enums.StatusEnum; +import com.casic.missiles.exception.BusinessException; +import com.casic.missiles.modular.system.dto.AlarmAIDTO; +import com.casic.missiles.modular.system.model.AlarmRecord; +import com.casic.missiles.modular.system.model.BusMonipoiInfo; +import com.casic.missiles.modular.system.service.IAlarmRecordService; +import com.casic.missiles.modular.system.service.IBusMonipoiInfoService; +import com.casic.missiles.modular.system.service.IReceptionService; +import com.casic.missiles.modular.system.util.WebSocket; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; + +@Service +public class ReceptionServiceImpl implements IReceptionService { + + @Resource + private ICommonFileService commonFileService; + + @Autowired + private IAlarmRecordService alarmRecordService; + + @Autowired + private IBusMonipoiInfoService iBusMonipoiInfoService; + + @Autowired + private WebSocket webSocket; + private static final Logger logger = LoggerFactory.getLogger(ReceptionServiceImpl.class); + + @Override + public boolean getAIRecords(AlarmAIDTO alarmAIDTO) { + + try { + AlarmRecord alarmRecord = new AlarmRecord(); + //通过设备ip 或 nvr 获取设备id + if (ObjectUtil.isNotEmpty(alarmAIDTO.getDeviceIp())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByDeviceIp(alarmAIDTO.getDeviceIp()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } else if (ObjectUtil.isAllNotEmpty(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId())) { + BusMonipoiInfo busMonipoiInfo = iBusMonipoiInfoService.selectByNvr(alarmAIDTO.getNvrIp(), alarmAIDTO.getChannelId()); + if (ObjectUtil.isNotEmpty(busMonipoiInfo)) { + alarmRecord.setMonitorId(busMonipoiInfo.getId()); + } + } + alarmRecord.setAlarmStatus(StatusEnum.ALARM_ON); + alarmRecord.setAlarmType(alarmAIDTO.getAlarmType()); + alarmRecord.setAlarmTime(DateUtil.parseDateTime(alarmAIDTO.getAlarmTime())); + //保存照片 + if (ObjectUtil.isNotEmpty(alarmAIDTO.getPhoto()) && alarmAIDTO.getPhoto().startsWith("data:image")) { + alarmRecord.setPhoto(commonFileService.saveFileBase64Image(alarmAIDTO.getPhoto())); + } else { + throw new BusinessException(BusinessExceptionEnum.ALARM_BASE64_ERROR); + } + alarmRecordService.save(alarmRecord); + //推送前端 ,若找不到对应的设备 不推送 + if (null == alarmRecord.getMonitorId()) return true; + JSONObject msg = new JSONObject(); + msg.put("type", "AIAlarm"); + msg.put("monitorId", alarmRecord.getMonitorId()); + msg.put("alarmId", alarmRecord.getId()); + msg.put("alarmTime", alarmRecord.getAlarmTime()); + msg.put("alarmPhoto", alarmRecord.getPhoto()); + webSocket.sendAllMessage(msg.toJSONString()); + logger.info("*******sendWebSocketAiRecord,monitorid=" + alarmRecord.getId() + ",time:" + new Date()); + return true; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java index f48bc3c..3082500 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/task/CollectGasDataTask.java @@ -157,21 +157,21 @@ public void run() { System.out.println("Thread-" + deviceIp + " -> start... " + new Date()); // 登录,登录失败就一直尝试登录 -// while (true) { -// boolean register = registerAndStartSerial(); -// if (register) { -// break; -// } -// } -// // 登录成功后,按每秒一次查询甲烷数据 -// while (true) { -// try { -// sendGasCommand(); -// Thread.sleep(collectInterval); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// } + while (true) { + boolean register = registerAndStartSerial(); + if (register) { + break; + } + } + // 登录成功后,按每秒一次查询甲烷数据 + while (true) { + try { + sendGasCommand(); + Thread.sleep(collectInterval); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } } diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml index f0a2054..f8f320e 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusMonipoiInfoMapper.xml @@ -94,19 +94,18 @@ device_status AS deviceStatus FROM ( - SELECT * FROM bus_monipoi_info - WHERE valid = 0 - - and monitor_name like concat('%',#{keyword},'%') - + SELECT * FROM bus_monipoi_info + WHERE valid = 0 ) bmi JOIN ( SELECT id AS idd, DEPT_ID, station_name FROM bus_station_info WHERE valid = 0 + ) bsi ON bsi.idd = bmi.station_id WHERE 1=1 - and STATION_NAME like concat('%',#{keyword},'%') + AND (STATION_NAME like concat('%',#{keyword},'%') + OR monitor_name like concat('%',#{keyword},'%') + ) - ) bsi ON bsi.idd = bmi.station_id diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml index fbd7cb0..592ebfd 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/dao/mapping/BusObserpoiInfoMapper.xml @@ -74,9 +74,9 @@ LEFT JOIN bus_station_info bs ON bm.STATION_ID = bs.id WHERE bm.VALID = 0 - AND bs.VALID =0 + AND bs.VALID =0 and bo.SERIAL_NUM is not null - and bm.LINE_NUM = #{obserpoiRequest.lineNum} + and bo.LINE_NUM = #{obserpoiRequest.lineNum} and bm.ID = #{obserpoiRequest.monitorId} diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java b/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java index 50a83fd..a0ad8e5 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/service/IBusMonipoiInfoService.java @@ -38,6 +38,8 @@ BusMonipoiInfo selectByDeviceIp(String deviceIp); + BusMonipoiInfo selectByNvr(String nvrIp,String channel); + void updateBusMonipoiInfo(String deviceIp,int lineNum); boolean updateStatus(String deviceIp,String status); diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java b/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java index 1666fa5..9c36f65 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusMonipoiInfoServiceImpl.java @@ -96,11 +96,11 @@ public ResponseData monitorDetail(Long id) { // BusMonipoiInfo busMonipoiInfo = this.baseMapper.selectById(id); BusMonipoiInfoResponse busMonipoiInfoResponse = this.baseMapper.monitorDetail(id); - if(ObjectUtil.isNotEmpty(busMonipoiInfoResponse)){ - busMonipoiInfoResponse.setDeviceStatusName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceStatus())? - dictService.getDictNameByCode(DictEnum.DEVICE_STATUS,busMonipoiInfoResponse.getDeviceStatus()):""); - busMonipoiInfoResponse.setDeviceTypeName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceType())? - dictService.getDictNameByCode(DictEnum.DEVICE_TYPE,busMonipoiInfoResponse.getDeviceType()):""); + if (ObjectUtil.isNotEmpty(busMonipoiInfoResponse)) { + busMonipoiInfoResponse.setDeviceStatusName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceStatus()) ? + dictService.getDictNameByCode(DictEnum.DEVICE_STATUS, busMonipoiInfoResponse.getDeviceStatus()) : ""); + busMonipoiInfoResponse.setDeviceTypeName(ObjectUtil.isNotEmpty(busMonipoiInfoResponse.getDeviceType()) ? + dictService.getDictNameByCode(DictEnum.DEVICE_TYPE, busMonipoiInfoResponse.getDeviceType()) : ""); } return ResponseData.success(busMonipoiInfoResponse); } @@ -138,7 +138,7 @@ public List overviewMap(String keyword) throws Exception { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); dataScope.setScopeName("DEPT_ID"); - List monitorOverviewMaps = this.baseMapper.overviewMap(dataScope,keyword); + List monitorOverviewMaps = this.baseMapper.overviewMap(dataScope, keyword); for (MonitorOverviewMap monitorOverviewMap : monitorOverviewMaps) { DictCodeUtils.convertDictCodeToName(monitorOverviewMap); } @@ -157,6 +157,15 @@ return false; } + + @Override + public BusMonipoiInfo selectByNvr(String nvrIp, String channel) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("nvrIp", nvrIp); + queryWrapper.eq("nvrChannel", channel); + return this.getOne(queryWrapper); + } + private void checkIsExist(BusMonipoiInfo newBusMonitor) { List busMonipoiInfoList = this.baseMapper.selectList(null); for (BusMonipoiInfo oldBusMonitor : busMonipoiInfoList) { diff --git a/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusObserpoiInfoServiceImpl.java b/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusObserpoiInfoServiceImpl.java index 325abde..c900f35 100644 --- a/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusObserpoiInfoServiceImpl.java +++ b/casic-station/src/main/java/com/casic/missiles/modular/system/service/impl/BusObserpoiInfoServiceImpl.java @@ -253,10 +253,10 @@ return false; } - @Override - @Cacheable(value = {observeCfgList}, - key = "'observe_list_'+#obserpoiRequest.getStationId()+'-'+#obserpoiRequest.getMonitorId()+'-'+#obserpoiRequest.getLineNum()" - ) +// @Override +// @Cacheable(value = {observeCfgList}, +// key = "'observe_list_'+#obserpoiRequest.getStationId()+'-'+#obserpoiRequest.getMonitorId()+'-'+#obserpoiRequest.getLineNum()" +// ) public List selectNoPage(BusObserpoiRequest obserpoiRequest) { return this.baseMapper.selectNoPage(obserpoiRequest); } diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index e88d854..fedbd25 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -22,6 +22,9 @@ casic: #kaptcha-open: false #是否开启登录时验证码 (true/false) no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/alarm/getAIRecords,/websocket/* + file: + uploadPath: C:\casic\tmp\ + downloadPath: D:\tmp\ #flowable数据源和多数据源配置 db: init: