diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml index fcfa970..bec2a6a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -2,4 +2,40 @@ + + + + + + + + + + + + + + ID AS id, + ROBOT_ID AS robotId, + ALARM_TYPE AS alarmType, + ALARM_TYPE_NAME AS alarmTypeName, + ALARM_CONTENT AS alarmContent, + ALARM_VALUE AS alarmValue, + ALARM_TIME AS alarmTime + + + \ No newline at end of file diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml index fcfa970..bec2a6a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -2,4 +2,40 @@ + + + + + + + + + + + + + + ID AS id, + ROBOT_ID AS robotId, + ALARM_TYPE AS alarmType, + ALARM_TYPE_NAME AS alarmTypeName, + ALARM_CONTENT AS alarmContent, + ALARM_VALUE AS alarmValue, + ALARM_TIME AS alarmTime + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml new file mode 100644 index 0000000..76c6d2b --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml index fcfa970..bec2a6a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -2,4 +2,40 @@ + + + + + + + + + + + + + + ID AS id, + ROBOT_ID AS robotId, + ALARM_TYPE AS alarmType, + ALARM_TYPE_NAME AS alarmTypeName, + ALARM_CONTENT AS alarmContent, + ALARM_VALUE AS alarmValue, + ALARM_TIME AS alarmTime + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml new file mode 100644 index 0000000..76c6d2b --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java index b743eeb..224c865 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java @@ -9,41 +9,47 @@ @Data public class AlarmDTO { /** - * 台风与方舱和机器人的距离 + * 数据库主键 */ - private Double typhoonDistance; + private Long id; /** - * 台风风速 + * 机器人ID */ - private Double typhoonSpeed; + private String robotId; /** - * 船舶与机器人的距离 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double shipDistance; + private String alarmType; /** - * 机器人电量 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double robotBattery; + private String alarmTypeName; /** - * 机器人与方舱之间的距离 + * 报警内容 */ - private Double robotDistance; + private String alarmContent; /** - * 通信信号强度 + * 报警数值 */ - private Integer satelliteSignal; + private Double alarmValue; + + /** + * 报警时间 + */ + private String alarmTime; public AlarmDTO(Alarm alarm) { - this.typhoonDistance = alarm.getTyphoonDistance(); - this.typhoonSpeed = alarm.getTyphoonSpeed(); - this.shipDistance = alarm.getShipDistance(); - this.robotBattery = alarm.getRobotBattery(); - this.robotDistance = alarm.getRobotDistance(); - this.satelliteSignal = alarm.getSatelliteSignal(); + this.id = alarm.getId(); + this.robotId = alarm.getRobotId(); + this.alarmValue = alarm.getAlarmValue(); + this.alarmTime = alarm.getAlarmTime(); + this.alarmType = alarm.getAlarmType(); + this.alarmTypeName = alarm.getAlarmTypeName(); + this.alarmContent = alarm.getAlarmContent(); } } diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml index fcfa970..bec2a6a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -2,4 +2,40 @@ + + + + + + + + + + + + + + ID AS id, + ROBOT_ID AS robotId, + ALARM_TYPE AS alarmType, + ALARM_TYPE_NAME AS alarmTypeName, + ALARM_CONTENT AS alarmContent, + ALARM_VALUE AS alarmValue, + ALARM_TIME AS alarmTime + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml new file mode 100644 index 0000000..76c6d2b --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java index b743eeb..224c865 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java @@ -9,41 +9,47 @@ @Data public class AlarmDTO { /** - * 台风与方舱和机器人的距离 + * 数据库主键 */ - private Double typhoonDistance; + private Long id; /** - * 台风风速 + * 机器人ID */ - private Double typhoonSpeed; + private String robotId; /** - * 船舶与机器人的距离 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double shipDistance; + private String alarmType; /** - * 机器人电量 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double robotBattery; + private String alarmTypeName; /** - * 机器人与方舱之间的距离 + * 报警内容 */ - private Double robotDistance; + private String alarmContent; /** - * 通信信号强度 + * 报警数值 */ - private Integer satelliteSignal; + private Double alarmValue; + + /** + * 报警时间 + */ + private String alarmTime; public AlarmDTO(Alarm alarm) { - this.typhoonDistance = alarm.getTyphoonDistance(); - this.typhoonSpeed = alarm.getTyphoonSpeed(); - this.shipDistance = alarm.getShipDistance(); - this.robotBattery = alarm.getRobotBattery(); - this.robotDistance = alarm.getRobotDistance(); - this.satelliteSignal = alarm.getSatelliteSignal(); + this.id = alarm.getId(); + this.robotId = alarm.getRobotId(); + this.alarmValue = alarm.getAlarmValue(); + this.alarmTime = alarm.getAlarmTime(); + this.alarmType = alarm.getAlarmType(); + this.alarmTypeName = alarm.getAlarmTypeName(); + this.alarmContent = alarm.getAlarmContent(); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java new file mode 100644 index 0000000..7183bb7 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.AlarmThreshold; +import lombok.Data; + +/** + * @author a203 + */ +@Data +public class AlarmThresholdDTO { + /** + * 台风与方舱和机器人的距离 + */ + private Double typhoonDistance; + + /** + * 台风风速 + */ + private Double typhoonSpeed; + + /** + * 船舶与机器人的距离 + */ + private Double shipDistance; + + /** + * 机器人电量 + */ + private Double robotBattery; + + /** + * 机器人与方舱之间的距离 + */ + private Double robotDistance; + + /** + * 通信信号强度 + */ + private Integer satelliteSignal; + + public AlarmThresholdDTO(AlarmThreshold threshold) { + this.typhoonDistance = threshold.getTyphoonDistance(); + this.typhoonSpeed = threshold.getTyphoonSpeed(); + this.shipDistance = threshold.getShipDistance(); + this.robotBattery = threshold.getRobotBattery(); + this.robotDistance = threshold.getRobotDistance(); + this.satelliteSignal = threshold.getSatelliteSignal(); + } +} diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml index fcfa970..bec2a6a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -2,4 +2,40 @@ + + + + + + + + + + + + + + ID AS id, + ROBOT_ID AS robotId, + ALARM_TYPE AS alarmType, + ALARM_TYPE_NAME AS alarmTypeName, + ALARM_CONTENT AS alarmContent, + ALARM_VALUE AS alarmValue, + ALARM_TIME AS alarmTime + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml new file mode 100644 index 0000000..76c6d2b --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java index b743eeb..224c865 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java @@ -9,41 +9,47 @@ @Data public class AlarmDTO { /** - * 台风与方舱和机器人的距离 + * 数据库主键 */ - private Double typhoonDistance; + private Long id; /** - * 台风风速 + * 机器人ID */ - private Double typhoonSpeed; + private String robotId; /** - * 船舶与机器人的距离 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double shipDistance; + private String alarmType; /** - * 机器人电量 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double robotBattery; + private String alarmTypeName; /** - * 机器人与方舱之间的距离 + * 报警内容 */ - private Double robotDistance; + private String alarmContent; /** - * 通信信号强度 + * 报警数值 */ - private Integer satelliteSignal; + private Double alarmValue; + + /** + * 报警时间 + */ + private String alarmTime; public AlarmDTO(Alarm alarm) { - this.typhoonDistance = alarm.getTyphoonDistance(); - this.typhoonSpeed = alarm.getTyphoonSpeed(); - this.shipDistance = alarm.getShipDistance(); - this.robotBattery = alarm.getRobotBattery(); - this.robotDistance = alarm.getRobotDistance(); - this.satelliteSignal = alarm.getSatelliteSignal(); + this.id = alarm.getId(); + this.robotId = alarm.getRobotId(); + this.alarmValue = alarm.getAlarmValue(); + this.alarmTime = alarm.getAlarmTime(); + this.alarmType = alarm.getAlarmType(); + this.alarmTypeName = alarm.getAlarmTypeName(); + this.alarmContent = alarm.getAlarmContent(); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java new file mode 100644 index 0000000..7183bb7 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.AlarmThreshold; +import lombok.Data; + +/** + * @author a203 + */ +@Data +public class AlarmThresholdDTO { + /** + * 台风与方舱和机器人的距离 + */ + private Double typhoonDistance; + + /** + * 台风风速 + */ + private Double typhoonSpeed; + + /** + * 船舶与机器人的距离 + */ + private Double shipDistance; + + /** + * 机器人电量 + */ + private Double robotBattery; + + /** + * 机器人与方舱之间的距离 + */ + private Double robotDistance; + + /** + * 通信信号强度 + */ + private Integer satelliteSignal; + + public AlarmThresholdDTO(AlarmThreshold threshold) { + this.typhoonDistance = threshold.getTyphoonDistance(); + this.typhoonSpeed = threshold.getTyphoonSpeed(); + this.shipDistance = threshold.getShipDistance(); + this.robotBattery = threshold.getRobotBattery(); + this.robotDistance = threshold.getRobotDistance(); + this.satelliteSignal = threshold.getSatelliteSignal(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java index 8805e02..685f544 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java @@ -1,24 +1,28 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import java.util.List; + /** * @author a203 */ public interface IAlarmService extends IService { /** - * 获取最新的阈值设置 - * - * @return {@link AlarmDTO} + * 添加报警 */ - AlarmDTO recentValue(); + void checkAndSave(); /** - * 修改报警阈值 + * 获取报警记录-分页 * - * @param alarm 报警阈值对象 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @param page 分页对象 + * @return {@link List} */ - void checkAndUpdate(Alarm alarm); + List selectAlarmRecordsPage(String startDate, String endDate, Page page); } \ No newline at end of file diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml index fcfa970..bec2a6a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -2,4 +2,40 @@ + + + + + + + + + + + + + + ID AS id, + ROBOT_ID AS robotId, + ALARM_TYPE AS alarmType, + ALARM_TYPE_NAME AS alarmTypeName, + ALARM_CONTENT AS alarmContent, + ALARM_VALUE AS alarmValue, + ALARM_TIME AS alarmTime + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml new file mode 100644 index 0000000..76c6d2b --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java index b743eeb..224c865 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java @@ -9,41 +9,47 @@ @Data public class AlarmDTO { /** - * 台风与方舱和机器人的距离 + * 数据库主键 */ - private Double typhoonDistance; + private Long id; /** - * 台风风速 + * 机器人ID */ - private Double typhoonSpeed; + private String robotId; /** - * 船舶与机器人的距离 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double shipDistance; + private String alarmType; /** - * 机器人电量 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double robotBattery; + private String alarmTypeName; /** - * 机器人与方舱之间的距离 + * 报警内容 */ - private Double robotDistance; + private String alarmContent; /** - * 通信信号强度 + * 报警数值 */ - private Integer satelliteSignal; + private Double alarmValue; + + /** + * 报警时间 + */ + private String alarmTime; public AlarmDTO(Alarm alarm) { - this.typhoonDistance = alarm.getTyphoonDistance(); - this.typhoonSpeed = alarm.getTyphoonSpeed(); - this.shipDistance = alarm.getShipDistance(); - this.robotBattery = alarm.getRobotBattery(); - this.robotDistance = alarm.getRobotDistance(); - this.satelliteSignal = alarm.getSatelliteSignal(); + this.id = alarm.getId(); + this.robotId = alarm.getRobotId(); + this.alarmValue = alarm.getAlarmValue(); + this.alarmTime = alarm.getAlarmTime(); + this.alarmType = alarm.getAlarmType(); + this.alarmTypeName = alarm.getAlarmTypeName(); + this.alarmContent = alarm.getAlarmContent(); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java new file mode 100644 index 0000000..7183bb7 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.AlarmThreshold; +import lombok.Data; + +/** + * @author a203 + */ +@Data +public class AlarmThresholdDTO { + /** + * 台风与方舱和机器人的距离 + */ + private Double typhoonDistance; + + /** + * 台风风速 + */ + private Double typhoonSpeed; + + /** + * 船舶与机器人的距离 + */ + private Double shipDistance; + + /** + * 机器人电量 + */ + private Double robotBattery; + + /** + * 机器人与方舱之间的距离 + */ + private Double robotDistance; + + /** + * 通信信号强度 + */ + private Integer satelliteSignal; + + public AlarmThresholdDTO(AlarmThreshold threshold) { + this.typhoonDistance = threshold.getTyphoonDistance(); + this.typhoonSpeed = threshold.getTyphoonSpeed(); + this.shipDistance = threshold.getShipDistance(); + this.robotBattery = threshold.getRobotBattery(); + this.robotDistance = threshold.getRobotDistance(); + this.satelliteSignal = threshold.getSatelliteSignal(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java index 8805e02..685f544 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java @@ -1,24 +1,28 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import java.util.List; + /** * @author a203 */ public interface IAlarmService extends IService { /** - * 获取最新的阈值设置 - * - * @return {@link AlarmDTO} + * 添加报警 */ - AlarmDTO recentValue(); + void checkAndSave(); /** - * 修改报警阈值 + * 获取报警记录-分页 * - * @param alarm 报警阈值对象 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @param page 分页对象 + * @return {@link List} */ - void checkAndUpdate(Alarm alarm); + List selectAlarmRecordsPage(String startDate, String endDate, Page page); } \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java new file mode 100644 index 0000000..9ccfe85 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * @author a203 + */ +public interface IAlarmThresholdService extends IService { + /** + * 获取最新的阈值设置 + * + * @return {@link AlarmThresholdDTO} + */ + AlarmThresholdDTO recentValue(); + + /** + * 修改报警阈值 + * + * @param threshold 报警阈值对象 + */ + void checkAndUpdate(AlarmThreshold threshold); +} \ No newline at end of file diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml index fcfa970..bec2a6a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -2,4 +2,40 @@ + + + + + + + + + + + + + + ID AS id, + ROBOT_ID AS robotId, + ALARM_TYPE AS alarmType, + ALARM_TYPE_NAME AS alarmTypeName, + ALARM_CONTENT AS alarmContent, + ALARM_VALUE AS alarmValue, + ALARM_TIME AS alarmTime + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml new file mode 100644 index 0000000..76c6d2b --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java index b743eeb..224c865 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java @@ -9,41 +9,47 @@ @Data public class AlarmDTO { /** - * 台风与方舱和机器人的距离 + * 数据库主键 */ - private Double typhoonDistance; + private Long id; /** - * 台风风速 + * 机器人ID */ - private Double typhoonSpeed; + private String robotId; /** - * 船舶与机器人的距离 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double shipDistance; + private String alarmType; /** - * 机器人电量 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double robotBattery; + private String alarmTypeName; /** - * 机器人与方舱之间的距离 + * 报警内容 */ - private Double robotDistance; + private String alarmContent; /** - * 通信信号强度 + * 报警数值 */ - private Integer satelliteSignal; + private Double alarmValue; + + /** + * 报警时间 + */ + private String alarmTime; public AlarmDTO(Alarm alarm) { - this.typhoonDistance = alarm.getTyphoonDistance(); - this.typhoonSpeed = alarm.getTyphoonSpeed(); - this.shipDistance = alarm.getShipDistance(); - this.robotBattery = alarm.getRobotBattery(); - this.robotDistance = alarm.getRobotDistance(); - this.satelliteSignal = alarm.getSatelliteSignal(); + this.id = alarm.getId(); + this.robotId = alarm.getRobotId(); + this.alarmValue = alarm.getAlarmValue(); + this.alarmTime = alarm.getAlarmTime(); + this.alarmType = alarm.getAlarmType(); + this.alarmTypeName = alarm.getAlarmTypeName(); + this.alarmContent = alarm.getAlarmContent(); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java new file mode 100644 index 0000000..7183bb7 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.AlarmThreshold; +import lombok.Data; + +/** + * @author a203 + */ +@Data +public class AlarmThresholdDTO { + /** + * 台风与方舱和机器人的距离 + */ + private Double typhoonDistance; + + /** + * 台风风速 + */ + private Double typhoonSpeed; + + /** + * 船舶与机器人的距离 + */ + private Double shipDistance; + + /** + * 机器人电量 + */ + private Double robotBattery; + + /** + * 机器人与方舱之间的距离 + */ + private Double robotDistance; + + /** + * 通信信号强度 + */ + private Integer satelliteSignal; + + public AlarmThresholdDTO(AlarmThreshold threshold) { + this.typhoonDistance = threshold.getTyphoonDistance(); + this.typhoonSpeed = threshold.getTyphoonSpeed(); + this.shipDistance = threshold.getShipDistance(); + this.robotBattery = threshold.getRobotBattery(); + this.robotDistance = threshold.getRobotDistance(); + this.satelliteSignal = threshold.getSatelliteSignal(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java index 8805e02..685f544 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java @@ -1,24 +1,28 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import java.util.List; + /** * @author a203 */ public interface IAlarmService extends IService { /** - * 获取最新的阈值设置 - * - * @return {@link AlarmDTO} + * 添加报警 */ - AlarmDTO recentValue(); + void checkAndSave(); /** - * 修改报警阈值 + * 获取报警记录-分页 * - * @param alarm 报警阈值对象 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @param page 分页对象 + * @return {@link List} */ - void checkAndUpdate(Alarm alarm); + List selectAlarmRecordsPage(String startDate, String endDate, Page page); } \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java new file mode 100644 index 0000000..9ccfe85 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * @author a203 + */ +public interface IAlarmThresholdService extends IService { + /** + * 获取最新的阈值设置 + * + * @return {@link AlarmThresholdDTO} + */ + AlarmThresholdDTO recentValue(); + + /** + * 修改报警阈值 + * + * @param threshold 报警阈值对象 + */ + void checkAndUpdate(AlarmThreshold threshold); +} \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java index 453a4e4..f5797b9 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java @@ -1,36 +1,140 @@ package com.casic.missiles.modular.system.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.system.dao.AlarmMapper; import com.casic.missiles.modular.system.dto.AlarmDTO; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.dto.ShipDTO; +import com.casic.missiles.modular.system.dto.TyphoonDTO; import com.casic.missiles.modular.system.model.Alarm; -import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.*; +import com.casic.missiles.modular.system.utils.EncodeData; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; + /** * @author a203 */ +@Slf4j @Service public class AlarmServiceImpl extends ServiceImpl implements IAlarmService { - public AlarmServiceImpl() { + private final AbstractDictService dictService; + private final IAlarmThresholdService thresholdService; + private final ITyphoonService typhoonService; + private final IShipService shipService; + private final IRobotService robotService; + public AlarmServiceImpl(AbstractDictService dictService, + IAlarmThresholdService thresholdService, + ITyphoonService typhoonService, + IShipService shipService, + IRobotService robotService) { + this.dictService = dictService; + this.thresholdService = thresholdService; + this.typhoonService = typhoonService; + this.shipService = shipService; + this.robotService = robotService; } @Override - public AlarmDTO recentValue() { - AlarmDTO alarmDTO = null; - for (Alarm alarm : list()) { - alarmDTO = new AlarmDTO(alarm); + public void checkAndSave() { + //先从数据库拿到报警阈值 + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + + /** + * 台风数据 + * */ + List typhoonList = typhoonService.currentTyphoonList(); + /** + * 机器人数据 + * */ + List> robotMaps = robotService.robotList(); + + for (Map robotMap : robotMaps) { + String robotId = robotMap.get("robotId"); + double lng = Double.parseDouble(robotMap.get("lng")); + double lat = Double.parseDouble(robotMap.get("lat")); + double powerE = Double.parseDouble(robotMap.get("powerE")); + if (powerE < thresholdDTO.getRobotBattery()) { + //存库 + save(creatAlarm(robotId, "1", "机器人电量低", powerE)); + } + /** + * 船舶数据 + * */ + //直接获取当前机器人阈值范围内的船舶数据没然后再计算距离 + String rng = (lng * 600000) + "," + (lat * 600000) + "," + thresholdDTO.getShipDistance(); + List ships = shipService.shipsInCircle(rng, 30); + for (ShipDTO ship : ships) { + double distance = EncodeData.distance(ship.getLng(), ship.getLat(), lng, lat); + if (distance < thresholdDTO.getShipDistance()) { + save(creatAlarm(robotId, "2", "机器人与船舶距离太近", distance)); + } + } } - return alarmDTO; + + for (TyphoonDTO typhoonDTO : typhoonList) { + double speed = Double.parseDouble(typhoonDTO.getSpeed()); + if (speed > thresholdDTO.getTyphoonSpeed()) { + save(creatAlarm("", "3", "台风风速超过预警值", speed)); + } + //计算台风-机器人之间的距离 + for (Map robotMap : robotMaps) { + String robotId = robotMap.get("robotId"); + double lng = Double.parseDouble(robotMap.get("lng")); + double lat = Double.parseDouble(robotMap.get("lat")); + //计算台风与每一个机器人之间的距离 + double distance = EncodeData.distance(typhoonDTO.getLng(), typhoonDTO.getLat(), lng, lat); + if (distance < thresholdDTO.getTyphoonDistance()) { + save(creatAlarm(robotId, "4", "机器人与台风距离太近", distance)); + } + } + } + + //TODO 计算机器人和方舱的距离-暂无数据 +// for (Map robotMap : robotMaps) { +// String robotId = robotMap.get("robotId"); +// double lng = Double.parseDouble(robotMap.get("lng")); +// double lat = Double.parseDouble(robotMap.get("lat")); +// //计算机器人和方舱的距离-暂无数据 +// double distance = EncodeData.distance(typhoonDTO.getLng(), typhoonDTO.getLat(), lng, lat); +// if (distance < thresholdDTO.getRobotDistance()) { +// save(creatAlarm(robotId, "5", "机器人与方舱距离超过预警值", distance)); +// } +// } + + //通信信号-暂无数据 + save(creatAlarm("", "6", "天通卫星信号弱", 0)); + } + + private Alarm creatAlarm(String robotId, String type, String alarmContent, double alarmValue) { + Alarm alarm = new Alarm(); + alarm.setRobotId(robotId); + alarm.setAlarmType(type); + //读取字典值 + alarm.setAlarmTypeName(dictService.getDictNameByCode("alarmType", type)); + alarm.setAlarmContent(alarmContent); + alarm.setAlarmValue(alarmValue); + + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA); + alarm.setAlarmTime(dateFormat.format(date)); + //TODO 发WebSocket + + return alarm; } @Override - public void checkAndUpdate(Alarm alarm) { - QueryWrapper query = new QueryWrapper<>(); - this.baseMapper.delete(query); - save(alarm); + public List selectAlarmRecordsPage(String startDate, String endDate, Page page) { + return this.baseMapper.selectAlarmRecordsPage(startDate, endDate, page); } } diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml index fcfa970..bec2a6a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -2,4 +2,40 @@ + + + + + + + + + + + + + + ID AS id, + ROBOT_ID AS robotId, + ALARM_TYPE AS alarmType, + ALARM_TYPE_NAME AS alarmTypeName, + ALARM_CONTENT AS alarmContent, + ALARM_VALUE AS alarmValue, + ALARM_TIME AS alarmTime + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml new file mode 100644 index 0000000..76c6d2b --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java index b743eeb..224c865 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java @@ -9,41 +9,47 @@ @Data public class AlarmDTO { /** - * 台风与方舱和机器人的距离 + * 数据库主键 */ - private Double typhoonDistance; + private Long id; /** - * 台风风速 + * 机器人ID */ - private Double typhoonSpeed; + private String robotId; /** - * 船舶与机器人的距离 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double shipDistance; + private String alarmType; /** - * 机器人电量 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double robotBattery; + private String alarmTypeName; /** - * 机器人与方舱之间的距离 + * 报警内容 */ - private Double robotDistance; + private String alarmContent; /** - * 通信信号强度 + * 报警数值 */ - private Integer satelliteSignal; + private Double alarmValue; + + /** + * 报警时间 + */ + private String alarmTime; public AlarmDTO(Alarm alarm) { - this.typhoonDistance = alarm.getTyphoonDistance(); - this.typhoonSpeed = alarm.getTyphoonSpeed(); - this.shipDistance = alarm.getShipDistance(); - this.robotBattery = alarm.getRobotBattery(); - this.robotDistance = alarm.getRobotDistance(); - this.satelliteSignal = alarm.getSatelliteSignal(); + this.id = alarm.getId(); + this.robotId = alarm.getRobotId(); + this.alarmValue = alarm.getAlarmValue(); + this.alarmTime = alarm.getAlarmTime(); + this.alarmType = alarm.getAlarmType(); + this.alarmTypeName = alarm.getAlarmTypeName(); + this.alarmContent = alarm.getAlarmContent(); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java new file mode 100644 index 0000000..7183bb7 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.AlarmThreshold; +import lombok.Data; + +/** + * @author a203 + */ +@Data +public class AlarmThresholdDTO { + /** + * 台风与方舱和机器人的距离 + */ + private Double typhoonDistance; + + /** + * 台风风速 + */ + private Double typhoonSpeed; + + /** + * 船舶与机器人的距离 + */ + private Double shipDistance; + + /** + * 机器人电量 + */ + private Double robotBattery; + + /** + * 机器人与方舱之间的距离 + */ + private Double robotDistance; + + /** + * 通信信号强度 + */ + private Integer satelliteSignal; + + public AlarmThresholdDTO(AlarmThreshold threshold) { + this.typhoonDistance = threshold.getTyphoonDistance(); + this.typhoonSpeed = threshold.getTyphoonSpeed(); + this.shipDistance = threshold.getShipDistance(); + this.robotBattery = threshold.getRobotBattery(); + this.robotDistance = threshold.getRobotDistance(); + this.satelliteSignal = threshold.getSatelliteSignal(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java index 8805e02..685f544 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java @@ -1,24 +1,28 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import java.util.List; + /** * @author a203 */ public interface IAlarmService extends IService { /** - * 获取最新的阈值设置 - * - * @return {@link AlarmDTO} + * 添加报警 */ - AlarmDTO recentValue(); + void checkAndSave(); /** - * 修改报警阈值 + * 获取报警记录-分页 * - * @param alarm 报警阈值对象 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @param page 分页对象 + * @return {@link List} */ - void checkAndUpdate(Alarm alarm); + List selectAlarmRecordsPage(String startDate, String endDate, Page page); } \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java new file mode 100644 index 0000000..9ccfe85 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * @author a203 + */ +public interface IAlarmThresholdService extends IService { + /** + * 获取最新的阈值设置 + * + * @return {@link AlarmThresholdDTO} + */ + AlarmThresholdDTO recentValue(); + + /** + * 修改报警阈值 + * + * @param threshold 报警阈值对象 + */ + void checkAndUpdate(AlarmThreshold threshold); +} \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java index 453a4e4..f5797b9 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java @@ -1,36 +1,140 @@ package com.casic.missiles.modular.system.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.system.dao.AlarmMapper; import com.casic.missiles.modular.system.dto.AlarmDTO; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.dto.ShipDTO; +import com.casic.missiles.modular.system.dto.TyphoonDTO; import com.casic.missiles.modular.system.model.Alarm; -import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.*; +import com.casic.missiles.modular.system.utils.EncodeData; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; + /** * @author a203 */ +@Slf4j @Service public class AlarmServiceImpl extends ServiceImpl implements IAlarmService { - public AlarmServiceImpl() { + private final AbstractDictService dictService; + private final IAlarmThresholdService thresholdService; + private final ITyphoonService typhoonService; + private final IShipService shipService; + private final IRobotService robotService; + public AlarmServiceImpl(AbstractDictService dictService, + IAlarmThresholdService thresholdService, + ITyphoonService typhoonService, + IShipService shipService, + IRobotService robotService) { + this.dictService = dictService; + this.thresholdService = thresholdService; + this.typhoonService = typhoonService; + this.shipService = shipService; + this.robotService = robotService; } @Override - public AlarmDTO recentValue() { - AlarmDTO alarmDTO = null; - for (Alarm alarm : list()) { - alarmDTO = new AlarmDTO(alarm); + public void checkAndSave() { + //先从数据库拿到报警阈值 + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + + /** + * 台风数据 + * */ + List typhoonList = typhoonService.currentTyphoonList(); + /** + * 机器人数据 + * */ + List> robotMaps = robotService.robotList(); + + for (Map robotMap : robotMaps) { + String robotId = robotMap.get("robotId"); + double lng = Double.parseDouble(robotMap.get("lng")); + double lat = Double.parseDouble(robotMap.get("lat")); + double powerE = Double.parseDouble(robotMap.get("powerE")); + if (powerE < thresholdDTO.getRobotBattery()) { + //存库 + save(creatAlarm(robotId, "1", "机器人电量低", powerE)); + } + /** + * 船舶数据 + * */ + //直接获取当前机器人阈值范围内的船舶数据没然后再计算距离 + String rng = (lng * 600000) + "," + (lat * 600000) + "," + thresholdDTO.getShipDistance(); + List ships = shipService.shipsInCircle(rng, 30); + for (ShipDTO ship : ships) { + double distance = EncodeData.distance(ship.getLng(), ship.getLat(), lng, lat); + if (distance < thresholdDTO.getShipDistance()) { + save(creatAlarm(robotId, "2", "机器人与船舶距离太近", distance)); + } + } } - return alarmDTO; + + for (TyphoonDTO typhoonDTO : typhoonList) { + double speed = Double.parseDouble(typhoonDTO.getSpeed()); + if (speed > thresholdDTO.getTyphoonSpeed()) { + save(creatAlarm("", "3", "台风风速超过预警值", speed)); + } + //计算台风-机器人之间的距离 + for (Map robotMap : robotMaps) { + String robotId = robotMap.get("robotId"); + double lng = Double.parseDouble(robotMap.get("lng")); + double lat = Double.parseDouble(robotMap.get("lat")); + //计算台风与每一个机器人之间的距离 + double distance = EncodeData.distance(typhoonDTO.getLng(), typhoonDTO.getLat(), lng, lat); + if (distance < thresholdDTO.getTyphoonDistance()) { + save(creatAlarm(robotId, "4", "机器人与台风距离太近", distance)); + } + } + } + + //TODO 计算机器人和方舱的距离-暂无数据 +// for (Map robotMap : robotMaps) { +// String robotId = robotMap.get("robotId"); +// double lng = Double.parseDouble(robotMap.get("lng")); +// double lat = Double.parseDouble(robotMap.get("lat")); +// //计算机器人和方舱的距离-暂无数据 +// double distance = EncodeData.distance(typhoonDTO.getLng(), typhoonDTO.getLat(), lng, lat); +// if (distance < thresholdDTO.getRobotDistance()) { +// save(creatAlarm(robotId, "5", "机器人与方舱距离超过预警值", distance)); +// } +// } + + //通信信号-暂无数据 + save(creatAlarm("", "6", "天通卫星信号弱", 0)); + } + + private Alarm creatAlarm(String robotId, String type, String alarmContent, double alarmValue) { + Alarm alarm = new Alarm(); + alarm.setRobotId(robotId); + alarm.setAlarmType(type); + //读取字典值 + alarm.setAlarmTypeName(dictService.getDictNameByCode("alarmType", type)); + alarm.setAlarmContent(alarmContent); + alarm.setAlarmValue(alarmValue); + + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA); + alarm.setAlarmTime(dateFormat.format(date)); + //TODO 发WebSocket + + return alarm; } @Override - public void checkAndUpdate(Alarm alarm) { - QueryWrapper query = new QueryWrapper<>(); - this.baseMapper.delete(query); - save(alarm); + public List selectAlarmRecordsPage(String startDate, String endDate, Page page) { + return this.baseMapper.selectAlarmRecordsPage(startDate, endDate, page); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java new file mode 100644 index 0000000..9ea96d1 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.AlarmThresholdMapper; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; +import org.springframework.stereotype.Service; + +/** + * @author a203 + */ +@Service +public class AlarmThresholdServiceImpl extends ServiceImpl implements IAlarmThresholdService { + + public AlarmThresholdServiceImpl() { + + } + + @Override + public AlarmThresholdDTO recentValue() { + AlarmThresholdDTO thresholdDTO = null; + for (AlarmThreshold alarm : list()) { + thresholdDTO = new AlarmThresholdDTO(alarm); + } + return thresholdDTO; + } + + @Override + public void checkAndUpdate(AlarmThreshold threshold) { + QueryWrapper query = new QueryWrapper<>(); + this.baseMapper.delete(query); + save(threshold); + } +} diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml index fcfa970..bec2a6a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -2,4 +2,40 @@ + + + + + + + + + + + + + + ID AS id, + ROBOT_ID AS robotId, + ALARM_TYPE AS alarmType, + ALARM_TYPE_NAME AS alarmTypeName, + ALARM_CONTENT AS alarmContent, + ALARM_VALUE AS alarmValue, + ALARM_TIME AS alarmTime + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml new file mode 100644 index 0000000..76c6d2b --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java index b743eeb..224c865 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java @@ -9,41 +9,47 @@ @Data public class AlarmDTO { /** - * 台风与方舱和机器人的距离 + * 数据库主键 */ - private Double typhoonDistance; + private Long id; /** - * 台风风速 + * 机器人ID */ - private Double typhoonSpeed; + private String robotId; /** - * 船舶与机器人的距离 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double shipDistance; + private String alarmType; /** - * 机器人电量 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double robotBattery; + private String alarmTypeName; /** - * 机器人与方舱之间的距离 + * 报警内容 */ - private Double robotDistance; + private String alarmContent; /** - * 通信信号强度 + * 报警数值 */ - private Integer satelliteSignal; + private Double alarmValue; + + /** + * 报警时间 + */ + private String alarmTime; public AlarmDTO(Alarm alarm) { - this.typhoonDistance = alarm.getTyphoonDistance(); - this.typhoonSpeed = alarm.getTyphoonSpeed(); - this.shipDistance = alarm.getShipDistance(); - this.robotBattery = alarm.getRobotBattery(); - this.robotDistance = alarm.getRobotDistance(); - this.satelliteSignal = alarm.getSatelliteSignal(); + this.id = alarm.getId(); + this.robotId = alarm.getRobotId(); + this.alarmValue = alarm.getAlarmValue(); + this.alarmTime = alarm.getAlarmTime(); + this.alarmType = alarm.getAlarmType(); + this.alarmTypeName = alarm.getAlarmTypeName(); + this.alarmContent = alarm.getAlarmContent(); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java new file mode 100644 index 0000000..7183bb7 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.AlarmThreshold; +import lombok.Data; + +/** + * @author a203 + */ +@Data +public class AlarmThresholdDTO { + /** + * 台风与方舱和机器人的距离 + */ + private Double typhoonDistance; + + /** + * 台风风速 + */ + private Double typhoonSpeed; + + /** + * 船舶与机器人的距离 + */ + private Double shipDistance; + + /** + * 机器人电量 + */ + private Double robotBattery; + + /** + * 机器人与方舱之间的距离 + */ + private Double robotDistance; + + /** + * 通信信号强度 + */ + private Integer satelliteSignal; + + public AlarmThresholdDTO(AlarmThreshold threshold) { + this.typhoonDistance = threshold.getTyphoonDistance(); + this.typhoonSpeed = threshold.getTyphoonSpeed(); + this.shipDistance = threshold.getShipDistance(); + this.robotBattery = threshold.getRobotBattery(); + this.robotDistance = threshold.getRobotDistance(); + this.satelliteSignal = threshold.getSatelliteSignal(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java index 8805e02..685f544 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java @@ -1,24 +1,28 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import java.util.List; + /** * @author a203 */ public interface IAlarmService extends IService { /** - * 获取最新的阈值设置 - * - * @return {@link AlarmDTO} + * 添加报警 */ - AlarmDTO recentValue(); + void checkAndSave(); /** - * 修改报警阈值 + * 获取报警记录-分页 * - * @param alarm 报警阈值对象 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @param page 分页对象 + * @return {@link List} */ - void checkAndUpdate(Alarm alarm); + List selectAlarmRecordsPage(String startDate, String endDate, Page page); } \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java new file mode 100644 index 0000000..9ccfe85 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * @author a203 + */ +public interface IAlarmThresholdService extends IService { + /** + * 获取最新的阈值设置 + * + * @return {@link AlarmThresholdDTO} + */ + AlarmThresholdDTO recentValue(); + + /** + * 修改报警阈值 + * + * @param threshold 报警阈值对象 + */ + void checkAndUpdate(AlarmThreshold threshold); +} \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java index 453a4e4..f5797b9 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java @@ -1,36 +1,140 @@ package com.casic.missiles.modular.system.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.system.dao.AlarmMapper; import com.casic.missiles.modular.system.dto.AlarmDTO; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.dto.ShipDTO; +import com.casic.missiles.modular.system.dto.TyphoonDTO; import com.casic.missiles.modular.system.model.Alarm; -import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.*; +import com.casic.missiles.modular.system.utils.EncodeData; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; + /** * @author a203 */ +@Slf4j @Service public class AlarmServiceImpl extends ServiceImpl implements IAlarmService { - public AlarmServiceImpl() { + private final AbstractDictService dictService; + private final IAlarmThresholdService thresholdService; + private final ITyphoonService typhoonService; + private final IShipService shipService; + private final IRobotService robotService; + public AlarmServiceImpl(AbstractDictService dictService, + IAlarmThresholdService thresholdService, + ITyphoonService typhoonService, + IShipService shipService, + IRobotService robotService) { + this.dictService = dictService; + this.thresholdService = thresholdService; + this.typhoonService = typhoonService; + this.shipService = shipService; + this.robotService = robotService; } @Override - public AlarmDTO recentValue() { - AlarmDTO alarmDTO = null; - for (Alarm alarm : list()) { - alarmDTO = new AlarmDTO(alarm); + public void checkAndSave() { + //先从数据库拿到报警阈值 + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + + /** + * 台风数据 + * */ + List typhoonList = typhoonService.currentTyphoonList(); + /** + * 机器人数据 + * */ + List> robotMaps = robotService.robotList(); + + for (Map robotMap : robotMaps) { + String robotId = robotMap.get("robotId"); + double lng = Double.parseDouble(robotMap.get("lng")); + double lat = Double.parseDouble(robotMap.get("lat")); + double powerE = Double.parseDouble(robotMap.get("powerE")); + if (powerE < thresholdDTO.getRobotBattery()) { + //存库 + save(creatAlarm(robotId, "1", "机器人电量低", powerE)); + } + /** + * 船舶数据 + * */ + //直接获取当前机器人阈值范围内的船舶数据没然后再计算距离 + String rng = (lng * 600000) + "," + (lat * 600000) + "," + thresholdDTO.getShipDistance(); + List ships = shipService.shipsInCircle(rng, 30); + for (ShipDTO ship : ships) { + double distance = EncodeData.distance(ship.getLng(), ship.getLat(), lng, lat); + if (distance < thresholdDTO.getShipDistance()) { + save(creatAlarm(robotId, "2", "机器人与船舶距离太近", distance)); + } + } } - return alarmDTO; + + for (TyphoonDTO typhoonDTO : typhoonList) { + double speed = Double.parseDouble(typhoonDTO.getSpeed()); + if (speed > thresholdDTO.getTyphoonSpeed()) { + save(creatAlarm("", "3", "台风风速超过预警值", speed)); + } + //计算台风-机器人之间的距离 + for (Map robotMap : robotMaps) { + String robotId = robotMap.get("robotId"); + double lng = Double.parseDouble(robotMap.get("lng")); + double lat = Double.parseDouble(robotMap.get("lat")); + //计算台风与每一个机器人之间的距离 + double distance = EncodeData.distance(typhoonDTO.getLng(), typhoonDTO.getLat(), lng, lat); + if (distance < thresholdDTO.getTyphoonDistance()) { + save(creatAlarm(robotId, "4", "机器人与台风距离太近", distance)); + } + } + } + + //TODO 计算机器人和方舱的距离-暂无数据 +// for (Map robotMap : robotMaps) { +// String robotId = robotMap.get("robotId"); +// double lng = Double.parseDouble(robotMap.get("lng")); +// double lat = Double.parseDouble(robotMap.get("lat")); +// //计算机器人和方舱的距离-暂无数据 +// double distance = EncodeData.distance(typhoonDTO.getLng(), typhoonDTO.getLat(), lng, lat); +// if (distance < thresholdDTO.getRobotDistance()) { +// save(creatAlarm(robotId, "5", "机器人与方舱距离超过预警值", distance)); +// } +// } + + //通信信号-暂无数据 + save(creatAlarm("", "6", "天通卫星信号弱", 0)); + } + + private Alarm creatAlarm(String robotId, String type, String alarmContent, double alarmValue) { + Alarm alarm = new Alarm(); + alarm.setRobotId(robotId); + alarm.setAlarmType(type); + //读取字典值 + alarm.setAlarmTypeName(dictService.getDictNameByCode("alarmType", type)); + alarm.setAlarmContent(alarmContent); + alarm.setAlarmValue(alarmValue); + + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA); + alarm.setAlarmTime(dateFormat.format(date)); + //TODO 发WebSocket + + return alarm; } @Override - public void checkAndUpdate(Alarm alarm) { - QueryWrapper query = new QueryWrapper<>(); - this.baseMapper.delete(query); - save(alarm); + public List selectAlarmRecordsPage(String startDate, String endDate, Page page) { + return this.baseMapper.selectAlarmRecordsPage(startDate, endDate, page); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java new file mode 100644 index 0000000..9ea96d1 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.AlarmThresholdMapper; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; +import org.springframework.stereotype.Service; + +/** + * @author a203 + */ +@Service +public class AlarmThresholdServiceImpl extends ServiceImpl implements IAlarmThresholdService { + + public AlarmThresholdServiceImpl() { + + } + + @Override + public AlarmThresholdDTO recentValue() { + AlarmThresholdDTO thresholdDTO = null; + for (AlarmThreshold alarm : list()) { + thresholdDTO = new AlarmThresholdDTO(alarm); + } + return thresholdDTO; + } + + @Override + public void checkAndUpdate(AlarmThreshold threshold) { + QueryWrapper query = new QueryWrapper<>(); + this.baseMapper.delete(query); + save(threshold); + } +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java index 85304f0..8d17218 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java @@ -8,57 +8,54 @@ import lombok.Data; /** - * 报警阈值 + * 报警 * * @author a203 */ @Data -@TableName("alarm_threshold") +@TableName("bus_alarm") public class Alarm extends Model { private static final long serialVersionUID = 1L; /** * 数据库主键 - *

- * type = IdType.AUTO 是数据库自增 */ - @TableId(value = "ID", type = IdType.AUTO) - private Integer id; + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; /** - * 台风与方舱和机器人的距离 + * 机器人ID */ - @TableField("TYPHOON_DIS") - private Double typhoonDistance; + @TableField(value = "ROBOT_ID") + private String robotId; /** - * 台风风速 + * 报警类型(台风与方舱和机器人的距离,台风风速,船舶与机器人的距离,机器人电量,机器人与方舱之间的距离,通信信号强度) */ - @TableField("TYPHOON_SPEED") - private Double typhoonSpeed; + @TableField("ALARM_TYPE") + private String alarmType; /** - * 船舶与机器人的距离 + * 报警类型(台风与方舱和机器人的距离,台风风速,船舶与机器人的距离,机器人电量,机器人与方舱之间的距离,通信信号强度) */ - @TableField("SHIP_DIS") - private Double shipDistance; + @TableField("ALARM_TYPE_NAME") + private String alarmTypeName; /** - * 机器人电量 + * 报警内容 */ - @TableField("ROBOT_BATTERY") - private Double robotBattery; + @TableField("ALARM_CONTENT") + private String alarmContent; /** - * 机器人与方舱之间的距离 + * 报警数值 */ - @TableField("ROBOT_DIS") - private Double robotDistance; + @TableField("ALARM_VALUE") + private Double alarmValue; /** - * 通信信号强度 - * 不能用 SIGNAL/signal 关键字,会报错 + * 报警时间 */ - @TableField("SATELLITE_SIGNAL") - private Integer satelliteSignal; + @TableField("ALARM_TIME") + private String alarmTime; } diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml index fcfa970..bec2a6a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -2,4 +2,40 @@ + + + + + + + + + + + + + + ID AS id, + ROBOT_ID AS robotId, + ALARM_TYPE AS alarmType, + ALARM_TYPE_NAME AS alarmTypeName, + ALARM_CONTENT AS alarmContent, + ALARM_VALUE AS alarmValue, + ALARM_TIME AS alarmTime + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml new file mode 100644 index 0000000..76c6d2b --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java index b743eeb..224c865 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java @@ -9,41 +9,47 @@ @Data public class AlarmDTO { /** - * 台风与方舱和机器人的距离 + * 数据库主键 */ - private Double typhoonDistance; + private Long id; /** - * 台风风速 + * 机器人ID */ - private Double typhoonSpeed; + private String robotId; /** - * 船舶与机器人的距离 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double shipDistance; + private String alarmType; /** - * 机器人电量 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double robotBattery; + private String alarmTypeName; /** - * 机器人与方舱之间的距离 + * 报警内容 */ - private Double robotDistance; + private String alarmContent; /** - * 通信信号强度 + * 报警数值 */ - private Integer satelliteSignal; + private Double alarmValue; + + /** + * 报警时间 + */ + private String alarmTime; public AlarmDTO(Alarm alarm) { - this.typhoonDistance = alarm.getTyphoonDistance(); - this.typhoonSpeed = alarm.getTyphoonSpeed(); - this.shipDistance = alarm.getShipDistance(); - this.robotBattery = alarm.getRobotBattery(); - this.robotDistance = alarm.getRobotDistance(); - this.satelliteSignal = alarm.getSatelliteSignal(); + this.id = alarm.getId(); + this.robotId = alarm.getRobotId(); + this.alarmValue = alarm.getAlarmValue(); + this.alarmTime = alarm.getAlarmTime(); + this.alarmType = alarm.getAlarmType(); + this.alarmTypeName = alarm.getAlarmTypeName(); + this.alarmContent = alarm.getAlarmContent(); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java new file mode 100644 index 0000000..7183bb7 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.AlarmThreshold; +import lombok.Data; + +/** + * @author a203 + */ +@Data +public class AlarmThresholdDTO { + /** + * 台风与方舱和机器人的距离 + */ + private Double typhoonDistance; + + /** + * 台风风速 + */ + private Double typhoonSpeed; + + /** + * 船舶与机器人的距离 + */ + private Double shipDistance; + + /** + * 机器人电量 + */ + private Double robotBattery; + + /** + * 机器人与方舱之间的距离 + */ + private Double robotDistance; + + /** + * 通信信号强度 + */ + private Integer satelliteSignal; + + public AlarmThresholdDTO(AlarmThreshold threshold) { + this.typhoonDistance = threshold.getTyphoonDistance(); + this.typhoonSpeed = threshold.getTyphoonSpeed(); + this.shipDistance = threshold.getShipDistance(); + this.robotBattery = threshold.getRobotBattery(); + this.robotDistance = threshold.getRobotDistance(); + this.satelliteSignal = threshold.getSatelliteSignal(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java index 8805e02..685f544 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java @@ -1,24 +1,28 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import java.util.List; + /** * @author a203 */ public interface IAlarmService extends IService { /** - * 获取最新的阈值设置 - * - * @return {@link AlarmDTO} + * 添加报警 */ - AlarmDTO recentValue(); + void checkAndSave(); /** - * 修改报警阈值 + * 获取报警记录-分页 * - * @param alarm 报警阈值对象 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @param page 分页对象 + * @return {@link List} */ - void checkAndUpdate(Alarm alarm); + List selectAlarmRecordsPage(String startDate, String endDate, Page page); } \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java new file mode 100644 index 0000000..9ccfe85 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * @author a203 + */ +public interface IAlarmThresholdService extends IService { + /** + * 获取最新的阈值设置 + * + * @return {@link AlarmThresholdDTO} + */ + AlarmThresholdDTO recentValue(); + + /** + * 修改报警阈值 + * + * @param threshold 报警阈值对象 + */ + void checkAndUpdate(AlarmThreshold threshold); +} \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java index 453a4e4..f5797b9 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java @@ -1,36 +1,140 @@ package com.casic.missiles.modular.system.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.system.dao.AlarmMapper; import com.casic.missiles.modular.system.dto.AlarmDTO; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.dto.ShipDTO; +import com.casic.missiles.modular.system.dto.TyphoonDTO; import com.casic.missiles.modular.system.model.Alarm; -import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.*; +import com.casic.missiles.modular.system.utils.EncodeData; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; + /** * @author a203 */ +@Slf4j @Service public class AlarmServiceImpl extends ServiceImpl implements IAlarmService { - public AlarmServiceImpl() { + private final AbstractDictService dictService; + private final IAlarmThresholdService thresholdService; + private final ITyphoonService typhoonService; + private final IShipService shipService; + private final IRobotService robotService; + public AlarmServiceImpl(AbstractDictService dictService, + IAlarmThresholdService thresholdService, + ITyphoonService typhoonService, + IShipService shipService, + IRobotService robotService) { + this.dictService = dictService; + this.thresholdService = thresholdService; + this.typhoonService = typhoonService; + this.shipService = shipService; + this.robotService = robotService; } @Override - public AlarmDTO recentValue() { - AlarmDTO alarmDTO = null; - for (Alarm alarm : list()) { - alarmDTO = new AlarmDTO(alarm); + public void checkAndSave() { + //先从数据库拿到报警阈值 + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + + /** + * 台风数据 + * */ + List typhoonList = typhoonService.currentTyphoonList(); + /** + * 机器人数据 + * */ + List> robotMaps = robotService.robotList(); + + for (Map robotMap : robotMaps) { + String robotId = robotMap.get("robotId"); + double lng = Double.parseDouble(robotMap.get("lng")); + double lat = Double.parseDouble(robotMap.get("lat")); + double powerE = Double.parseDouble(robotMap.get("powerE")); + if (powerE < thresholdDTO.getRobotBattery()) { + //存库 + save(creatAlarm(robotId, "1", "机器人电量低", powerE)); + } + /** + * 船舶数据 + * */ + //直接获取当前机器人阈值范围内的船舶数据没然后再计算距离 + String rng = (lng * 600000) + "," + (lat * 600000) + "," + thresholdDTO.getShipDistance(); + List ships = shipService.shipsInCircle(rng, 30); + for (ShipDTO ship : ships) { + double distance = EncodeData.distance(ship.getLng(), ship.getLat(), lng, lat); + if (distance < thresholdDTO.getShipDistance()) { + save(creatAlarm(robotId, "2", "机器人与船舶距离太近", distance)); + } + } } - return alarmDTO; + + for (TyphoonDTO typhoonDTO : typhoonList) { + double speed = Double.parseDouble(typhoonDTO.getSpeed()); + if (speed > thresholdDTO.getTyphoonSpeed()) { + save(creatAlarm("", "3", "台风风速超过预警值", speed)); + } + //计算台风-机器人之间的距离 + for (Map robotMap : robotMaps) { + String robotId = robotMap.get("robotId"); + double lng = Double.parseDouble(robotMap.get("lng")); + double lat = Double.parseDouble(robotMap.get("lat")); + //计算台风与每一个机器人之间的距离 + double distance = EncodeData.distance(typhoonDTO.getLng(), typhoonDTO.getLat(), lng, lat); + if (distance < thresholdDTO.getTyphoonDistance()) { + save(creatAlarm(robotId, "4", "机器人与台风距离太近", distance)); + } + } + } + + //TODO 计算机器人和方舱的距离-暂无数据 +// for (Map robotMap : robotMaps) { +// String robotId = robotMap.get("robotId"); +// double lng = Double.parseDouble(robotMap.get("lng")); +// double lat = Double.parseDouble(robotMap.get("lat")); +// //计算机器人和方舱的距离-暂无数据 +// double distance = EncodeData.distance(typhoonDTO.getLng(), typhoonDTO.getLat(), lng, lat); +// if (distance < thresholdDTO.getRobotDistance()) { +// save(creatAlarm(robotId, "5", "机器人与方舱距离超过预警值", distance)); +// } +// } + + //通信信号-暂无数据 + save(creatAlarm("", "6", "天通卫星信号弱", 0)); + } + + private Alarm creatAlarm(String robotId, String type, String alarmContent, double alarmValue) { + Alarm alarm = new Alarm(); + alarm.setRobotId(robotId); + alarm.setAlarmType(type); + //读取字典值 + alarm.setAlarmTypeName(dictService.getDictNameByCode("alarmType", type)); + alarm.setAlarmContent(alarmContent); + alarm.setAlarmValue(alarmValue); + + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA); + alarm.setAlarmTime(dateFormat.format(date)); + //TODO 发WebSocket + + return alarm; } @Override - public void checkAndUpdate(Alarm alarm) { - QueryWrapper query = new QueryWrapper<>(); - this.baseMapper.delete(query); - save(alarm); + public List selectAlarmRecordsPage(String startDate, String endDate, Page page) { + return this.baseMapper.selectAlarmRecordsPage(startDate, endDate, page); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java new file mode 100644 index 0000000..9ea96d1 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.AlarmThresholdMapper; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; +import org.springframework.stereotype.Service; + +/** + * @author a203 + */ +@Service +public class AlarmThresholdServiceImpl extends ServiceImpl implements IAlarmThresholdService { + + public AlarmThresholdServiceImpl() { + + } + + @Override + public AlarmThresholdDTO recentValue() { + AlarmThresholdDTO thresholdDTO = null; + for (AlarmThreshold alarm : list()) { + thresholdDTO = new AlarmThresholdDTO(alarm); + } + return thresholdDTO; + } + + @Override + public void checkAndUpdate(AlarmThreshold threshold) { + QueryWrapper query = new QueryWrapper<>(); + this.baseMapper.delete(query); + save(threshold); + } +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java index 85304f0..8d17218 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java @@ -8,57 +8,54 @@ import lombok.Data; /** - * 报警阈值 + * 报警 * * @author a203 */ @Data -@TableName("alarm_threshold") +@TableName("bus_alarm") public class Alarm extends Model { private static final long serialVersionUID = 1L; /** * 数据库主键 - *

- * type = IdType.AUTO 是数据库自增 */ - @TableId(value = "ID", type = IdType.AUTO) - private Integer id; + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; /** - * 台风与方舱和机器人的距离 + * 机器人ID */ - @TableField("TYPHOON_DIS") - private Double typhoonDistance; + @TableField(value = "ROBOT_ID") + private String robotId; /** - * 台风风速 + * 报警类型(台风与方舱和机器人的距离,台风风速,船舶与机器人的距离,机器人电量,机器人与方舱之间的距离,通信信号强度) */ - @TableField("TYPHOON_SPEED") - private Double typhoonSpeed; + @TableField("ALARM_TYPE") + private String alarmType; /** - * 船舶与机器人的距离 + * 报警类型(台风与方舱和机器人的距离,台风风速,船舶与机器人的距离,机器人电量,机器人与方舱之间的距离,通信信号强度) */ - @TableField("SHIP_DIS") - private Double shipDistance; + @TableField("ALARM_TYPE_NAME") + private String alarmTypeName; /** - * 机器人电量 + * 报警内容 */ - @TableField("ROBOT_BATTERY") - private Double robotBattery; + @TableField("ALARM_CONTENT") + private String alarmContent; /** - * 机器人与方舱之间的距离 + * 报警数值 */ - @TableField("ROBOT_DIS") - private Double robotDistance; + @TableField("ALARM_VALUE") + private Double alarmValue; /** - * 通信信号强度 - * 不能用 SIGNAL/signal 关键字,会报错 + * 报警时间 */ - @TableField("SATELLITE_SIGNAL") - private Integer satelliteSignal; + @TableField("ALARM_TIME") + private String alarmTime; } diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/AlarmThreshold.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/AlarmThreshold.java new file mode 100644 index 0000000..49b01fd --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/AlarmThreshold.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * 报警阈值 + * + * @author a203 + */ +@Data +@TableName("bus_alarm_threshold") +public class AlarmThreshold extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Integer id; + + /** + * 台风与方舱和机器人的距离 + */ + @TableField("TYPHOON_DIS") + private Double typhoonDistance; + + /** + * 台风风速 + */ + @TableField("TYPHOON_SPEED") + private Double typhoonSpeed; + + /** + * 船舶与机器人的距离 + */ + @TableField("SHIP_DIS") + private Double shipDistance; + + /** + * 机器人电量 + */ + @TableField("ROBOT_BATTERY") + private Double robotBattery; + + /** + * 机器人与方舱之间的距离 + */ + @TableField("ROBOT_DIS") + private Double robotDistance; + + /** + * 通信信号强度 + * 不能用 SIGNAL/signal 关键字,会报错 + */ + @TableField("SATELLITE_SIGNAL") + private Integer satelliteSignal; +} diff --git a/casic-alarm/pom.xml b/casic-alarm/pom.xml index 07ae89f..7730c5f 100644 --- a/casic-alarm/pom.xml +++ b/casic-alarm/pom.xml @@ -40,6 +40,16 @@ casic-server-support 1.0.0 + + com.casic + casic-environment + ${pro.version} + + + com.casic + casic-shelter + ${pro.version} + com.alibaba diff --git a/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java new file mode 100644 index 0000000..a900c5a --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/job/AlarmQuartzJob.java @@ -0,0 +1,25 @@ +package com.casic.missiles.job; + +import com.casic.missiles.modular.system.service.IAlarmService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * 定时查看是否环境数据,确定是否有报警 + * + * @author a203 + */ +@Component +public class AlarmQuartzJob { + + private final IAlarmService alarmService; + + public AlarmQuartzJob(IAlarmService alarmService) { + this.alarmService = alarmService; + } + + @Scheduled(cron = "0 0 */1 * * ?") + public void execute() { + alarmService.checkAndSave(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java index 4515ca4..1bb8a74 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/AlarmController.java @@ -1,12 +1,19 @@ package com.casic.missiles.modular.system.controller; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.modular.system.dto.AlarmDTO; -import com.casic.missiles.modular.system.model.Alarm; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 报警阈值设置控制器 * @@ -14,10 +21,13 @@ */ @Controller @RequestMapping("/alarm") -public class AlarmController { +public class AlarmController extends BaseController { + + private final IAlarmThresholdService thresholdService; private final IAlarmService alarmService; - public AlarmController(IAlarmService alarmService) { + public AlarmController(IAlarmThresholdService thresholdService, IAlarmService alarmService) { + this.thresholdService = thresholdService; this.alarmService = alarmService; } @@ -27,8 +37,8 @@ @GetMapping(value = "/recentValue") @ResponseBody public Object recentValue() { - AlarmDTO alarmDTO = alarmService.recentValue(); - return ResponseData.success(alarmDTO); + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + return ResponseData.success(thresholdDTO); } /** @@ -36,8 +46,20 @@ */ @PostMapping(value = "/update") @ResponseBody - public Object update(@RequestBody Alarm alarm) { - alarmService.checkAndUpdate(alarm); + public Object update(@RequestBody AlarmThreshold threshold) { + thresholdService.checkAndUpdate(threshold); return ResponseData.success(); } + + /** + * 报警记录-分页 + */ + @GetMapping(value = "/alarmRecordsPage") + @ResponseBody + public Object alarmRecordsPage(String startDate, String endDate) { + Page page = PageFactory.defaultPage(); + List list = alarmService.selectAlarmRecordsPage(startDate, endDate, page); + page.setRecords(list); + return ResponseData.success(super.packForBT(page)); + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java index a8f63fe..6168d53 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmMapper.java @@ -2,13 +2,30 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** - * 报警数据信息 Mapper 接口 + * 报警记录 Mapper 接口 * * @author a203 */ public interface AlarmMapper extends BaseMapper { + /** + * 获取报警记录-分页 + * + * @param startDate 日期 + * @param endDate 日期 + * @param page 分页 + * @return {@link List} + */ + List selectAlarmRecordsPage( + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("page") Page page); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java new file mode 100644 index 0000000..d6badef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/AlarmThresholdMapper.java @@ -0,0 +1,14 @@ +package com.casic.missiles.modular.system.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * 报警数据信息 Mapper 接口 + * + * @author a203 + */ +public interface AlarmThresholdMapper extends BaseMapper { + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml index fcfa970..bec2a6a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmMapper.xml @@ -2,4 +2,40 @@ + + + + + + + + + + + + + + ID AS id, + ROBOT_ID AS robotId, + ALARM_TYPE AS alarmType, + ALARM_TYPE_NAME AS alarmTypeName, + ALARM_CONTENT AS alarmContent, + ALARM_VALUE AS alarmValue, + ALARM_TIME AS alarmTime + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml new file mode 100644 index 0000000..76c6d2b --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmThresholdMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java index b743eeb..224c865 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmDTO.java @@ -9,41 +9,47 @@ @Data public class AlarmDTO { /** - * 台风与方舱和机器人的距离 + * 数据库主键 */ - private Double typhoonDistance; + private Long id; /** - * 台风风速 + * 机器人ID */ - private Double typhoonSpeed; + private String robotId; /** - * 船舶与机器人的距离 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double shipDistance; + private String alarmType; /** - * 机器人电量 + * 报警类型(台风距离,台风风速,船舶距离,机器人电量,机器人位置,信号强度) */ - private Double robotBattery; + private String alarmTypeName; /** - * 机器人与方舱之间的距离 + * 报警内容 */ - private Double robotDistance; + private String alarmContent; /** - * 通信信号强度 + * 报警数值 */ - private Integer satelliteSignal; + private Double alarmValue; + + /** + * 报警时间 + */ + private String alarmTime; public AlarmDTO(Alarm alarm) { - this.typhoonDistance = alarm.getTyphoonDistance(); - this.typhoonSpeed = alarm.getTyphoonSpeed(); - this.shipDistance = alarm.getShipDistance(); - this.robotBattery = alarm.getRobotBattery(); - this.robotDistance = alarm.getRobotDistance(); - this.satelliteSignal = alarm.getSatelliteSignal(); + this.id = alarm.getId(); + this.robotId = alarm.getRobotId(); + this.alarmValue = alarm.getAlarmValue(); + this.alarmTime = alarm.getAlarmTime(); + this.alarmType = alarm.getAlarmType(); + this.alarmTypeName = alarm.getAlarmTypeName(); + this.alarmContent = alarm.getAlarmContent(); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java new file mode 100644 index 0000000..7183bb7 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dto/AlarmThresholdDTO.java @@ -0,0 +1,49 @@ +package com.casic.missiles.modular.system.dto; + +import com.casic.missiles.modular.system.model.AlarmThreshold; +import lombok.Data; + +/** + * @author a203 + */ +@Data +public class AlarmThresholdDTO { + /** + * 台风与方舱和机器人的距离 + */ + private Double typhoonDistance; + + /** + * 台风风速 + */ + private Double typhoonSpeed; + + /** + * 船舶与机器人的距离 + */ + private Double shipDistance; + + /** + * 机器人电量 + */ + private Double robotBattery; + + /** + * 机器人与方舱之间的距离 + */ + private Double robotDistance; + + /** + * 通信信号强度 + */ + private Integer satelliteSignal; + + public AlarmThresholdDTO(AlarmThreshold threshold) { + this.typhoonDistance = threshold.getTyphoonDistance(); + this.typhoonSpeed = threshold.getTyphoonSpeed(); + this.shipDistance = threshold.getShipDistance(); + this.robotBattery = threshold.getRobotBattery(); + this.robotDistance = threshold.getRobotDistance(); + this.satelliteSignal = threshold.getSatelliteSignal(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java index 8805e02..685f544 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmService.java @@ -1,24 +1,28 @@ package com.casic.missiles.modular.system.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.modular.system.dto.AlarmDTO; import com.casic.missiles.modular.system.model.Alarm; +import java.util.List; + /** * @author a203 */ public interface IAlarmService extends IService { /** - * 获取最新的阈值设置 - * - * @return {@link AlarmDTO} + * 添加报警 */ - AlarmDTO recentValue(); + void checkAndSave(); /** - * 修改报警阈值 + * 获取报警记录-分页 * - * @param alarm 报警阈值对象 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @param page 分页对象 + * @return {@link List} */ - void checkAndUpdate(Alarm alarm); + List selectAlarmRecordsPage(String startDate, String endDate, Page page); } \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java new file mode 100644 index 0000000..9ccfe85 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IAlarmThresholdService.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; + +/** + * @author a203 + */ +public interface IAlarmThresholdService extends IService { + /** + * 获取最新的阈值设置 + * + * @return {@link AlarmThresholdDTO} + */ + AlarmThresholdDTO recentValue(); + + /** + * 修改报警阈值 + * + * @param threshold 报警阈值对象 + */ + void checkAndUpdate(AlarmThreshold threshold); +} \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java index 453a4e4..f5797b9 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmServiceImpl.java @@ -1,36 +1,140 @@ package com.casic.missiles.modular.system.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.modular.system.dao.AlarmMapper; import com.casic.missiles.modular.system.dto.AlarmDTO; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.dto.ShipDTO; +import com.casic.missiles.modular.system.dto.TyphoonDTO; import com.casic.missiles.modular.system.model.Alarm; -import com.casic.missiles.modular.system.service.IAlarmService; +import com.casic.missiles.modular.system.service.*; +import com.casic.missiles.modular.system.utils.EncodeData; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; + /** * @author a203 */ +@Slf4j @Service public class AlarmServiceImpl extends ServiceImpl implements IAlarmService { - public AlarmServiceImpl() { + private final AbstractDictService dictService; + private final IAlarmThresholdService thresholdService; + private final ITyphoonService typhoonService; + private final IShipService shipService; + private final IRobotService robotService; + public AlarmServiceImpl(AbstractDictService dictService, + IAlarmThresholdService thresholdService, + ITyphoonService typhoonService, + IShipService shipService, + IRobotService robotService) { + this.dictService = dictService; + this.thresholdService = thresholdService; + this.typhoonService = typhoonService; + this.shipService = shipService; + this.robotService = robotService; } @Override - public AlarmDTO recentValue() { - AlarmDTO alarmDTO = null; - for (Alarm alarm : list()) { - alarmDTO = new AlarmDTO(alarm); + public void checkAndSave() { + //先从数据库拿到报警阈值 + AlarmThresholdDTO thresholdDTO = thresholdService.recentValue(); + + /** + * 台风数据 + * */ + List typhoonList = typhoonService.currentTyphoonList(); + /** + * 机器人数据 + * */ + List> robotMaps = robotService.robotList(); + + for (Map robotMap : robotMaps) { + String robotId = robotMap.get("robotId"); + double lng = Double.parseDouble(robotMap.get("lng")); + double lat = Double.parseDouble(robotMap.get("lat")); + double powerE = Double.parseDouble(robotMap.get("powerE")); + if (powerE < thresholdDTO.getRobotBattery()) { + //存库 + save(creatAlarm(robotId, "1", "机器人电量低", powerE)); + } + /** + * 船舶数据 + * */ + //直接获取当前机器人阈值范围内的船舶数据没然后再计算距离 + String rng = (lng * 600000) + "," + (lat * 600000) + "," + thresholdDTO.getShipDistance(); + List ships = shipService.shipsInCircle(rng, 30); + for (ShipDTO ship : ships) { + double distance = EncodeData.distance(ship.getLng(), ship.getLat(), lng, lat); + if (distance < thresholdDTO.getShipDistance()) { + save(creatAlarm(robotId, "2", "机器人与船舶距离太近", distance)); + } + } } - return alarmDTO; + + for (TyphoonDTO typhoonDTO : typhoonList) { + double speed = Double.parseDouble(typhoonDTO.getSpeed()); + if (speed > thresholdDTO.getTyphoonSpeed()) { + save(creatAlarm("", "3", "台风风速超过预警值", speed)); + } + //计算台风-机器人之间的距离 + for (Map robotMap : robotMaps) { + String robotId = robotMap.get("robotId"); + double lng = Double.parseDouble(robotMap.get("lng")); + double lat = Double.parseDouble(robotMap.get("lat")); + //计算台风与每一个机器人之间的距离 + double distance = EncodeData.distance(typhoonDTO.getLng(), typhoonDTO.getLat(), lng, lat); + if (distance < thresholdDTO.getTyphoonDistance()) { + save(creatAlarm(robotId, "4", "机器人与台风距离太近", distance)); + } + } + } + + //TODO 计算机器人和方舱的距离-暂无数据 +// for (Map robotMap : robotMaps) { +// String robotId = robotMap.get("robotId"); +// double lng = Double.parseDouble(robotMap.get("lng")); +// double lat = Double.parseDouble(robotMap.get("lat")); +// //计算机器人和方舱的距离-暂无数据 +// double distance = EncodeData.distance(typhoonDTO.getLng(), typhoonDTO.getLat(), lng, lat); +// if (distance < thresholdDTO.getRobotDistance()) { +// save(creatAlarm(robotId, "5", "机器人与方舱距离超过预警值", distance)); +// } +// } + + //通信信号-暂无数据 + save(creatAlarm("", "6", "天通卫星信号弱", 0)); + } + + private Alarm creatAlarm(String robotId, String type, String alarmContent, double alarmValue) { + Alarm alarm = new Alarm(); + alarm.setRobotId(robotId); + alarm.setAlarmType(type); + //读取字典值 + alarm.setAlarmTypeName(dictService.getDictNameByCode("alarmType", type)); + alarm.setAlarmContent(alarmContent); + alarm.setAlarmValue(alarmValue); + + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA); + alarm.setAlarmTime(dateFormat.format(date)); + //TODO 发WebSocket + + return alarm; } @Override - public void checkAndUpdate(Alarm alarm) { - QueryWrapper query = new QueryWrapper<>(); - this.baseMapper.delete(query); - save(alarm); + public List selectAlarmRecordsPage(String startDate, String endDate, Page page) { + return this.baseMapper.selectAlarmRecordsPage(startDate, endDate, page); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java new file mode 100644 index 0000000..9ea96d1 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/AlarmThresholdServiceImpl.java @@ -0,0 +1,36 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.AlarmThresholdMapper; +import com.casic.missiles.modular.system.dto.AlarmThresholdDTO; +import com.casic.missiles.modular.system.model.AlarmThreshold; +import com.casic.missiles.modular.system.service.IAlarmThresholdService; +import org.springframework.stereotype.Service; + +/** + * @author a203 + */ +@Service +public class AlarmThresholdServiceImpl extends ServiceImpl implements IAlarmThresholdService { + + public AlarmThresholdServiceImpl() { + + } + + @Override + public AlarmThresholdDTO recentValue() { + AlarmThresholdDTO thresholdDTO = null; + for (AlarmThreshold alarm : list()) { + thresholdDTO = new AlarmThresholdDTO(alarm); + } + return thresholdDTO; + } + + @Override + public void checkAndUpdate(AlarmThreshold threshold) { + QueryWrapper query = new QueryWrapper<>(); + this.baseMapper.delete(query); + save(threshold); + } +} diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java index 85304f0..8d17218 100644 --- a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/Alarm.java @@ -8,57 +8,54 @@ import lombok.Data; /** - * 报警阈值 + * 报警 * * @author a203 */ @Data -@TableName("alarm_threshold") +@TableName("bus_alarm") public class Alarm extends Model { private static final long serialVersionUID = 1L; /** * 数据库主键 - *

- * type = IdType.AUTO 是数据库自增 */ - @TableId(value = "ID", type = IdType.AUTO) - private Integer id; + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; /** - * 台风与方舱和机器人的距离 + * 机器人ID */ - @TableField("TYPHOON_DIS") - private Double typhoonDistance; + @TableField(value = "ROBOT_ID") + private String robotId; /** - * 台风风速 + * 报警类型(台风与方舱和机器人的距离,台风风速,船舶与机器人的距离,机器人电量,机器人与方舱之间的距离,通信信号强度) */ - @TableField("TYPHOON_SPEED") - private Double typhoonSpeed; + @TableField("ALARM_TYPE") + private String alarmType; /** - * 船舶与机器人的距离 + * 报警类型(台风与方舱和机器人的距离,台风风速,船舶与机器人的距离,机器人电量,机器人与方舱之间的距离,通信信号强度) */ - @TableField("SHIP_DIS") - private Double shipDistance; + @TableField("ALARM_TYPE_NAME") + private String alarmTypeName; /** - * 机器人电量 + * 报警内容 */ - @TableField("ROBOT_BATTERY") - private Double robotBattery; + @TableField("ALARM_CONTENT") + private String alarmContent; /** - * 机器人与方舱之间的距离 + * 报警数值 */ - @TableField("ROBOT_DIS") - private Double robotDistance; + @TableField("ALARM_VALUE") + private Double alarmValue; /** - * 通信信号强度 - * 不能用 SIGNAL/signal 关键字,会报错 + * 报警时间 */ - @TableField("SATELLITE_SIGNAL") - private Integer satelliteSignal; + @TableField("ALARM_TIME") + private String alarmTime; } diff --git a/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/AlarmThreshold.java b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/AlarmThreshold.java new file mode 100644 index 0000000..49b01fd --- /dev/null +++ b/casic-server-support/src/main/java/com/casic/missiles/modular/system/model/AlarmThreshold.java @@ -0,0 +1,64 @@ +package com.casic.missiles.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; + +/** + * 报警阈值 + * + * @author a203 + */ +@Data +@TableName("bus_alarm_threshold") +public class AlarmThreshold extends Model { + private static final long serialVersionUID = 1L; + + /** + * 数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.AUTO) + private Integer id; + + /** + * 台风与方舱和机器人的距离 + */ + @TableField("TYPHOON_DIS") + private Double typhoonDistance; + + /** + * 台风风速 + */ + @TableField("TYPHOON_SPEED") + private Double typhoonSpeed; + + /** + * 船舶与机器人的距离 + */ + @TableField("SHIP_DIS") + private Double shipDistance; + + /** + * 机器人电量 + */ + @TableField("ROBOT_BATTERY") + private Double robotBattery; + + /** + * 机器人与方舱之间的距离 + */ + @TableField("ROBOT_DIS") + private Double robotDistance; + + /** + * 通信信号强度 + * 不能用 SIGNAL/signal 关键字,会报错 + */ + @TableField("SATELLITE_SIGNAL") + private Integer satelliteSignal; +} diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/EncodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/EncodeData.java index 8ac0ba6..0c21182 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/EncodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/EncodeData.java @@ -129,7 +129,7 @@ /** * 经纬度距离计算 */ - private static double distance(double lonA, double latA, double lonB, double latB) { + public static double distance(double lonA, double latA, double lonB, double latB) { double aLng = lnglatToRadian(lonA); double aLat = lnglatToRadian(latA); double bLng = lnglatToRadian(lonB);