diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-rest-api/pom.xml b/casic-rest-api/pom.xml index 0fe0c13..b30bca0 100644 --- a/casic-rest-api/pom.xml +++ b/casic-rest-api/pom.xml @@ -70,6 +70,15 @@ 2.0.0 compile + + io.netty + netty-all + + + org.bouncycastle + bcprov-jdk15on + 1.59 + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-rest-api/pom.xml b/casic-rest-api/pom.xml index 0fe0c13..b30bca0 100644 --- a/casic-rest-api/pom.xml +++ b/casic-rest-api/pom.xml @@ -70,6 +70,15 @@ 2.0.0 compile + + io.netty + netty-all + + + org.bouncycastle + bcprov-jdk15on + 1.59 + diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java new file mode 100644 index 0000000..6f4da3a --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.netty; + +import cn.hutool.core.util.ObjectUtil; +import io.netty.channel.Channel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 全局变量,用于维护设备的登录信息 + */ +@Component +public class DeviceCommon { + + public static volatile ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(500); + public static volatile ConcurrentHashMap devcodeMap = new ConcurrentHashMap<>(); + + + public static Channel getChannelByName(String devCode) { + if (CollectionUtils.isEmpty(devcodeMap)) { + return null; + } + String channelId = devcodeMap.get(devCode); + if (ObjectUtil.isNotEmpty(channelId)) { + return CHANNEL_MAP.get(channelId); + } + return null; + } + + /** + * 将channel和对应的name添加到ConcurrentHashMap + */ + public static void addChannel(String channelId, Channel channel) { + CHANNEL_MAP.put(channelId, channel); + } + + /** + * 移除掉name对应的channel + */ + public static boolean removeChannelByName(String channelId) { + if (CHANNEL_MAP.containsKey(channelId)) { + CHANNEL_MAP.remove(channelId); + if(devcodeMap.containsValue(channelId)){ + devcodeMap.values().removeIf(value->value.equals(channelId)); + } + return true; + } + return false; + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-rest-api/pom.xml b/casic-rest-api/pom.xml index 0fe0c13..b30bca0 100644 --- a/casic-rest-api/pom.xml +++ b/casic-rest-api/pom.xml @@ -70,6 +70,15 @@ 2.0.0 compile + + io.netty + netty-all + + + org.bouncycastle + bcprov-jdk15on + 1.59 + diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java new file mode 100644 index 0000000..6f4da3a --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.netty; + +import cn.hutool.core.util.ObjectUtil; +import io.netty.channel.Channel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 全局变量,用于维护设备的登录信息 + */ +@Component +public class DeviceCommon { + + public static volatile ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(500); + public static volatile ConcurrentHashMap devcodeMap = new ConcurrentHashMap<>(); + + + public static Channel getChannelByName(String devCode) { + if (CollectionUtils.isEmpty(devcodeMap)) { + return null; + } + String channelId = devcodeMap.get(devCode); + if (ObjectUtil.isNotEmpty(channelId)) { + return CHANNEL_MAP.get(channelId); + } + return null; + } + + /** + * 将channel和对应的name添加到ConcurrentHashMap + */ + public static void addChannel(String channelId, Channel channel) { + CHANNEL_MAP.put(channelId, channel); + } + + /** + * 移除掉name对应的channel + */ + public static boolean removeChannelByName(String channelId) { + if (CHANNEL_MAP.containsKey(channelId)) { + CHANNEL_MAP.remove(channelId); + if(devcodeMap.containsValue(channelId)){ + devcodeMap.values().removeIf(value->value.equals(channelId)); + } + return true; + } + return false; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java new file mode 100644 index 0000000..e2c7cdb --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.Charset; +import java.util.List; + +/** + * @description: 将从接口取到的数据编码 + * @author: Stone + * @create: 2019-01-11 15:15 + **/ +@Slf4j +public class HjtDecoder extends MessageToMessageDecoder { + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { + log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); + out.add(msg.toString(Charset.defaultCharset())); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-rest-api/pom.xml b/casic-rest-api/pom.xml index 0fe0c13..b30bca0 100644 --- a/casic-rest-api/pom.xml +++ b/casic-rest-api/pom.xml @@ -70,6 +70,15 @@ 2.0.0 compile + + io.netty + netty-all + + + org.bouncycastle + bcprov-jdk15on + 1.59 + diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java new file mode 100644 index 0000000..6f4da3a --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.netty; + +import cn.hutool.core.util.ObjectUtil; +import io.netty.channel.Channel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 全局变量,用于维护设备的登录信息 + */ +@Component +public class DeviceCommon { + + public static volatile ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(500); + public static volatile ConcurrentHashMap devcodeMap = new ConcurrentHashMap<>(); + + + public static Channel getChannelByName(String devCode) { + if (CollectionUtils.isEmpty(devcodeMap)) { + return null; + } + String channelId = devcodeMap.get(devCode); + if (ObjectUtil.isNotEmpty(channelId)) { + return CHANNEL_MAP.get(channelId); + } + return null; + } + + /** + * 将channel和对应的name添加到ConcurrentHashMap + */ + public static void addChannel(String channelId, Channel channel) { + CHANNEL_MAP.put(channelId, channel); + } + + /** + * 移除掉name对应的channel + */ + public static boolean removeChannelByName(String channelId) { + if (CHANNEL_MAP.containsKey(channelId)) { + CHANNEL_MAP.remove(channelId); + if(devcodeMap.containsValue(channelId)){ + devcodeMap.values().removeIf(value->value.equals(channelId)); + } + return true; + } + return false; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java new file mode 100644 index 0000000..e2c7cdb --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.Charset; +import java.util.List; + +/** + * @description: 将从接口取到的数据编码 + * @author: Stone + * @create: 2019-01-11 15:15 + **/ +@Slf4j +public class HjtDecoder extends MessageToMessageDecoder { + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { + log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); + out.add(msg.toString(Charset.defaultCharset())); + } +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java new file mode 100644 index 0000000..993a9bf --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.netty; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; + +@Component +public class NettyServer { + + //负责处理接受进来的链接 + private EventLoopGroup bossGroup; + //负责处理已经被接收的连接上的I/O操作 + private EventLoopGroup workerGroup; + //在这个场景中,它表示服务器的绑定操作的结果 + private ChannelFuture future; + + @EventListener(ApplicationStartedEvent.class) + public void startServer() throws Exception { + bossGroup = new NioEventLoopGroup(); + workerGroup = new NioEventLoopGroup(); + try { + //创建ServerBootstrap,这个类封装了服务器端的网络配置,使得我们可以轻松地设置服务器参数 + ServerBootstrap bootstrap = new ServerBootstrap(); + bootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler(new NettyServerInitializer()) + .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .option(ChannelOption.SO_BACKLOG, 1024) // 设置的ServerChannel的一些选项 + .childOption(ChannelOption.SO_KEEPALIVE, true); + + // 绑定端口并开始接受进来的连接 + future = bootstrap.bind(7000).sync(); + + // 等待服务器套接字关闭 + future.channel().closeFuture().sync(); + } finally { + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } + } + + @PreDestroy + public void stopServer() { + if (future != null && !future.isDone()) { + future.cancel(true); + } + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } +} \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-rest-api/pom.xml b/casic-rest-api/pom.xml index 0fe0c13..b30bca0 100644 --- a/casic-rest-api/pom.xml +++ b/casic-rest-api/pom.xml @@ -70,6 +70,15 @@ 2.0.0 compile + + io.netty + netty-all + + + org.bouncycastle + bcprov-jdk15on + 1.59 + diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java new file mode 100644 index 0000000..6f4da3a --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.netty; + +import cn.hutool.core.util.ObjectUtil; +import io.netty.channel.Channel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 全局变量,用于维护设备的登录信息 + */ +@Component +public class DeviceCommon { + + public static volatile ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(500); + public static volatile ConcurrentHashMap devcodeMap = new ConcurrentHashMap<>(); + + + public static Channel getChannelByName(String devCode) { + if (CollectionUtils.isEmpty(devcodeMap)) { + return null; + } + String channelId = devcodeMap.get(devCode); + if (ObjectUtil.isNotEmpty(channelId)) { + return CHANNEL_MAP.get(channelId); + } + return null; + } + + /** + * 将channel和对应的name添加到ConcurrentHashMap + */ + public static void addChannel(String channelId, Channel channel) { + CHANNEL_MAP.put(channelId, channel); + } + + /** + * 移除掉name对应的channel + */ + public static boolean removeChannelByName(String channelId) { + if (CHANNEL_MAP.containsKey(channelId)) { + CHANNEL_MAP.remove(channelId); + if(devcodeMap.containsValue(channelId)){ + devcodeMap.values().removeIf(value->value.equals(channelId)); + } + return true; + } + return false; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java new file mode 100644 index 0000000..e2c7cdb --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.Charset; +import java.util.List; + +/** + * @description: 将从接口取到的数据编码 + * @author: Stone + * @create: 2019-01-11 15:15 + **/ +@Slf4j +public class HjtDecoder extends MessageToMessageDecoder { + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { + log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); + out.add(msg.toString(Charset.defaultCharset())); + } +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java new file mode 100644 index 0000000..993a9bf --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.netty; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; + +@Component +public class NettyServer { + + //负责处理接受进来的链接 + private EventLoopGroup bossGroup; + //负责处理已经被接收的连接上的I/O操作 + private EventLoopGroup workerGroup; + //在这个场景中,它表示服务器的绑定操作的结果 + private ChannelFuture future; + + @EventListener(ApplicationStartedEvent.class) + public void startServer() throws Exception { + bossGroup = new NioEventLoopGroup(); + workerGroup = new NioEventLoopGroup(); + try { + //创建ServerBootstrap,这个类封装了服务器端的网络配置,使得我们可以轻松地设置服务器参数 + ServerBootstrap bootstrap = new ServerBootstrap(); + bootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler(new NettyServerInitializer()) + .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .option(ChannelOption.SO_BACKLOG, 1024) // 设置的ServerChannel的一些选项 + .childOption(ChannelOption.SO_KEEPALIVE, true); + + // 绑定端口并开始接受进来的连接 + future = bootstrap.bind(7000).sync(); + + // 等待服务器套接字关闭 + future.channel().closeFuture().sync(); + } finally { + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } + } + + @PreDestroy + public void stopServer() { + if (future != null && !future.isDone()) { + future.cancel(true); + } + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java new file mode 100644 index 0000000..43780ea --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.netty; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.codec.string.StringEncoder; +import io.netty.util.CharsetUtil; + +import java.nio.charset.StandardCharsets; + +public class NettyServerInitializer extends ChannelInitializer { + + @Override + protected void initChannel(SocketChannel ch) { + ChannelPipeline pipeline = ch.pipeline(); + + // 添加一个字符串解码器,用于将接收到的ByteBuf转换成字符串 + // 这里假设使用的是UTF-8字符集 + pipeline.addLast("decoder", new StringDecoder(StandardCharsets.UTF_8)); + + // 添加一个字符串编码器,用于将发送的字符串转换成ByteBuf + // 这样服务器发送字符串时,客户端可以直接接收到字符串 + pipeline.addLast("encoder", new StringEncoder(StandardCharsets.UTF_8)); + + // 添加自定义的ChannelInboundHandlerAdapter来处理业务逻辑 + pipeline.addLast("handler", new PanTiltChannelHandler()); + } +} \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-rest-api/pom.xml b/casic-rest-api/pom.xml index 0fe0c13..b30bca0 100644 --- a/casic-rest-api/pom.xml +++ b/casic-rest-api/pom.xml @@ -70,6 +70,15 @@ 2.0.0 compile + + io.netty + netty-all + + + org.bouncycastle + bcprov-jdk15on + 1.59 + diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java new file mode 100644 index 0000000..6f4da3a --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.netty; + +import cn.hutool.core.util.ObjectUtil; +import io.netty.channel.Channel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 全局变量,用于维护设备的登录信息 + */ +@Component +public class DeviceCommon { + + public static volatile ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(500); + public static volatile ConcurrentHashMap devcodeMap = new ConcurrentHashMap<>(); + + + public static Channel getChannelByName(String devCode) { + if (CollectionUtils.isEmpty(devcodeMap)) { + return null; + } + String channelId = devcodeMap.get(devCode); + if (ObjectUtil.isNotEmpty(channelId)) { + return CHANNEL_MAP.get(channelId); + } + return null; + } + + /** + * 将channel和对应的name添加到ConcurrentHashMap + */ + public static void addChannel(String channelId, Channel channel) { + CHANNEL_MAP.put(channelId, channel); + } + + /** + * 移除掉name对应的channel + */ + public static boolean removeChannelByName(String channelId) { + if (CHANNEL_MAP.containsKey(channelId)) { + CHANNEL_MAP.remove(channelId); + if(devcodeMap.containsValue(channelId)){ + devcodeMap.values().removeIf(value->value.equals(channelId)); + } + return true; + } + return false; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java new file mode 100644 index 0000000..e2c7cdb --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.Charset; +import java.util.List; + +/** + * @description: 将从接口取到的数据编码 + * @author: Stone + * @create: 2019-01-11 15:15 + **/ +@Slf4j +public class HjtDecoder extends MessageToMessageDecoder { + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { + log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); + out.add(msg.toString(Charset.defaultCharset())); + } +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java new file mode 100644 index 0000000..993a9bf --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.netty; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; + +@Component +public class NettyServer { + + //负责处理接受进来的链接 + private EventLoopGroup bossGroup; + //负责处理已经被接收的连接上的I/O操作 + private EventLoopGroup workerGroup; + //在这个场景中,它表示服务器的绑定操作的结果 + private ChannelFuture future; + + @EventListener(ApplicationStartedEvent.class) + public void startServer() throws Exception { + bossGroup = new NioEventLoopGroup(); + workerGroup = new NioEventLoopGroup(); + try { + //创建ServerBootstrap,这个类封装了服务器端的网络配置,使得我们可以轻松地设置服务器参数 + ServerBootstrap bootstrap = new ServerBootstrap(); + bootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler(new NettyServerInitializer()) + .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .option(ChannelOption.SO_BACKLOG, 1024) // 设置的ServerChannel的一些选项 + .childOption(ChannelOption.SO_KEEPALIVE, true); + + // 绑定端口并开始接受进来的连接 + future = bootstrap.bind(7000).sync(); + + // 等待服务器套接字关闭 + future.channel().closeFuture().sync(); + } finally { + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } + } + + @PreDestroy + public void stopServer() { + if (future != null && !future.isDone()) { + future.cancel(true); + } + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java new file mode 100644 index 0000000..43780ea --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.netty; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.codec.string.StringEncoder; +import io.netty.util.CharsetUtil; + +import java.nio.charset.StandardCharsets; + +public class NettyServerInitializer extends ChannelInitializer { + + @Override + protected void initChannel(SocketChannel ch) { + ChannelPipeline pipeline = ch.pipeline(); + + // 添加一个字符串解码器,用于将接收到的ByteBuf转换成字符串 + // 这里假设使用的是UTF-8字符集 + pipeline.addLast("decoder", new StringDecoder(StandardCharsets.UTF_8)); + + // 添加一个字符串编码器,用于将发送的字符串转换成ByteBuf + // 这样服务器发送字符串时,客户端可以直接接收到字符串 + pipeline.addLast("encoder", new StringEncoder(StandardCharsets.UTF_8)); + + // 添加自定义的ChannelInboundHandlerAdapter来处理业务逻辑 + pipeline.addLast("handler", new PanTiltChannelHandler()); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java new file mode 100644 index 0000000..fbdc1c9 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java @@ -0,0 +1,69 @@ +package com.casic.missiles.modular.netty; + + +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; + +import java.nio.charset.StandardCharsets; + +public class PanTiltChannelHandler extends ChannelInboundHandlerAdapter { + //保留所有与服务器建立连接的channel对象,这边的GlobalEventExecutor在写博客的时候解释一下,看其doc +// private static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); + + /** + * 服务器端收到任何一个客户端的消息都会触发这个方法 + * 连接的客户端向服务器端发送消息,那么其他客户端都收到此消息,自己收到【自己】+消息 + */ + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + super.channelRead(ctx, msg); + Channel channel = ctx.channel(); + channel.writeAndFlush(Unpooled.copiedBuffer(msg.toString().getBytes(StandardCharsets.UTF_8))); + String devCode = "1231313123"; + DeviceCommon.devcodeMap.put(devCode,channel.id().asLongText()); + } + + //表示服务端与客户端连接建立 + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); //其实相当于一个connection + + /** + * 调用channelGroup的writeAndFlush其实就相当于channelGroup中的每个channel都writeAndFlush + * + * 先去广播,再将自己加入到channelGroup中 + */ +// channelGroup.writeAndFlush(" 【服务器】 -" + channel.remoteAddress() + " 加入\n"); +// channelGroup.add(channel); + DeviceCommon.addChannel(channel.id().asLongText(),channel); + + } + + @Override + public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + DeviceCommon.removeChannelByName(channel.id().asLongText()); + } + + //连接处于活动状态 + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 上线了"); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 下线了"); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + cause.printStackTrace(); + ctx.close(); + } + +} \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-rest-api/pom.xml b/casic-rest-api/pom.xml index 0fe0c13..b30bca0 100644 --- a/casic-rest-api/pom.xml +++ b/casic-rest-api/pom.xml @@ -70,6 +70,15 @@ 2.0.0 compile + + io.netty + netty-all + + + org.bouncycastle + bcprov-jdk15on + 1.59 + diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java new file mode 100644 index 0000000..6f4da3a --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.netty; + +import cn.hutool.core.util.ObjectUtil; +import io.netty.channel.Channel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 全局变量,用于维护设备的登录信息 + */ +@Component +public class DeviceCommon { + + public static volatile ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(500); + public static volatile ConcurrentHashMap devcodeMap = new ConcurrentHashMap<>(); + + + public static Channel getChannelByName(String devCode) { + if (CollectionUtils.isEmpty(devcodeMap)) { + return null; + } + String channelId = devcodeMap.get(devCode); + if (ObjectUtil.isNotEmpty(channelId)) { + return CHANNEL_MAP.get(channelId); + } + return null; + } + + /** + * 将channel和对应的name添加到ConcurrentHashMap + */ + public static void addChannel(String channelId, Channel channel) { + CHANNEL_MAP.put(channelId, channel); + } + + /** + * 移除掉name对应的channel + */ + public static boolean removeChannelByName(String channelId) { + if (CHANNEL_MAP.containsKey(channelId)) { + CHANNEL_MAP.remove(channelId); + if(devcodeMap.containsValue(channelId)){ + devcodeMap.values().removeIf(value->value.equals(channelId)); + } + return true; + } + return false; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java new file mode 100644 index 0000000..e2c7cdb --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.Charset; +import java.util.List; + +/** + * @description: 将从接口取到的数据编码 + * @author: Stone + * @create: 2019-01-11 15:15 + **/ +@Slf4j +public class HjtDecoder extends MessageToMessageDecoder { + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { + log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); + out.add(msg.toString(Charset.defaultCharset())); + } +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java new file mode 100644 index 0000000..993a9bf --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.netty; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; + +@Component +public class NettyServer { + + //负责处理接受进来的链接 + private EventLoopGroup bossGroup; + //负责处理已经被接收的连接上的I/O操作 + private EventLoopGroup workerGroup; + //在这个场景中,它表示服务器的绑定操作的结果 + private ChannelFuture future; + + @EventListener(ApplicationStartedEvent.class) + public void startServer() throws Exception { + bossGroup = new NioEventLoopGroup(); + workerGroup = new NioEventLoopGroup(); + try { + //创建ServerBootstrap,这个类封装了服务器端的网络配置,使得我们可以轻松地设置服务器参数 + ServerBootstrap bootstrap = new ServerBootstrap(); + bootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler(new NettyServerInitializer()) + .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .option(ChannelOption.SO_BACKLOG, 1024) // 设置的ServerChannel的一些选项 + .childOption(ChannelOption.SO_KEEPALIVE, true); + + // 绑定端口并开始接受进来的连接 + future = bootstrap.bind(7000).sync(); + + // 等待服务器套接字关闭 + future.channel().closeFuture().sync(); + } finally { + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } + } + + @PreDestroy + public void stopServer() { + if (future != null && !future.isDone()) { + future.cancel(true); + } + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java new file mode 100644 index 0000000..43780ea --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.netty; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.codec.string.StringEncoder; +import io.netty.util.CharsetUtil; + +import java.nio.charset.StandardCharsets; + +public class NettyServerInitializer extends ChannelInitializer { + + @Override + protected void initChannel(SocketChannel ch) { + ChannelPipeline pipeline = ch.pipeline(); + + // 添加一个字符串解码器,用于将接收到的ByteBuf转换成字符串 + // 这里假设使用的是UTF-8字符集 + pipeline.addLast("decoder", new StringDecoder(StandardCharsets.UTF_8)); + + // 添加一个字符串编码器,用于将发送的字符串转换成ByteBuf + // 这样服务器发送字符串时,客户端可以直接接收到字符串 + pipeline.addLast("encoder", new StringEncoder(StandardCharsets.UTF_8)); + + // 添加自定义的ChannelInboundHandlerAdapter来处理业务逻辑 + pipeline.addLast("handler", new PanTiltChannelHandler()); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java new file mode 100644 index 0000000..fbdc1c9 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java @@ -0,0 +1,69 @@ +package com.casic.missiles.modular.netty; + + +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; + +import java.nio.charset.StandardCharsets; + +public class PanTiltChannelHandler extends ChannelInboundHandlerAdapter { + //保留所有与服务器建立连接的channel对象,这边的GlobalEventExecutor在写博客的时候解释一下,看其doc +// private static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); + + /** + * 服务器端收到任何一个客户端的消息都会触发这个方法 + * 连接的客户端向服务器端发送消息,那么其他客户端都收到此消息,自己收到【自己】+消息 + */ + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + super.channelRead(ctx, msg); + Channel channel = ctx.channel(); + channel.writeAndFlush(Unpooled.copiedBuffer(msg.toString().getBytes(StandardCharsets.UTF_8))); + String devCode = "1231313123"; + DeviceCommon.devcodeMap.put(devCode,channel.id().asLongText()); + } + + //表示服务端与客户端连接建立 + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); //其实相当于一个connection + + /** + * 调用channelGroup的writeAndFlush其实就相当于channelGroup中的每个channel都writeAndFlush + * + * 先去广播,再将自己加入到channelGroup中 + */ +// channelGroup.writeAndFlush(" 【服务器】 -" + channel.remoteAddress() + " 加入\n"); +// channelGroup.add(channel); + DeviceCommon.addChannel(channel.id().asLongText(),channel); + + } + + @Override + public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + DeviceCommon.removeChannelByName(channel.id().asLongText()); + } + + //连接处于活动状态 + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 上线了"); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 下线了"); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + cause.printStackTrace(); + ctx.close(); + } + +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java new file mode 100644 index 0000000..371b940 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.netty; + +import com.casic.missiles.core.base.controller.ExportController; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.nio.charset.StandardCharsets; + +@Api(tags = "test") +@RequiredArgsConstructor +@RestController +@RequestMapping("/test") +public class TestController extends ExportController { + @PostMapping("/test") + public void repairLog() { + Channel channel = DeviceCommon.getChannelByName("1231313123"); + channel.writeAndFlush(Unpooled.copiedBuffer("send command".getBytes(StandardCharsets.UTF_8))); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-rest-api/pom.xml b/casic-rest-api/pom.xml index 0fe0c13..b30bca0 100644 --- a/casic-rest-api/pom.xml +++ b/casic-rest-api/pom.xml @@ -70,6 +70,15 @@ 2.0.0 compile + + io.netty + netty-all + + + org.bouncycastle + bcprov-jdk15on + 1.59 + diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java new file mode 100644 index 0000000..6f4da3a --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.netty; + +import cn.hutool.core.util.ObjectUtil; +import io.netty.channel.Channel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 全局变量,用于维护设备的登录信息 + */ +@Component +public class DeviceCommon { + + public static volatile ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(500); + public static volatile ConcurrentHashMap devcodeMap = new ConcurrentHashMap<>(); + + + public static Channel getChannelByName(String devCode) { + if (CollectionUtils.isEmpty(devcodeMap)) { + return null; + } + String channelId = devcodeMap.get(devCode); + if (ObjectUtil.isNotEmpty(channelId)) { + return CHANNEL_MAP.get(channelId); + } + return null; + } + + /** + * 将channel和对应的name添加到ConcurrentHashMap + */ + public static void addChannel(String channelId, Channel channel) { + CHANNEL_MAP.put(channelId, channel); + } + + /** + * 移除掉name对应的channel + */ + public static boolean removeChannelByName(String channelId) { + if (CHANNEL_MAP.containsKey(channelId)) { + CHANNEL_MAP.remove(channelId); + if(devcodeMap.containsValue(channelId)){ + devcodeMap.values().removeIf(value->value.equals(channelId)); + } + return true; + } + return false; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java new file mode 100644 index 0000000..e2c7cdb --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.Charset; +import java.util.List; + +/** + * @description: 将从接口取到的数据编码 + * @author: Stone + * @create: 2019-01-11 15:15 + **/ +@Slf4j +public class HjtDecoder extends MessageToMessageDecoder { + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { + log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); + out.add(msg.toString(Charset.defaultCharset())); + } +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java new file mode 100644 index 0000000..993a9bf --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.netty; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; + +@Component +public class NettyServer { + + //负责处理接受进来的链接 + private EventLoopGroup bossGroup; + //负责处理已经被接收的连接上的I/O操作 + private EventLoopGroup workerGroup; + //在这个场景中,它表示服务器的绑定操作的结果 + private ChannelFuture future; + + @EventListener(ApplicationStartedEvent.class) + public void startServer() throws Exception { + bossGroup = new NioEventLoopGroup(); + workerGroup = new NioEventLoopGroup(); + try { + //创建ServerBootstrap,这个类封装了服务器端的网络配置,使得我们可以轻松地设置服务器参数 + ServerBootstrap bootstrap = new ServerBootstrap(); + bootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler(new NettyServerInitializer()) + .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .option(ChannelOption.SO_BACKLOG, 1024) // 设置的ServerChannel的一些选项 + .childOption(ChannelOption.SO_KEEPALIVE, true); + + // 绑定端口并开始接受进来的连接 + future = bootstrap.bind(7000).sync(); + + // 等待服务器套接字关闭 + future.channel().closeFuture().sync(); + } finally { + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } + } + + @PreDestroy + public void stopServer() { + if (future != null && !future.isDone()) { + future.cancel(true); + } + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java new file mode 100644 index 0000000..43780ea --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.netty; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.codec.string.StringEncoder; +import io.netty.util.CharsetUtil; + +import java.nio.charset.StandardCharsets; + +public class NettyServerInitializer extends ChannelInitializer { + + @Override + protected void initChannel(SocketChannel ch) { + ChannelPipeline pipeline = ch.pipeline(); + + // 添加一个字符串解码器,用于将接收到的ByteBuf转换成字符串 + // 这里假设使用的是UTF-8字符集 + pipeline.addLast("decoder", new StringDecoder(StandardCharsets.UTF_8)); + + // 添加一个字符串编码器,用于将发送的字符串转换成ByteBuf + // 这样服务器发送字符串时,客户端可以直接接收到字符串 + pipeline.addLast("encoder", new StringEncoder(StandardCharsets.UTF_8)); + + // 添加自定义的ChannelInboundHandlerAdapter来处理业务逻辑 + pipeline.addLast("handler", new PanTiltChannelHandler()); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java new file mode 100644 index 0000000..fbdc1c9 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java @@ -0,0 +1,69 @@ +package com.casic.missiles.modular.netty; + + +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; + +import java.nio.charset.StandardCharsets; + +public class PanTiltChannelHandler extends ChannelInboundHandlerAdapter { + //保留所有与服务器建立连接的channel对象,这边的GlobalEventExecutor在写博客的时候解释一下,看其doc +// private static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); + + /** + * 服务器端收到任何一个客户端的消息都会触发这个方法 + * 连接的客户端向服务器端发送消息,那么其他客户端都收到此消息,自己收到【自己】+消息 + */ + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + super.channelRead(ctx, msg); + Channel channel = ctx.channel(); + channel.writeAndFlush(Unpooled.copiedBuffer(msg.toString().getBytes(StandardCharsets.UTF_8))); + String devCode = "1231313123"; + DeviceCommon.devcodeMap.put(devCode,channel.id().asLongText()); + } + + //表示服务端与客户端连接建立 + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); //其实相当于一个connection + + /** + * 调用channelGroup的writeAndFlush其实就相当于channelGroup中的每个channel都writeAndFlush + * + * 先去广播,再将自己加入到channelGroup中 + */ +// channelGroup.writeAndFlush(" 【服务器】 -" + channel.remoteAddress() + " 加入\n"); +// channelGroup.add(channel); + DeviceCommon.addChannel(channel.id().asLongText(),channel); + + } + + @Override + public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + DeviceCommon.removeChannelByName(channel.id().asLongText()); + } + + //连接处于活动状态 + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 上线了"); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 下线了"); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + cause.printStackTrace(); + ctx.close(); + } + +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java new file mode 100644 index 0000000..371b940 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.netty; + +import com.casic.missiles.core.base.controller.ExportController; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.nio.charset.StandardCharsets; + +@Api(tags = "test") +@RequiredArgsConstructor +@RestController +@RequestMapping("/test") +public class TestController extends ExportController { + @PostMapping("/test") + public void repairLog() { + Channel channel = DeviceCommon.getChannelByName("1231313123"); + channel.writeAndFlush(Unpooled.copiedBuffer("send command".getBytes(StandardCharsets.UTF_8))); + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java new file mode 100644 index 0000000..6b560ec --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java @@ -0,0 +1,496 @@ +package com.casic.missiles.modular.util; + +import org.springframework.stereotype.Component; + +@Component +public class ByteUtil { + + /* BCD码转换为数值或字符 */ + + /** + * 单一字节中选择指定位bcd码转换为整数 + * 如ByteUtil.bcdToInt((byte) 0x33, 5, 4) = 3 + * + * @param b + * @param highBit 高位,最大7 + * @param lowBit 低位,从0开始 + * @return + */ + public static int bcdToInt(byte b, int highBit, int lowBit) { + int g = highBit - lowBit + 1; + int a = ((int) Math.pow(2, g) - 1) << lowBit; + int b2 = (b & a) >> lowBit; + if (b2 < 0 || b2 >= 10) { + return -1; + } + return b2; + } + + /** + * bcd码转换为整数 错误则返回-1 + * 如ByteUtil.bcdToInt((byte) 0x73) = 73 + * + * @param b 输入字节,默认4位一组,先高后低 + * @return + */ + public static int bcdToInt(byte b) { + int pl = 0x0f; + int ph = 0xf0; + + int h = (ph & b) >> 4; + int l = (pl & b); + + if (h >= 10 || l >= 10) { + return -1; + } + return h * 10 + l; + } + + /** + * bcd码转换为long型整数 + * 如字节数组{0x25, 0x23}转换为2523 + * + * @param + * @return + */ + public static long bcdToLong(byte[] bytes) { + if (ByteUtil.bcdToString(bytes).equals("") == false) + return Long.valueOf(ByteUtil.bcdToString(bytes)).longValue(); + else + return -1; + } + + + /** + * bcd码转换为字符串 按字节顺序 高位在前低位在后 + * 如字节数组{0x01, 0x02, 0x03}转换为"010203" + * + * @param bytes + * @return + */ + public static String bcdToString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + if (ByteUtil.bcdToInt(bytes[i], 7, 4) != -1 && ByteUtil.bcdToInt(bytes[i], 3, 0) != -1) { + sb.append(ByteUtil.bcdToInt(bytes[i], 7, 4)); + sb.append(ByteUtil.bcdToInt(bytes[i], 3, 0)); + } + } + + return sb.toString(); + } + + + /* BIN码转换为数值或字符 */ + + /** + * 单一字节中选择指定位bin码转换为整数 + * 如ByteUtil.binToInt((byte) 0xA3, 7, 7) = 1 + * + * @param b + * @param highBit 高位,最大7 + * @param lowBit 低位,从0开始 + * @return + */ + public static int binToInt(byte b, int highBit, int lowBit) throws RuntimeException { + int g = highBit - lowBit + 1; + int a = ((int) Math.pow(2, g) - 1) << lowBit; + int b2 = (b & a) >> lowBit; + if (b2 < 0 || b2 >= 16) { + throw new RuntimeException(); + } + return b2; + } + + /** + * BIN字节转换为整数 + * 如ByteUtil.bcdToInt((byte) 0x7B) = 123 + * + * @param b + * @return + */ + public static int binToInt(byte b) { + int i1 = 0x80 & b; + if (i1 == 0x80) { + int i2 = 0x7f & b; + return 128 + i2; + } else { + return b; + } + } + + /** + * BIN码转换为整数 高位在前低位在后 + * 如ByteUtil.bcdToInt(new byte[] {(byte) 0x7B, 0x22}) = 31522 + * + * @param bytes + * @return + */ + public static int binToInt(byte[] bytes) { + int i10 = 0; + if (null != bytes && bytes.length != 0) { + for (int i = 0; i < bytes.length; i++) { + i10 = i10 + new Double(Math.pow(16, (bytes.length - i - 1) * 2)).intValue() * ByteUtil.binToInt(bytes[i]); + } + } + return i10; + } + + /** + * BIN码转换为LONG型整数 高位在前低位在后 + * 如ByteUtil.bcdToLong(new byte[] {(byte) 0x7B, 0x22, 0x32, 0x9A}) = 2065838746 + * + * @param bytes + * @return + */ + public static int binToLong(byte[] bytes) { + int l10 = 0; + if (null != bytes && bytes.length != 0) { + for (int i = 0; i < bytes.length; i++) { + l10 = l10 + new Double(Math.pow(16, (bytes.length - i - 1) * 2)).intValue() * ByteUtil.binToInt(bytes[i]); + } + } + return l10; + } + + /** + * 字节数组转换为16进制字符串 按字节数组顺序转换 + * 如字节数组{0x21, 0x06, 0x01, 0x04, 0x40, (byte) 0xE2, 0x01}转换为"2106010440E201" + * + * @param bytes + * @return + */ + public static String binToHexString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + sb.append(Integer.toHexString(binToInt((byte) ((bytes[i] & 0xf0) >> 4))).toUpperCase()); + sb.append(Integer.toHexString(binToInt((byte) (bytes[i] & 0x0f))).toUpperCase()); + } + + return sb.toString(); + } + + + /** + * BIN输出为二进制字符串 + * 如字节数组{0x01, 0x38}转换为字符串"0000000100111000" + * + * @param bytes + * @return + */ + public static String binToBinString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + String s = Integer.toBinaryString(binToInt(bytes[i])); + while (s.length() < 8) { + s = "0" + s; + } + sb.append(s); + } + + return sb.toString(); + } + + + /* int转换为BCD码或BIN码 */ + /** + * 两位整数转换成一个字节的BCD码 + * 大于100的整数取其十位和个位 十位在前个位在后 + * 如79转换为0x79 + * + * @param i + * @return + */ + public static byte intToBcd(int i) { + byte b = 0x00; + while (i > 99) { + i = i % 100; + } + + int l = i % 10; + int h = i / 10; + + b = (byte) (h << 4 | l); + + return b; + } + + /** + * 整数转换为字节数组 高位在前低位在后 + * 如 2379转换为0x23, 0x79 + * + * @param + * @return + */ + public static byte[] intToBcds(long l) { + String str = String.valueOf(l); + Bytes bytes = new Bytes(); + + if (str.length() % 2 == 1) { + str = "0" + str; + } + + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append(ByteUtil.intToBcd(Integer.parseInt(s))); + } + + return bytes.toBytes(); + } + + /** + * 整数转换为指定字节数的BCD码数组 高位在前低位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0x34, 0x79, 指定6字节转换为0x00, 0x00, 0x03, 0x01, 0x34, 0x79 + * + * @param + * @param length + * @return + */ + public static byte[] intToBcds(long l, int length) { + byte[] bts = intToBcds(l); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + /** + * 整数转换为指定字节数的BCD码数组 低位在前高位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0x79, 0x34, 指定6字节转换为0x79, 0x34, 0x01, 0x03, 0x00, 0x00 + * + * @param + * @param length + * @return + */ + public static byte[] intToBcdsHL(long l, int length) { + Bytes bs = new Bytes(); + + for (int i = 0; i < length; i++) { + int low = (int) (l % 100); + bs.append(ByteUtil.intToBcd(low)); + l = l / 100; + } + + return bs.toBytes(); + } + + /** + * 整数转换为BIN码字节数组 高位在前低位在后 + * 如113479转换为0x01, 0xBB, 0x47 + * + * @param l + * @return + */ + public static byte[] intToBins(long l) { + String str = Long.toHexString(l); + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append((byte) Integer.parseInt(s, 16)); + } + + return bytes.toBytes(); + } + + /** + * 整数转换为指定字节数的BIN码数组 高位在前低位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0xFB, 0x67, 指定6字节转换为0x00, 0x00, 0x00, 0x2D, 0xFB, 0x67 + * + * @param l + * @param length + * @return + */ + public static byte[] intToBins(long l, int length) { + byte[] bts = intToBins(l); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + + /* 16进制字符串转换为字节数组 */ + /** + * 16进制字符串顺序转换为字节数组 + * 如字符串"13810411703"转换为字节数组{0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @return + */ + public static byte[] hexStringToBytes(String str) { + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append((byte) Integer.parseInt(s, 16)); + } + + return bytes.toBytes(); + } + + /** + * 16进制字符串顺序转换为指定字节数的BIN码数组 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如字符串"13810411703"转换为3字节数组{0x41, 0x17, 0x03}, 指定8字节转换为{0x00, 0x00, 0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @param length + * @return + */ + public static byte[] hexStringToBytes(String str, int length) { + byte[] bts = hexStringToBytes(str); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + + /* 十进制BCD码字符串转换为字节数组 */ + /** + * 十进制BCD码字符串顺序转换为字节数组 + * 如字符串"13810411703"转换为字节数组{0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @return + */ + public static byte[] bcdStringToBytes(String str) { + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append(ByteUtil.intToBcd(Integer.parseInt(s))); + } + + return bytes.toBytes(); + } + + /** + * 十进制BCD码字符串顺序转换为指定字节数的BCD码数组 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如字符串"13810411703"转换为3字节数组{0x41, 0x17, 0x03}, 指定8字节转换为{0x00, 0x00, 0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @param length + * @return + */ + public static byte[] bcdStringToBytes(String str, int length) { + byte[] bts = bcdStringToBytes(str); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + public static String buildCRC16(byte[] data) { + byte[] buf = new byte[data.length];// 存储需要产生校验码的数据 + for (int i = 0; i < data.length; i++) { + buf[i] = data[i]; + } + int len = buf.length; + int crc = 0xFFFF;//16位 + for (int pos = 0; pos < len; pos++) { + if (buf[pos] < 0) { + crc ^= (int) buf[pos] + 256; // XOR byte into least sig. byte of + // crc + } else { + crc ^= (int) buf[pos]; // XOR byte into least sig. byte of crc + } + for (int i = 8; i != 0; i--) { // Loop over each bit + if ((crc & 0x0001) != 0) { // If the LSB is set + crc >>= 1; // Shift right and XOR 0xA001 + crc ^= 0xA001; + } else + // Else LSB is not set + crc >>= 1; // Just shift right + } + } + String c = Integer.toHexString(crc); + if (c.length() == 4) { + c = c.substring(2, 4) + c.substring(0, 2); + } else if (c.length() == 3) { + c = "0" + c; + c = c.substring(2, 4) + c.substring(0, 2); + } else if (c.length() == 2) { + c = "0" + c.substring(1, 2) + "0" + c.substring(0, 1); + } + return c; + } + + + public static byte[] byteMergerAll(byte[]... values) { + int length_byte = 0; + for (int i = 0; i < values.length; i++) { + length_byte += values[i].length; + } + byte[] all_byte = new byte[length_byte]; + int countLength = 0; + for (int i = 0; i < values.length; i++) { + byte[] b = values[i]; + System.arraycopy(b, 0, all_byte, countLength, b.length); + countLength += b.length; + } + return all_byte; + } + + public static String convertToHex(String str) { + char[] charArray = str.toCharArray(); + String hexString = ""; + for (char c : charArray) { + hexString += Integer.toHexString((int) c); + } + return hexString; + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-rest-api/pom.xml b/casic-rest-api/pom.xml index 0fe0c13..b30bca0 100644 --- a/casic-rest-api/pom.xml +++ b/casic-rest-api/pom.xml @@ -70,6 +70,15 @@ 2.0.0 compile + + io.netty + netty-all + + + org.bouncycastle + bcprov-jdk15on + 1.59 + diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java new file mode 100644 index 0000000..6f4da3a --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.netty; + +import cn.hutool.core.util.ObjectUtil; +import io.netty.channel.Channel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 全局变量,用于维护设备的登录信息 + */ +@Component +public class DeviceCommon { + + public static volatile ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(500); + public static volatile ConcurrentHashMap devcodeMap = new ConcurrentHashMap<>(); + + + public static Channel getChannelByName(String devCode) { + if (CollectionUtils.isEmpty(devcodeMap)) { + return null; + } + String channelId = devcodeMap.get(devCode); + if (ObjectUtil.isNotEmpty(channelId)) { + return CHANNEL_MAP.get(channelId); + } + return null; + } + + /** + * 将channel和对应的name添加到ConcurrentHashMap + */ + public static void addChannel(String channelId, Channel channel) { + CHANNEL_MAP.put(channelId, channel); + } + + /** + * 移除掉name对应的channel + */ + public static boolean removeChannelByName(String channelId) { + if (CHANNEL_MAP.containsKey(channelId)) { + CHANNEL_MAP.remove(channelId); + if(devcodeMap.containsValue(channelId)){ + devcodeMap.values().removeIf(value->value.equals(channelId)); + } + return true; + } + return false; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java new file mode 100644 index 0000000..e2c7cdb --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.Charset; +import java.util.List; + +/** + * @description: 将从接口取到的数据编码 + * @author: Stone + * @create: 2019-01-11 15:15 + **/ +@Slf4j +public class HjtDecoder extends MessageToMessageDecoder { + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { + log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); + out.add(msg.toString(Charset.defaultCharset())); + } +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java new file mode 100644 index 0000000..993a9bf --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.netty; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; + +@Component +public class NettyServer { + + //负责处理接受进来的链接 + private EventLoopGroup bossGroup; + //负责处理已经被接收的连接上的I/O操作 + private EventLoopGroup workerGroup; + //在这个场景中,它表示服务器的绑定操作的结果 + private ChannelFuture future; + + @EventListener(ApplicationStartedEvent.class) + public void startServer() throws Exception { + bossGroup = new NioEventLoopGroup(); + workerGroup = new NioEventLoopGroup(); + try { + //创建ServerBootstrap,这个类封装了服务器端的网络配置,使得我们可以轻松地设置服务器参数 + ServerBootstrap bootstrap = new ServerBootstrap(); + bootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler(new NettyServerInitializer()) + .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .option(ChannelOption.SO_BACKLOG, 1024) // 设置的ServerChannel的一些选项 + .childOption(ChannelOption.SO_KEEPALIVE, true); + + // 绑定端口并开始接受进来的连接 + future = bootstrap.bind(7000).sync(); + + // 等待服务器套接字关闭 + future.channel().closeFuture().sync(); + } finally { + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } + } + + @PreDestroy + public void stopServer() { + if (future != null && !future.isDone()) { + future.cancel(true); + } + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java new file mode 100644 index 0000000..43780ea --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.netty; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.codec.string.StringEncoder; +import io.netty.util.CharsetUtil; + +import java.nio.charset.StandardCharsets; + +public class NettyServerInitializer extends ChannelInitializer { + + @Override + protected void initChannel(SocketChannel ch) { + ChannelPipeline pipeline = ch.pipeline(); + + // 添加一个字符串解码器,用于将接收到的ByteBuf转换成字符串 + // 这里假设使用的是UTF-8字符集 + pipeline.addLast("decoder", new StringDecoder(StandardCharsets.UTF_8)); + + // 添加一个字符串编码器,用于将发送的字符串转换成ByteBuf + // 这样服务器发送字符串时,客户端可以直接接收到字符串 + pipeline.addLast("encoder", new StringEncoder(StandardCharsets.UTF_8)); + + // 添加自定义的ChannelInboundHandlerAdapter来处理业务逻辑 + pipeline.addLast("handler", new PanTiltChannelHandler()); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java new file mode 100644 index 0000000..fbdc1c9 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java @@ -0,0 +1,69 @@ +package com.casic.missiles.modular.netty; + + +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; + +import java.nio.charset.StandardCharsets; + +public class PanTiltChannelHandler extends ChannelInboundHandlerAdapter { + //保留所有与服务器建立连接的channel对象,这边的GlobalEventExecutor在写博客的时候解释一下,看其doc +// private static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); + + /** + * 服务器端收到任何一个客户端的消息都会触发这个方法 + * 连接的客户端向服务器端发送消息,那么其他客户端都收到此消息,自己收到【自己】+消息 + */ + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + super.channelRead(ctx, msg); + Channel channel = ctx.channel(); + channel.writeAndFlush(Unpooled.copiedBuffer(msg.toString().getBytes(StandardCharsets.UTF_8))); + String devCode = "1231313123"; + DeviceCommon.devcodeMap.put(devCode,channel.id().asLongText()); + } + + //表示服务端与客户端连接建立 + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); //其实相当于一个connection + + /** + * 调用channelGroup的writeAndFlush其实就相当于channelGroup中的每个channel都writeAndFlush + * + * 先去广播,再将自己加入到channelGroup中 + */ +// channelGroup.writeAndFlush(" 【服务器】 -" + channel.remoteAddress() + " 加入\n"); +// channelGroup.add(channel); + DeviceCommon.addChannel(channel.id().asLongText(),channel); + + } + + @Override + public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + DeviceCommon.removeChannelByName(channel.id().asLongText()); + } + + //连接处于活动状态 + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 上线了"); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 下线了"); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + cause.printStackTrace(); + ctx.close(); + } + +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java new file mode 100644 index 0000000..371b940 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.netty; + +import com.casic.missiles.core.base.controller.ExportController; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.nio.charset.StandardCharsets; + +@Api(tags = "test") +@RequiredArgsConstructor +@RestController +@RequestMapping("/test") +public class TestController extends ExportController { + @PostMapping("/test") + public void repairLog() { + Channel channel = DeviceCommon.getChannelByName("1231313123"); + channel.writeAndFlush(Unpooled.copiedBuffer("send command".getBytes(StandardCharsets.UTF_8))); + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java new file mode 100644 index 0000000..6b560ec --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java @@ -0,0 +1,496 @@ +package com.casic.missiles.modular.util; + +import org.springframework.stereotype.Component; + +@Component +public class ByteUtil { + + /* BCD码转换为数值或字符 */ + + /** + * 单一字节中选择指定位bcd码转换为整数 + * 如ByteUtil.bcdToInt((byte) 0x33, 5, 4) = 3 + * + * @param b + * @param highBit 高位,最大7 + * @param lowBit 低位,从0开始 + * @return + */ + public static int bcdToInt(byte b, int highBit, int lowBit) { + int g = highBit - lowBit + 1; + int a = ((int) Math.pow(2, g) - 1) << lowBit; + int b2 = (b & a) >> lowBit; + if (b2 < 0 || b2 >= 10) { + return -1; + } + return b2; + } + + /** + * bcd码转换为整数 错误则返回-1 + * 如ByteUtil.bcdToInt((byte) 0x73) = 73 + * + * @param b 输入字节,默认4位一组,先高后低 + * @return + */ + public static int bcdToInt(byte b) { + int pl = 0x0f; + int ph = 0xf0; + + int h = (ph & b) >> 4; + int l = (pl & b); + + if (h >= 10 || l >= 10) { + return -1; + } + return h * 10 + l; + } + + /** + * bcd码转换为long型整数 + * 如字节数组{0x25, 0x23}转换为2523 + * + * @param + * @return + */ + public static long bcdToLong(byte[] bytes) { + if (ByteUtil.bcdToString(bytes).equals("") == false) + return Long.valueOf(ByteUtil.bcdToString(bytes)).longValue(); + else + return -1; + } + + + /** + * bcd码转换为字符串 按字节顺序 高位在前低位在后 + * 如字节数组{0x01, 0x02, 0x03}转换为"010203" + * + * @param bytes + * @return + */ + public static String bcdToString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + if (ByteUtil.bcdToInt(bytes[i], 7, 4) != -1 && ByteUtil.bcdToInt(bytes[i], 3, 0) != -1) { + sb.append(ByteUtil.bcdToInt(bytes[i], 7, 4)); + sb.append(ByteUtil.bcdToInt(bytes[i], 3, 0)); + } + } + + return sb.toString(); + } + + + /* BIN码转换为数值或字符 */ + + /** + * 单一字节中选择指定位bin码转换为整数 + * 如ByteUtil.binToInt((byte) 0xA3, 7, 7) = 1 + * + * @param b + * @param highBit 高位,最大7 + * @param lowBit 低位,从0开始 + * @return + */ + public static int binToInt(byte b, int highBit, int lowBit) throws RuntimeException { + int g = highBit - lowBit + 1; + int a = ((int) Math.pow(2, g) - 1) << lowBit; + int b2 = (b & a) >> lowBit; + if (b2 < 0 || b2 >= 16) { + throw new RuntimeException(); + } + return b2; + } + + /** + * BIN字节转换为整数 + * 如ByteUtil.bcdToInt((byte) 0x7B) = 123 + * + * @param b + * @return + */ + public static int binToInt(byte b) { + int i1 = 0x80 & b; + if (i1 == 0x80) { + int i2 = 0x7f & b; + return 128 + i2; + } else { + return b; + } + } + + /** + * BIN码转换为整数 高位在前低位在后 + * 如ByteUtil.bcdToInt(new byte[] {(byte) 0x7B, 0x22}) = 31522 + * + * @param bytes + * @return + */ + public static int binToInt(byte[] bytes) { + int i10 = 0; + if (null != bytes && bytes.length != 0) { + for (int i = 0; i < bytes.length; i++) { + i10 = i10 + new Double(Math.pow(16, (bytes.length - i - 1) * 2)).intValue() * ByteUtil.binToInt(bytes[i]); + } + } + return i10; + } + + /** + * BIN码转换为LONG型整数 高位在前低位在后 + * 如ByteUtil.bcdToLong(new byte[] {(byte) 0x7B, 0x22, 0x32, 0x9A}) = 2065838746 + * + * @param bytes + * @return + */ + public static int binToLong(byte[] bytes) { + int l10 = 0; + if (null != bytes && bytes.length != 0) { + for (int i = 0; i < bytes.length; i++) { + l10 = l10 + new Double(Math.pow(16, (bytes.length - i - 1) * 2)).intValue() * ByteUtil.binToInt(bytes[i]); + } + } + return l10; + } + + /** + * 字节数组转换为16进制字符串 按字节数组顺序转换 + * 如字节数组{0x21, 0x06, 0x01, 0x04, 0x40, (byte) 0xE2, 0x01}转换为"2106010440E201" + * + * @param bytes + * @return + */ + public static String binToHexString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + sb.append(Integer.toHexString(binToInt((byte) ((bytes[i] & 0xf0) >> 4))).toUpperCase()); + sb.append(Integer.toHexString(binToInt((byte) (bytes[i] & 0x0f))).toUpperCase()); + } + + return sb.toString(); + } + + + /** + * BIN输出为二进制字符串 + * 如字节数组{0x01, 0x38}转换为字符串"0000000100111000" + * + * @param bytes + * @return + */ + public static String binToBinString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + String s = Integer.toBinaryString(binToInt(bytes[i])); + while (s.length() < 8) { + s = "0" + s; + } + sb.append(s); + } + + return sb.toString(); + } + + + /* int转换为BCD码或BIN码 */ + /** + * 两位整数转换成一个字节的BCD码 + * 大于100的整数取其十位和个位 十位在前个位在后 + * 如79转换为0x79 + * + * @param i + * @return + */ + public static byte intToBcd(int i) { + byte b = 0x00; + while (i > 99) { + i = i % 100; + } + + int l = i % 10; + int h = i / 10; + + b = (byte) (h << 4 | l); + + return b; + } + + /** + * 整数转换为字节数组 高位在前低位在后 + * 如 2379转换为0x23, 0x79 + * + * @param + * @return + */ + public static byte[] intToBcds(long l) { + String str = String.valueOf(l); + Bytes bytes = new Bytes(); + + if (str.length() % 2 == 1) { + str = "0" + str; + } + + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append(ByteUtil.intToBcd(Integer.parseInt(s))); + } + + return bytes.toBytes(); + } + + /** + * 整数转换为指定字节数的BCD码数组 高位在前低位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0x34, 0x79, 指定6字节转换为0x00, 0x00, 0x03, 0x01, 0x34, 0x79 + * + * @param + * @param length + * @return + */ + public static byte[] intToBcds(long l, int length) { + byte[] bts = intToBcds(l); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + /** + * 整数转换为指定字节数的BCD码数组 低位在前高位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0x79, 0x34, 指定6字节转换为0x79, 0x34, 0x01, 0x03, 0x00, 0x00 + * + * @param + * @param length + * @return + */ + public static byte[] intToBcdsHL(long l, int length) { + Bytes bs = new Bytes(); + + for (int i = 0; i < length; i++) { + int low = (int) (l % 100); + bs.append(ByteUtil.intToBcd(low)); + l = l / 100; + } + + return bs.toBytes(); + } + + /** + * 整数转换为BIN码字节数组 高位在前低位在后 + * 如113479转换为0x01, 0xBB, 0x47 + * + * @param l + * @return + */ + public static byte[] intToBins(long l) { + String str = Long.toHexString(l); + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append((byte) Integer.parseInt(s, 16)); + } + + return bytes.toBytes(); + } + + /** + * 整数转换为指定字节数的BIN码数组 高位在前低位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0xFB, 0x67, 指定6字节转换为0x00, 0x00, 0x00, 0x2D, 0xFB, 0x67 + * + * @param l + * @param length + * @return + */ + public static byte[] intToBins(long l, int length) { + byte[] bts = intToBins(l); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + + /* 16进制字符串转换为字节数组 */ + /** + * 16进制字符串顺序转换为字节数组 + * 如字符串"13810411703"转换为字节数组{0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @return + */ + public static byte[] hexStringToBytes(String str) { + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append((byte) Integer.parseInt(s, 16)); + } + + return bytes.toBytes(); + } + + /** + * 16进制字符串顺序转换为指定字节数的BIN码数组 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如字符串"13810411703"转换为3字节数组{0x41, 0x17, 0x03}, 指定8字节转换为{0x00, 0x00, 0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @param length + * @return + */ + public static byte[] hexStringToBytes(String str, int length) { + byte[] bts = hexStringToBytes(str); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + + /* 十进制BCD码字符串转换为字节数组 */ + /** + * 十进制BCD码字符串顺序转换为字节数组 + * 如字符串"13810411703"转换为字节数组{0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @return + */ + public static byte[] bcdStringToBytes(String str) { + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append(ByteUtil.intToBcd(Integer.parseInt(s))); + } + + return bytes.toBytes(); + } + + /** + * 十进制BCD码字符串顺序转换为指定字节数的BCD码数组 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如字符串"13810411703"转换为3字节数组{0x41, 0x17, 0x03}, 指定8字节转换为{0x00, 0x00, 0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @param length + * @return + */ + public static byte[] bcdStringToBytes(String str, int length) { + byte[] bts = bcdStringToBytes(str); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + public static String buildCRC16(byte[] data) { + byte[] buf = new byte[data.length];// 存储需要产生校验码的数据 + for (int i = 0; i < data.length; i++) { + buf[i] = data[i]; + } + int len = buf.length; + int crc = 0xFFFF;//16位 + for (int pos = 0; pos < len; pos++) { + if (buf[pos] < 0) { + crc ^= (int) buf[pos] + 256; // XOR byte into least sig. byte of + // crc + } else { + crc ^= (int) buf[pos]; // XOR byte into least sig. byte of crc + } + for (int i = 8; i != 0; i--) { // Loop over each bit + if ((crc & 0x0001) != 0) { // If the LSB is set + crc >>= 1; // Shift right and XOR 0xA001 + crc ^= 0xA001; + } else + // Else LSB is not set + crc >>= 1; // Just shift right + } + } + String c = Integer.toHexString(crc); + if (c.length() == 4) { + c = c.substring(2, 4) + c.substring(0, 2); + } else if (c.length() == 3) { + c = "0" + c; + c = c.substring(2, 4) + c.substring(0, 2); + } else if (c.length() == 2) { + c = "0" + c.substring(1, 2) + "0" + c.substring(0, 1); + } + return c; + } + + + public static byte[] byteMergerAll(byte[]... values) { + int length_byte = 0; + for (int i = 0; i < values.length; i++) { + length_byte += values[i].length; + } + byte[] all_byte = new byte[length_byte]; + int countLength = 0; + for (int i = 0; i < values.length; i++) { + byte[] b = values[i]; + System.arraycopy(b, 0, all_byte, countLength, b.length); + countLength += b.length; + } + return all_byte; + } + + public static String convertToHex(String str) { + char[] charArray = str.toCharArray(); + String hexString = ""; + for (char c : charArray) { + hexString += Integer.toHexString((int) c); + } + return hexString; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/util/Bytes.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/Bytes.java new file mode 100644 index 0000000..a42789c --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/Bytes.java @@ -0,0 +1,73 @@ +package com.casic.missiles.modular.util; + +public class Bytes { + + private byte[] buffer = null; + + public Bytes() { + + } + + public Bytes append(byte b) { + byte[] nb = null; + if (buffer == null) { + nb = new byte[] { b }; + } else { + nb = new byte[buffer.length + 1]; + for (int i = 0; i < buffer.length; i++) { + nb[i] = buffer[i]; + } + nb[nb.length - 1] = b; + } + buffer = nb; + return this; + } + + public Bytes append(byte[] bs) { + if (bs == null) + return this; + byte[] nb = null; + if (buffer == null) { + buffer = bs; + } else { + nb = new byte[buffer.length + bs.length]; + for (int i = 0; i < buffer.length; i++) { + nb[i] = buffer[i]; + } + for (int i = 0; i < bs.length; i++) { + nb[buffer.length + i] = bs[i]; + } + buffer = nb; + } + return this; + } + + public byte[] toBytes() { + return buffer; + } + + public byte[] toBytes(int l) { + Bytes bs = new Bytes(); + + for (int i = 0; i < l; i++) { + if (i < buffer.length) { + bs.append(buffer[i]); + } else { + bs.append((byte) 0x00); + } + } + + return bs.toBytes(); + } + + public static void main(String[] args) { + Bytes bytes = new Bytes(); + int i = 0xf2; + byte a = 0x68; + byte[] b = new byte[] { 0x11, 0x22 }; + byte c = (byte) i; + byte[] r = bytes.append(a).append(b).append(c).toBytes(); + System.out.println(r); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-rest-api/pom.xml b/casic-rest-api/pom.xml index 0fe0c13..b30bca0 100644 --- a/casic-rest-api/pom.xml +++ b/casic-rest-api/pom.xml @@ -70,6 +70,15 @@ 2.0.0 compile + + io.netty + netty-all + + + org.bouncycastle + bcprov-jdk15on + 1.59 + diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java new file mode 100644 index 0000000..6f4da3a --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.netty; + +import cn.hutool.core.util.ObjectUtil; +import io.netty.channel.Channel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 全局变量,用于维护设备的登录信息 + */ +@Component +public class DeviceCommon { + + public static volatile ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(500); + public static volatile ConcurrentHashMap devcodeMap = new ConcurrentHashMap<>(); + + + public static Channel getChannelByName(String devCode) { + if (CollectionUtils.isEmpty(devcodeMap)) { + return null; + } + String channelId = devcodeMap.get(devCode); + if (ObjectUtil.isNotEmpty(channelId)) { + return CHANNEL_MAP.get(channelId); + } + return null; + } + + /** + * 将channel和对应的name添加到ConcurrentHashMap + */ + public static void addChannel(String channelId, Channel channel) { + CHANNEL_MAP.put(channelId, channel); + } + + /** + * 移除掉name对应的channel + */ + public static boolean removeChannelByName(String channelId) { + if (CHANNEL_MAP.containsKey(channelId)) { + CHANNEL_MAP.remove(channelId); + if(devcodeMap.containsValue(channelId)){ + devcodeMap.values().removeIf(value->value.equals(channelId)); + } + return true; + } + return false; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java new file mode 100644 index 0000000..e2c7cdb --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.Charset; +import java.util.List; + +/** + * @description: 将从接口取到的数据编码 + * @author: Stone + * @create: 2019-01-11 15:15 + **/ +@Slf4j +public class HjtDecoder extends MessageToMessageDecoder { + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { + log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); + out.add(msg.toString(Charset.defaultCharset())); + } +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java new file mode 100644 index 0000000..993a9bf --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.netty; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; + +@Component +public class NettyServer { + + //负责处理接受进来的链接 + private EventLoopGroup bossGroup; + //负责处理已经被接收的连接上的I/O操作 + private EventLoopGroup workerGroup; + //在这个场景中,它表示服务器的绑定操作的结果 + private ChannelFuture future; + + @EventListener(ApplicationStartedEvent.class) + public void startServer() throws Exception { + bossGroup = new NioEventLoopGroup(); + workerGroup = new NioEventLoopGroup(); + try { + //创建ServerBootstrap,这个类封装了服务器端的网络配置,使得我们可以轻松地设置服务器参数 + ServerBootstrap bootstrap = new ServerBootstrap(); + bootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler(new NettyServerInitializer()) + .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .option(ChannelOption.SO_BACKLOG, 1024) // 设置的ServerChannel的一些选项 + .childOption(ChannelOption.SO_KEEPALIVE, true); + + // 绑定端口并开始接受进来的连接 + future = bootstrap.bind(7000).sync(); + + // 等待服务器套接字关闭 + future.channel().closeFuture().sync(); + } finally { + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } + } + + @PreDestroy + public void stopServer() { + if (future != null && !future.isDone()) { + future.cancel(true); + } + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java new file mode 100644 index 0000000..43780ea --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.netty; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.codec.string.StringEncoder; +import io.netty.util.CharsetUtil; + +import java.nio.charset.StandardCharsets; + +public class NettyServerInitializer extends ChannelInitializer { + + @Override + protected void initChannel(SocketChannel ch) { + ChannelPipeline pipeline = ch.pipeline(); + + // 添加一个字符串解码器,用于将接收到的ByteBuf转换成字符串 + // 这里假设使用的是UTF-8字符集 + pipeline.addLast("decoder", new StringDecoder(StandardCharsets.UTF_8)); + + // 添加一个字符串编码器,用于将发送的字符串转换成ByteBuf + // 这样服务器发送字符串时,客户端可以直接接收到字符串 + pipeline.addLast("encoder", new StringEncoder(StandardCharsets.UTF_8)); + + // 添加自定义的ChannelInboundHandlerAdapter来处理业务逻辑 + pipeline.addLast("handler", new PanTiltChannelHandler()); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java new file mode 100644 index 0000000..fbdc1c9 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java @@ -0,0 +1,69 @@ +package com.casic.missiles.modular.netty; + + +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; + +import java.nio.charset.StandardCharsets; + +public class PanTiltChannelHandler extends ChannelInboundHandlerAdapter { + //保留所有与服务器建立连接的channel对象,这边的GlobalEventExecutor在写博客的时候解释一下,看其doc +// private static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); + + /** + * 服务器端收到任何一个客户端的消息都会触发这个方法 + * 连接的客户端向服务器端发送消息,那么其他客户端都收到此消息,自己收到【自己】+消息 + */ + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + super.channelRead(ctx, msg); + Channel channel = ctx.channel(); + channel.writeAndFlush(Unpooled.copiedBuffer(msg.toString().getBytes(StandardCharsets.UTF_8))); + String devCode = "1231313123"; + DeviceCommon.devcodeMap.put(devCode,channel.id().asLongText()); + } + + //表示服务端与客户端连接建立 + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); //其实相当于一个connection + + /** + * 调用channelGroup的writeAndFlush其实就相当于channelGroup中的每个channel都writeAndFlush + * + * 先去广播,再将自己加入到channelGroup中 + */ +// channelGroup.writeAndFlush(" 【服务器】 -" + channel.remoteAddress() + " 加入\n"); +// channelGroup.add(channel); + DeviceCommon.addChannel(channel.id().asLongText(),channel); + + } + + @Override + public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + DeviceCommon.removeChannelByName(channel.id().asLongText()); + } + + //连接处于活动状态 + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 上线了"); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 下线了"); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + cause.printStackTrace(); + ctx.close(); + } + +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java new file mode 100644 index 0000000..371b940 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.netty; + +import com.casic.missiles.core.base.controller.ExportController; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.nio.charset.StandardCharsets; + +@Api(tags = "test") +@RequiredArgsConstructor +@RestController +@RequestMapping("/test") +public class TestController extends ExportController { + @PostMapping("/test") + public void repairLog() { + Channel channel = DeviceCommon.getChannelByName("1231313123"); + channel.writeAndFlush(Unpooled.copiedBuffer("send command".getBytes(StandardCharsets.UTF_8))); + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java new file mode 100644 index 0000000..6b560ec --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java @@ -0,0 +1,496 @@ +package com.casic.missiles.modular.util; + +import org.springframework.stereotype.Component; + +@Component +public class ByteUtil { + + /* BCD码转换为数值或字符 */ + + /** + * 单一字节中选择指定位bcd码转换为整数 + * 如ByteUtil.bcdToInt((byte) 0x33, 5, 4) = 3 + * + * @param b + * @param highBit 高位,最大7 + * @param lowBit 低位,从0开始 + * @return + */ + public static int bcdToInt(byte b, int highBit, int lowBit) { + int g = highBit - lowBit + 1; + int a = ((int) Math.pow(2, g) - 1) << lowBit; + int b2 = (b & a) >> lowBit; + if (b2 < 0 || b2 >= 10) { + return -1; + } + return b2; + } + + /** + * bcd码转换为整数 错误则返回-1 + * 如ByteUtil.bcdToInt((byte) 0x73) = 73 + * + * @param b 输入字节,默认4位一组,先高后低 + * @return + */ + public static int bcdToInt(byte b) { + int pl = 0x0f; + int ph = 0xf0; + + int h = (ph & b) >> 4; + int l = (pl & b); + + if (h >= 10 || l >= 10) { + return -1; + } + return h * 10 + l; + } + + /** + * bcd码转换为long型整数 + * 如字节数组{0x25, 0x23}转换为2523 + * + * @param + * @return + */ + public static long bcdToLong(byte[] bytes) { + if (ByteUtil.bcdToString(bytes).equals("") == false) + return Long.valueOf(ByteUtil.bcdToString(bytes)).longValue(); + else + return -1; + } + + + /** + * bcd码转换为字符串 按字节顺序 高位在前低位在后 + * 如字节数组{0x01, 0x02, 0x03}转换为"010203" + * + * @param bytes + * @return + */ + public static String bcdToString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + if (ByteUtil.bcdToInt(bytes[i], 7, 4) != -1 && ByteUtil.bcdToInt(bytes[i], 3, 0) != -1) { + sb.append(ByteUtil.bcdToInt(bytes[i], 7, 4)); + sb.append(ByteUtil.bcdToInt(bytes[i], 3, 0)); + } + } + + return sb.toString(); + } + + + /* BIN码转换为数值或字符 */ + + /** + * 单一字节中选择指定位bin码转换为整数 + * 如ByteUtil.binToInt((byte) 0xA3, 7, 7) = 1 + * + * @param b + * @param highBit 高位,最大7 + * @param lowBit 低位,从0开始 + * @return + */ + public static int binToInt(byte b, int highBit, int lowBit) throws RuntimeException { + int g = highBit - lowBit + 1; + int a = ((int) Math.pow(2, g) - 1) << lowBit; + int b2 = (b & a) >> lowBit; + if (b2 < 0 || b2 >= 16) { + throw new RuntimeException(); + } + return b2; + } + + /** + * BIN字节转换为整数 + * 如ByteUtil.bcdToInt((byte) 0x7B) = 123 + * + * @param b + * @return + */ + public static int binToInt(byte b) { + int i1 = 0x80 & b; + if (i1 == 0x80) { + int i2 = 0x7f & b; + return 128 + i2; + } else { + return b; + } + } + + /** + * BIN码转换为整数 高位在前低位在后 + * 如ByteUtil.bcdToInt(new byte[] {(byte) 0x7B, 0x22}) = 31522 + * + * @param bytes + * @return + */ + public static int binToInt(byte[] bytes) { + int i10 = 0; + if (null != bytes && bytes.length != 0) { + for (int i = 0; i < bytes.length; i++) { + i10 = i10 + new Double(Math.pow(16, (bytes.length - i - 1) * 2)).intValue() * ByteUtil.binToInt(bytes[i]); + } + } + return i10; + } + + /** + * BIN码转换为LONG型整数 高位在前低位在后 + * 如ByteUtil.bcdToLong(new byte[] {(byte) 0x7B, 0x22, 0x32, 0x9A}) = 2065838746 + * + * @param bytes + * @return + */ + public static int binToLong(byte[] bytes) { + int l10 = 0; + if (null != bytes && bytes.length != 0) { + for (int i = 0; i < bytes.length; i++) { + l10 = l10 + new Double(Math.pow(16, (bytes.length - i - 1) * 2)).intValue() * ByteUtil.binToInt(bytes[i]); + } + } + return l10; + } + + /** + * 字节数组转换为16进制字符串 按字节数组顺序转换 + * 如字节数组{0x21, 0x06, 0x01, 0x04, 0x40, (byte) 0xE2, 0x01}转换为"2106010440E201" + * + * @param bytes + * @return + */ + public static String binToHexString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + sb.append(Integer.toHexString(binToInt((byte) ((bytes[i] & 0xf0) >> 4))).toUpperCase()); + sb.append(Integer.toHexString(binToInt((byte) (bytes[i] & 0x0f))).toUpperCase()); + } + + return sb.toString(); + } + + + /** + * BIN输出为二进制字符串 + * 如字节数组{0x01, 0x38}转换为字符串"0000000100111000" + * + * @param bytes + * @return + */ + public static String binToBinString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + String s = Integer.toBinaryString(binToInt(bytes[i])); + while (s.length() < 8) { + s = "0" + s; + } + sb.append(s); + } + + return sb.toString(); + } + + + /* int转换为BCD码或BIN码 */ + /** + * 两位整数转换成一个字节的BCD码 + * 大于100的整数取其十位和个位 十位在前个位在后 + * 如79转换为0x79 + * + * @param i + * @return + */ + public static byte intToBcd(int i) { + byte b = 0x00; + while (i > 99) { + i = i % 100; + } + + int l = i % 10; + int h = i / 10; + + b = (byte) (h << 4 | l); + + return b; + } + + /** + * 整数转换为字节数组 高位在前低位在后 + * 如 2379转换为0x23, 0x79 + * + * @param + * @return + */ + public static byte[] intToBcds(long l) { + String str = String.valueOf(l); + Bytes bytes = new Bytes(); + + if (str.length() % 2 == 1) { + str = "0" + str; + } + + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append(ByteUtil.intToBcd(Integer.parseInt(s))); + } + + return bytes.toBytes(); + } + + /** + * 整数转换为指定字节数的BCD码数组 高位在前低位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0x34, 0x79, 指定6字节转换为0x00, 0x00, 0x03, 0x01, 0x34, 0x79 + * + * @param + * @param length + * @return + */ + public static byte[] intToBcds(long l, int length) { + byte[] bts = intToBcds(l); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + /** + * 整数转换为指定字节数的BCD码数组 低位在前高位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0x79, 0x34, 指定6字节转换为0x79, 0x34, 0x01, 0x03, 0x00, 0x00 + * + * @param + * @param length + * @return + */ + public static byte[] intToBcdsHL(long l, int length) { + Bytes bs = new Bytes(); + + for (int i = 0; i < length; i++) { + int low = (int) (l % 100); + bs.append(ByteUtil.intToBcd(low)); + l = l / 100; + } + + return bs.toBytes(); + } + + /** + * 整数转换为BIN码字节数组 高位在前低位在后 + * 如113479转换为0x01, 0xBB, 0x47 + * + * @param l + * @return + */ + public static byte[] intToBins(long l) { + String str = Long.toHexString(l); + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append((byte) Integer.parseInt(s, 16)); + } + + return bytes.toBytes(); + } + + /** + * 整数转换为指定字节数的BIN码数组 高位在前低位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0xFB, 0x67, 指定6字节转换为0x00, 0x00, 0x00, 0x2D, 0xFB, 0x67 + * + * @param l + * @param length + * @return + */ + public static byte[] intToBins(long l, int length) { + byte[] bts = intToBins(l); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + + /* 16进制字符串转换为字节数组 */ + /** + * 16进制字符串顺序转换为字节数组 + * 如字符串"13810411703"转换为字节数组{0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @return + */ + public static byte[] hexStringToBytes(String str) { + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append((byte) Integer.parseInt(s, 16)); + } + + return bytes.toBytes(); + } + + /** + * 16进制字符串顺序转换为指定字节数的BIN码数组 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如字符串"13810411703"转换为3字节数组{0x41, 0x17, 0x03}, 指定8字节转换为{0x00, 0x00, 0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @param length + * @return + */ + public static byte[] hexStringToBytes(String str, int length) { + byte[] bts = hexStringToBytes(str); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + + /* 十进制BCD码字符串转换为字节数组 */ + /** + * 十进制BCD码字符串顺序转换为字节数组 + * 如字符串"13810411703"转换为字节数组{0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @return + */ + public static byte[] bcdStringToBytes(String str) { + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append(ByteUtil.intToBcd(Integer.parseInt(s))); + } + + return bytes.toBytes(); + } + + /** + * 十进制BCD码字符串顺序转换为指定字节数的BCD码数组 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如字符串"13810411703"转换为3字节数组{0x41, 0x17, 0x03}, 指定8字节转换为{0x00, 0x00, 0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @param length + * @return + */ + public static byte[] bcdStringToBytes(String str, int length) { + byte[] bts = bcdStringToBytes(str); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + public static String buildCRC16(byte[] data) { + byte[] buf = new byte[data.length];// 存储需要产生校验码的数据 + for (int i = 0; i < data.length; i++) { + buf[i] = data[i]; + } + int len = buf.length; + int crc = 0xFFFF;//16位 + for (int pos = 0; pos < len; pos++) { + if (buf[pos] < 0) { + crc ^= (int) buf[pos] + 256; // XOR byte into least sig. byte of + // crc + } else { + crc ^= (int) buf[pos]; // XOR byte into least sig. byte of crc + } + for (int i = 8; i != 0; i--) { // Loop over each bit + if ((crc & 0x0001) != 0) { // If the LSB is set + crc >>= 1; // Shift right and XOR 0xA001 + crc ^= 0xA001; + } else + // Else LSB is not set + crc >>= 1; // Just shift right + } + } + String c = Integer.toHexString(crc); + if (c.length() == 4) { + c = c.substring(2, 4) + c.substring(0, 2); + } else if (c.length() == 3) { + c = "0" + c; + c = c.substring(2, 4) + c.substring(0, 2); + } else if (c.length() == 2) { + c = "0" + c.substring(1, 2) + "0" + c.substring(0, 1); + } + return c; + } + + + public static byte[] byteMergerAll(byte[]... values) { + int length_byte = 0; + for (int i = 0; i < values.length; i++) { + length_byte += values[i].length; + } + byte[] all_byte = new byte[length_byte]; + int countLength = 0; + for (int i = 0; i < values.length; i++) { + byte[] b = values[i]; + System.arraycopy(b, 0, all_byte, countLength, b.length); + countLength += b.length; + } + return all_byte; + } + + public static String convertToHex(String str) { + char[] charArray = str.toCharArray(); + String hexString = ""; + for (char c : charArray) { + hexString += Integer.toHexString((int) c); + } + return hexString; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/util/Bytes.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/Bytes.java new file mode 100644 index 0000000..a42789c --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/Bytes.java @@ -0,0 +1,73 @@ +package com.casic.missiles.modular.util; + +public class Bytes { + + private byte[] buffer = null; + + public Bytes() { + + } + + public Bytes append(byte b) { + byte[] nb = null; + if (buffer == null) { + nb = new byte[] { b }; + } else { + nb = new byte[buffer.length + 1]; + for (int i = 0; i < buffer.length; i++) { + nb[i] = buffer[i]; + } + nb[nb.length - 1] = b; + } + buffer = nb; + return this; + } + + public Bytes append(byte[] bs) { + if (bs == null) + return this; + byte[] nb = null; + if (buffer == null) { + buffer = bs; + } else { + nb = new byte[buffer.length + bs.length]; + for (int i = 0; i < buffer.length; i++) { + nb[i] = buffer[i]; + } + for (int i = 0; i < bs.length; i++) { + nb[buffer.length + i] = bs[i]; + } + buffer = nb; + } + return this; + } + + public byte[] toBytes() { + return buffer; + } + + public byte[] toBytes(int l) { + Bytes bs = new Bytes(); + + for (int i = 0; i < l; i++) { + if (i < buffer.length) { + bs.append(buffer[i]); + } else { + bs.append((byte) 0x00); + } + } + + return bs.toBytes(); + } + + public static void main(String[] args) { + Bytes bytes = new Bytes(); + int i = 0xf2; + byte a = 0x68; + byte[] b = new byte[] { 0x11, 0x22 }; + byte c = (byte) i; + byte[] r = bytes.append(a).append(b).append(c).toBytes(); + System.out.println(r); + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/util/MsgUtil.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/MsgUtil.java new file mode 100644 index 0000000..b6bb868 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/MsgUtil.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.util; + +import org.springframework.stereotype.Component; + +@Component +public class MsgUtil { + + +// public static String code_ = "68-ED-A4-38-37-FF"; + + public static String getMsg(String data, String type, String code) { + byte[] code_bytes = ByteUtil.hexStringToBytes(ByteUtil.convertToHex(code)); + byte[] gas_bytes = {0x00, 0x01}; + byte[] strength_bytes = {0x00, 0x02}; + switch (type) { + case "1": + byte[] prefix_bytes = {0x01, 0x03, 0x04}; + byte[] data_bytes = ByteUtil.hexStringToBytes(Integer.toHexString((int) Double.parseDouble(data)), 4); + byte[] bytes = ByteUtil.byteMergerAll(prefix_bytes, data_bytes); + byte[] crc_bytes_1 = ByteUtil.hexStringToBytes(ByteUtil.buildCRC16(bytes)); + byte[] bytes_1 = ByteUtil.byteMergerAll(bytes, crc_bytes_1); + byte[] bytes_1_1 = ByteUtil.byteMergerAll(bytes_1, gas_bytes); + byte[] bytes2_1 = ByteUtil.byteMergerAll(bytes_1_1, code_bytes); + String crc = ByteUtil.binToHexString(bytes2_1); + return crc; + case "0": + byte[] prefix0_bytes = {0x01, 0x03, 0x02}; + byte[] data0_bytes = ByteUtil.hexStringToBytes(Integer.toHexString((int) Double.parseDouble(data)), 2); + byte[] bytes0 = ByteUtil.byteMergerAll(prefix0_bytes, data0_bytes); + byte[] crc_bytes = ByteUtil.hexStringToBytes(ByteUtil.buildCRC16(bytes0)); + byte[] bytes1 = ByteUtil.byteMergerAll(bytes0, crc_bytes); + byte[] bytes2 = ByteUtil.byteMergerAll(bytes1, code_bytes); + String crc0 = ByteUtil.bcdToString(bytes2); + return crc0; + default: + return ""; + } + + } + + public static void main(String[] args) { + String crc = getMsg("257", "0", ""); + System.out.println(crc); + + System.out.println(ByteUtil.hexStringToBytes("12654", 8)); + System.out.println(0xff); + System.out.println((byte) 126); + } + + + /** + * 设备编号加密 + * + * @param devCode + * @return + */ + public static String encode(String devCode) { + + String commandStr = "be0c30" + ByteUtil.bcdToString(ByteUtil.intToBcds(devCode.length() + 2, 2)) + devCode + "0000" + ByteUtil.buildCRC16(ByteUtil.bcdStringToBytes(devCode)) + "e0fe"; + return commandStr; + } + + /** + * 设备编号解密 + * + * @param devCode + * @return + */ + public static String decode(String devCode) { + String commandStr = "be0c32" + ByteUtil.bcdToString(ByteUtil.intToBcds(devCode.length() + 2, 2)) + devCode + "0000" + ByteUtil.buildCRC16(ByteUtil.bcdStringToBytes(devCode)) + "e0fe"; + return commandStr; + } + + + /** + * 设备编号加密返回 + * + * @param msg + * @return + */ + public static String encodeResult(String msg) { + + return msg.substring(10); + } + + /** + * 设备编号解密返回 + * + * @param msg + * @return + */ + public static String decodeResult(String msg) { + + return msg.substring(6); + } + +} + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java index e004832..c81054f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmRecordsController.java @@ -51,11 +51,8 @@ @PostMapping("/listPage") @ResponseBody public ReturnDTO listPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.pageList(page, request, dataScope))); } @@ -63,24 +60,29 @@ @PostMapping("/historyListPage") @ResponseBody public ReturnDTO historyListPage(@RequestBody AlarmRecordDTO request) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - Page page = PageFactory.defaultPage(); - return ReturnUtil.success(super.packForBT(iAlarmRecordsService.historyListPage(page, request, dataScope))); } + + @ApiOperation("查询历史告警详情") + @PostMapping("/historyAlarmDetail") + @ResponseBody + public ReturnDTO historyAlarmDetail(@RequestBody IdDTO idDTO) { + + Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { + throw new BusinessException(BusinessExceptionEnum.ID_NULL); + }); + return ReturnUtil.success(iAlarmRecordsService.historyAlarmDetail(idDTO.getId())); + } //todo:历史报警导出 @ApiOperation("导出") @RequestMapping(value = "/batchExport", method = RequestMethod.GET) public void batchExport(@RequestBody AlarmRecordDTO request, HttpServletResponse response) { - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - List dtoList = iAlarmRecordsService.allList(request, dataScope); - try { iBaseExportService.exportExcel(response, AlarmRecordExportDTO.class, dtoList, ExportEnum.ALARM_EXPORT.getSheetName()); } catch (Exception e) { diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java index 4992ab1..f7357ac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/controller/AlarmStaticsController.java @@ -29,7 +29,7 @@ public class AlarmStaticsController extends ExportController { private final IAlarmStaticsService iAlarmStaticsService; - private final AbstractPermissionContext permissionContext; + private final AbstractPermissionContext permissionContext; @ApiOperation("报警总体情况") @PostMapping("/overall") @@ -37,37 +37,33 @@ public ReturnDTO overall() { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.overall(alarmType,dataScope.getDeptIds())); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.overall(alarmType, dataScope.getDeptIds())); } @ApiOperation("各类报警统计") @PostMapping("/alarmType") @ResponseBody public ReturnDTO alarmType(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType,alarmTypeRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmType(alarmType, alarmTypeRequestDTO)); } -// @ApiOperation("报警趋势分析") -// @PostMapping("/alarmTrend") -// @ResponseBody -// public ReturnDTO alarmTrend() { -// -// DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); -// String alarmType=""; -// return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType,dataScope.getDeptIds())); -// } + @ApiOperation("报警趋势分析") + @PostMapping("/alarmTrend") + @ResponseBody + public ReturnDTO alarmTrend(@RequestBody AlarmTypeRequestDTO alarmTypeRequestDTO) { + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmTrend(alarmType, alarmTypeRequestDTO)); + } @ApiOperation("各单位报警统计") @PostMapping("/alarmCompany") @ResponseBody public ReturnDTO alarmCompany(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { - //toDo:公司分类 - DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmCompany(alarmType, alarmPositionRequestDTO)); } @ApiOperation("异常位置分析") @@ -76,8 +72,8 @@ public ReturnDTO alarmPosition(@RequestBody AlarmPositionRequestDTO alarmPositionRequestDTO) { DataScope dataScope = permissionContext.getAuthService().getLoginUserDataScope(); - String alarmType=""; - return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType,dataScope.getDeptIds(),alarmPositionRequestDTO)); + String alarmType = ""; + return ReturnUtil.success(iAlarmStaticsService.alarmPosition(alarmType, dataScope.getDeptIds(), alarmPositionRequestDTO)); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java index 84581f2..16477d8 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmRecordsMapper.java @@ -34,6 +34,8 @@ Map view(@Param("id") Long id); + AlarmRecords historyAlarmDetail(@Param("id") Long id); + void updateCell(@Param("devCode") String devCode,@Param("onLineStatus") String onLineStatus, @Param("cell") String cell); Page pop(Page page, @Param("deptIdStr") String deptIdStr); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java index 0028d7f..30744d1 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/AlarmStaticsMapper.java @@ -37,4 +37,11 @@ @Param("deptStrs") String deptStrs, @Param("request") AlarmPositionRequestDTO request); + + List alarmTrend(@Param("alarmType") String alarmType, + @Param("deptStrs") String deptStrs, + @Param("request") AlarmTypeRequestDTO request); + + List alarmTypeJoinList(); + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml index 24a0eec..b1f3839 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmRecordsMapper.xml @@ -182,6 +182,33 @@ ORDER BY rd.ALARM_TIME DESC + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml index 61078a9..6062be7 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dao/mapping/AlarmTypeMapper.xml @@ -17,15 +17,23 @@ - diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java index 7d4d81d..22aeb5f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmCompanyResponseDTO.java @@ -15,4 +15,6 @@ @ApiModelProperty("报警类型") private Long alarmType; + @ApiModelProperty("报警类型细化名称") + private String alarmName; } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java new file mode 100644 index 0000000..b4787ad --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmDeviceTypeDTO.java @@ -0,0 +1,18 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmDeviceTypeDTO { + + @ApiModelProperty("报警类型名称,区分场站、闸井、管线") + private String alarmName; + + @ApiModelProperty("报警类型大类每次") + private String alarmType; + + @ApiModelProperty("监测类型") + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java new file mode 100644 index 0000000..a93b9cb --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/dto/AlarmTrendResponseDTO.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.alarm.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class AlarmTrendResponseDTO { + + @ApiModelProperty("报警类型名称") + private String alarmTypeName; + + @ApiModelProperty("值") + private String value; + + @ApiModelProperty("报警时间") + private String alarmTime; + + private String watchObject; + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java index 9ce5af3..154be07 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmRecords.java @@ -155,6 +155,14 @@ @TableField(exist = false) private String alarmCategory; + @ApiModelProperty("台账id") + @TableField(exist = false) + private Long ledgerId; + + @ApiModelProperty("监测对象id") + @TableField(exist = false) + private String watchObject; + public AlarmRecords() { } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java index 2df2f9f..e1a1c19 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/entity/AlarmType.java @@ -61,5 +61,9 @@ @TableField(exist = false) private String deviceTypeName; + @ApiModelProperty(value = "设备类型字符串ids") + @TableField(exist = false) + private String deviceTypeIdStrs; + } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java index b1c1ee8..781e8d5 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmRecordsService.java @@ -42,6 +42,8 @@ boolean read(Long id); + AlarmRecords historyAlarmDetail(Long id); + List changeProcessStatus(List ids); boolean processAppContent(Map resultParams); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java index fa10d45..61588e3 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/IAlarmStaticsService.java @@ -7,6 +7,7 @@ import com.casic.missiles.modular.alarm.entity.AlarmRecords; import java.util.List; +import java.util.Map; /** *

@@ -24,7 +25,9 @@ List alarmType(String alarmType ,AlarmTypeRequestDTO alarmTypeRequestDTO); - List alarmCompany(String alarmType , List deptIds,AlarmPositionRequestDTO alarmPositionRequestDTO); + List> alarmTrend(String alarmType , AlarmTypeRequestDTO alarmTypeRequestDTO); + + List< Map> alarmCompany(String alarmType ,AlarmPositionRequestDTO alarmPositionRequestDTO); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java index 6f4521b..62d6e1f 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmRecordsServiceImpl.java @@ -127,6 +127,16 @@ } @Override + public AlarmRecords historyAlarmDetail(Long id) { + AlarmRecords alarmRecords = this.baseMapper.historyAlarmDetail(id); + alarmRecords.setRealAlarmName(DictEnum.REAL_ALARM.equals(alarmRecords.getRealAlarm()) ? "否" : "是"); + alarmRecords.setCancelDuration(TimeConverter(alarmRecords.getCancelDuration())); + alarmRecords.setDeptName(getDeptNamesByDeptId(alarmRecords.getDeptid())); + alarmRecords.setAlarmCategory(abstractDictService.getDictNameByCode("alarmCategory", alarmRecords.getAlarmCategory())); + return alarmRecords; + } + + @Override public Page deviceAlarmHistoryListPage(Page page, AlarmRecordDTO request, DataScope dataScope) { Page deviceAlarmListPage = this.baseMapper.deviceAlarmHistoryListPage(page, request, dataScope, getDeptIds(request.getDeptId())); List deviceAlarmList = deviceAlarmListPage.getRecords(); @@ -165,8 +175,7 @@ resultMap.put("processStatusName", ApprovalStatusEnum.getValue(resultMap.get("PROCESS_STATUS").toString())); //0:自有,1:自管 resultMap.put("manageType", DictEnum.MANAGE_TYPE.equals(resultMap.get("manageType").toString()) ? "自有" : "自管"); - - //设置确认个处置内容 + //设置确认上个处置内容 resultMap.put("processContent", "未处置"); resultMap.put("confirmContent", "未确认"); String processStatus = resultMap.get("PROCESS_STATUS").toString(); diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java index 28707b1..57ddbac 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/alarm/service/impl/AlarmStaticsServiceImpl.java @@ -1,20 +1,26 @@ package com.casic.missiles.modular.alarm.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDeptService; import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.enums.DictEnum; import com.casic.missiles.modular.alarm.dao.AlarmStaticsMapper; import com.casic.missiles.modular.alarm.dto.*; import com.casic.missiles.modular.alarm.entity.AlarmRecords; import com.casic.missiles.modular.alarm.service.IAlarmStaticsService; +import com.casic.missiles.modular.system.model.Dept; +import com.casic.missiles.util.TimeConvertUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -52,10 +58,46 @@ @Override public List alarmType(String alarmType, AlarmTypeRequestDTO request) { - + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } return this.baseMapper.alarmType(alarmType, getDeptIds(request.getDeptid()), request); } + @Override + public List> alarmTrend(String alarmType, AlarmTypeRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List alarmTrendResponseDTOList = this.baseMapper.alarmTrend(alarmType, getDeptIds(request.getDeptid()), request); + List alarmDeviceTypeDTOList = this.baseMapper.alarmTypeJoinList(); + List> resultMapList = new ArrayList<>(); + List days = new ArrayList<>(); + //按周返回 + if (DictEnum.WEEK.equals(request.getTimeType())) { + days = TimeConvertUtil.weekDays(); + } else if (DictEnum.MONTH.equals(request.getTimeType())) { + days = TimeConvertUtil.monthDays(); + } else if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + days = TimeConvertUtil.betweenDays(request.getBegTime(), request.getEndTime()); + } + for (String day : days) { + Map dayMap = new HashMap<>(); + dayMap.put("date", day); + for (AlarmDeviceTypeDTO alarmDeviceTypeDTO : alarmDeviceTypeDTOList) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), 0); + for (AlarmTrendResponseDTO responseDTO : alarmTrendResponseDTOList) { + if (day.equals(responseDTO.getAlarmTime()) && + alarmDeviceTypeDTO.getAlarmType().equals(responseDTO.getAlarmTypeName()) && + alarmDeviceTypeDTO.getWatchObject().equals(responseDTO.getWatchObject())) { + dayMap.put(alarmDeviceTypeDTO.getAlarmName(), Integer.valueOf(dayMap.get(alarmDeviceTypeDTO.getAlarmName()).toString()) + Integer.valueOf(responseDTO.getValue())); + } + } + } + resultMapList.add(dayMap); + } + return resultMapList; + } public String getDeptIds(Long deptId) { List deptIds = new ArrayList<>(); @@ -74,7 +116,32 @@ } @Override - public List alarmCompany(String alarmType, List deptIds, AlarmPositionRequestDTO request) { - return this.baseMapper.alarmCompany(alarmType, "", request); + public List< Map> alarmCompany(String alarmType, AlarmPositionRequestDTO request) { + if (ObjectUtil.isNotEmpty(request.getBegTime()) || ObjectUtil.isNotEmpty(request.getEndTime())) { + request.setTimeType(""); + } + List< Map> resultMapList = new ArrayList<>(); + List responseDTOList = this.baseMapper.alarmCompany(alarmType, getDeptIds(null), request); + List deptIds = abstractDeptService.getListByTips("company"); + List alarmList = responseDTOList.stream().map(AlarmCompanyResponseDTO::getAlarmName).distinct().collect(Collectors.toList()); + for(Dept dept:deptIds){ + Map deptMap = new HashMap<>(); + deptMap.put("dept",dept.getFullName()); + List deptChildIds = abstractDeptService.getIdsRecursionByPid(dept.getId(),""); + deptChildIds.add(dept.getId()); + for(String alarm : alarmList){ + deptMap.put(alarm,0); + for(AlarmCompanyResponseDTO responseDTO:responseDTOList){ + + if (alarm.equals(responseDTO.getAlarmName())&& + null!=responseDTO.getDeptid()&& + deptChildIds.contains(responseDTO.getDeptid())){ + deptMap.put(alarm,Integer.valueOf(deptMap.get(alarm).toString())+responseDTO.getAlarmSum()); + } + } + } + resultMapList.add(deptMap); + } + return resultMapList; } } diff --git a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java index 44a88ce..3652873 100644 --- a/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java +++ b/casic-public/src/main/java/com/casic/missiles/enums/DictEnum.java @@ -59,5 +59,8 @@ String CONFIRM_TYPE= "1"; //不需要处置 String IS_PROCESS= "0"; + String WEEK= "2"; + String MONTH= "3"; + String DAYS= "4"; } diff --git a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java index 1b02250..51e06ec 100644 --- a/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java +++ b/casic-public/src/main/java/com/casic/missiles/util/TimeConvertUtil.java @@ -1,8 +1,12 @@ package com.casic.missiles.util; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.dto.ReturnDTO; -import com.casic.missiles.model.response.ResponseData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class TimeConvertUtil { @@ -16,4 +20,39 @@ } return ""; } + + + public static List weekDays(){ + List weekDays = new ArrayList<>(); + DateTime dateTime= DateUtil.beginOfWeek(new Date()); + weekDays.add(DateUtil.beginOfWeek(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=6;i++){ + weekDays.add(DateUtil.offsetDay(dateTime,i).toString("yyyy-MM-dd")); + } + return weekDays; + } + + public static List monthDays(){ + List monthDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.beginOfMonth(new Date()); + DateTime dateTime2= DateUtil.endOfMonth(new Date()); + int daysOfCurrentMonth = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + monthDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=daysOfCurrentMonth;i++){ + monthDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return monthDays; + } + + public static List betweenDays(String begTime,String endTime){ + List betweenDays = new ArrayList<>(); + DateTime dateTime1= DateUtil.parseDateTime(begTime); + DateTime dateTime2= DateUtil.parseDateTime(endTime); + int betweenDay = (int) ((dateTime2.getTime() - dateTime1.getTime()) / (1000 * 60 * 60 * 24)); + betweenDays.add(DateUtil.beginOfMonth(new Date()).toString("yyyy-MM-dd")); + for(int i=1;i<=betweenDay;i++){ + betweenDays.add(DateUtil.offsetDay(dateTime1,i).toString("yyyy-MM-dd")); + } + return betweenDays; + } } diff --git a/casic-rest-api/pom.xml b/casic-rest-api/pom.xml index 0fe0c13..b30bca0 100644 --- a/casic-rest-api/pom.xml +++ b/casic-rest-api/pom.xml @@ -70,6 +70,15 @@ 2.0.0 compile + + io.netty + netty-all + + + org.bouncycastle + bcprov-jdk15on + 1.59 + diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java new file mode 100644 index 0000000..6f4da3a --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/DeviceCommon.java @@ -0,0 +1,52 @@ +package com.casic.missiles.modular.netty; + +import cn.hutool.core.util.ObjectUtil; +import io.netty.channel.Channel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * 全局变量,用于维护设备的登录信息 + */ +@Component +public class DeviceCommon { + + public static volatile ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(500); + public static volatile ConcurrentHashMap devcodeMap = new ConcurrentHashMap<>(); + + + public static Channel getChannelByName(String devCode) { + if (CollectionUtils.isEmpty(devcodeMap)) { + return null; + } + String channelId = devcodeMap.get(devCode); + if (ObjectUtil.isNotEmpty(channelId)) { + return CHANNEL_MAP.get(channelId); + } + return null; + } + + /** + * 将channel和对应的name添加到ConcurrentHashMap + */ + public static void addChannel(String channelId, Channel channel) { + CHANNEL_MAP.put(channelId, channel); + } + + /** + * 移除掉name对应的channel + */ + public static boolean removeChannelByName(String channelId) { + if (CHANNEL_MAP.containsKey(channelId)) { + CHANNEL_MAP.remove(channelId); + if(devcodeMap.containsValue(channelId)){ + devcodeMap.values().removeIf(value->value.equals(channelId)); + } + return true; + } + return false; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java new file mode 100644 index 0000000..e2c7cdb --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/HjtDecoder.java @@ -0,0 +1,24 @@ +package com.casic.missiles.modular.netty; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; +import lombok.extern.slf4j.Slf4j; + +import java.nio.charset.Charset; +import java.util.List; + +/** + * @description: 将从接口取到的数据编码 + * @author: Stone + * @create: 2019-01-11 15:15 + **/ +@Slf4j +public class HjtDecoder extends MessageToMessageDecoder { + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { + log.info("hexBytes : " + ByteBufUtil.hexDump(msg) + ";" + " String : " + msg.toString(Charset.defaultCharset())); + out.add(msg.toString(Charset.defaultCharset())); + } +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java new file mode 100644 index 0000000..993a9bf --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServer.java @@ -0,0 +1,60 @@ +package com.casic.missiles.modular.netty; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; + +@Component +public class NettyServer { + + //负责处理接受进来的链接 + private EventLoopGroup bossGroup; + //负责处理已经被接收的连接上的I/O操作 + private EventLoopGroup workerGroup; + //在这个场景中,它表示服务器的绑定操作的结果 + private ChannelFuture future; + + @EventListener(ApplicationStartedEvent.class) + public void startServer() throws Exception { + bossGroup = new NioEventLoopGroup(); + workerGroup = new NioEventLoopGroup(); + try { + //创建ServerBootstrap,这个类封装了服务器端的网络配置,使得我们可以轻松地设置服务器参数 + ServerBootstrap bootstrap = new ServerBootstrap(); + bootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler(new NettyServerInitializer()) + .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) + .option(ChannelOption.SO_BACKLOG, 1024) // 设置的ServerChannel的一些选项 + .childOption(ChannelOption.SO_KEEPALIVE, true); + + // 绑定端口并开始接受进来的连接 + future = bootstrap.bind(7000).sync(); + + // 等待服务器套接字关闭 + future.channel().closeFuture().sync(); + } finally { + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } + } + + @PreDestroy + public void stopServer() { + if (future != null && !future.isDone()) { + future.cancel(true); + } + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java new file mode 100644 index 0000000..43780ea --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/NettyServerInitializer.java @@ -0,0 +1,29 @@ +package com.casic.missiles.modular.netty; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.string.StringDecoder; +import io.netty.handler.codec.string.StringEncoder; +import io.netty.util.CharsetUtil; + +import java.nio.charset.StandardCharsets; + +public class NettyServerInitializer extends ChannelInitializer { + + @Override + protected void initChannel(SocketChannel ch) { + ChannelPipeline pipeline = ch.pipeline(); + + // 添加一个字符串解码器,用于将接收到的ByteBuf转换成字符串 + // 这里假设使用的是UTF-8字符集 + pipeline.addLast("decoder", new StringDecoder(StandardCharsets.UTF_8)); + + // 添加一个字符串编码器,用于将发送的字符串转换成ByteBuf + // 这样服务器发送字符串时,客户端可以直接接收到字符串 + pipeline.addLast("encoder", new StringEncoder(StandardCharsets.UTF_8)); + + // 添加自定义的ChannelInboundHandlerAdapter来处理业务逻辑 + pipeline.addLast("handler", new PanTiltChannelHandler()); + } +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java new file mode 100644 index 0000000..fbdc1c9 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/PanTiltChannelHandler.java @@ -0,0 +1,69 @@ +package com.casic.missiles.modular.netty; + + +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; + +import java.nio.charset.StandardCharsets; + +public class PanTiltChannelHandler extends ChannelInboundHandlerAdapter { + //保留所有与服务器建立连接的channel对象,这边的GlobalEventExecutor在写博客的时候解释一下,看其doc +// private static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); + + /** + * 服务器端收到任何一个客户端的消息都会触发这个方法 + * 连接的客户端向服务器端发送消息,那么其他客户端都收到此消息,自己收到【自己】+消息 + */ + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + super.channelRead(ctx, msg); + Channel channel = ctx.channel(); + channel.writeAndFlush(Unpooled.copiedBuffer(msg.toString().getBytes(StandardCharsets.UTF_8))); + String devCode = "1231313123"; + DeviceCommon.devcodeMap.put(devCode,channel.id().asLongText()); + } + + //表示服务端与客户端连接建立 + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); //其实相当于一个connection + + /** + * 调用channelGroup的writeAndFlush其实就相当于channelGroup中的每个channel都writeAndFlush + * + * 先去广播,再将自己加入到channelGroup中 + */ +// channelGroup.writeAndFlush(" 【服务器】 -" + channel.remoteAddress() + " 加入\n"); +// channelGroup.add(channel); + DeviceCommon.addChannel(channel.id().asLongText(),channel); + + } + + @Override + public void handlerRemoved(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + DeviceCommon.removeChannelByName(channel.id().asLongText()); + } + + //连接处于活动状态 + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 上线了"); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + Channel channel = ctx.channel(); + System.out.println(channel.remoteAddress() + " 下线了"); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + cause.printStackTrace(); + ctx.close(); + } + +} \ No newline at end of file diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java new file mode 100644 index 0000000..371b940 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/netty/TestController.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.netty; + +import com.casic.missiles.core.base.controller.ExportController; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.nio.charset.StandardCharsets; + +@Api(tags = "test") +@RequiredArgsConstructor +@RestController +@RequestMapping("/test") +public class TestController extends ExportController { + @PostMapping("/test") + public void repairLog() { + Channel channel = DeviceCommon.getChannelByName("1231313123"); + channel.writeAndFlush(Unpooled.copiedBuffer("send command".getBytes(StandardCharsets.UTF_8))); + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java new file mode 100644 index 0000000..6b560ec --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/ByteUtil.java @@ -0,0 +1,496 @@ +package com.casic.missiles.modular.util; + +import org.springframework.stereotype.Component; + +@Component +public class ByteUtil { + + /* BCD码转换为数值或字符 */ + + /** + * 单一字节中选择指定位bcd码转换为整数 + * 如ByteUtil.bcdToInt((byte) 0x33, 5, 4) = 3 + * + * @param b + * @param highBit 高位,最大7 + * @param lowBit 低位,从0开始 + * @return + */ + public static int bcdToInt(byte b, int highBit, int lowBit) { + int g = highBit - lowBit + 1; + int a = ((int) Math.pow(2, g) - 1) << lowBit; + int b2 = (b & a) >> lowBit; + if (b2 < 0 || b2 >= 10) { + return -1; + } + return b2; + } + + /** + * bcd码转换为整数 错误则返回-1 + * 如ByteUtil.bcdToInt((byte) 0x73) = 73 + * + * @param b 输入字节,默认4位一组,先高后低 + * @return + */ + public static int bcdToInt(byte b) { + int pl = 0x0f; + int ph = 0xf0; + + int h = (ph & b) >> 4; + int l = (pl & b); + + if (h >= 10 || l >= 10) { + return -1; + } + return h * 10 + l; + } + + /** + * bcd码转换为long型整数 + * 如字节数组{0x25, 0x23}转换为2523 + * + * @param + * @return + */ + public static long bcdToLong(byte[] bytes) { + if (ByteUtil.bcdToString(bytes).equals("") == false) + return Long.valueOf(ByteUtil.bcdToString(bytes)).longValue(); + else + return -1; + } + + + /** + * bcd码转换为字符串 按字节顺序 高位在前低位在后 + * 如字节数组{0x01, 0x02, 0x03}转换为"010203" + * + * @param bytes + * @return + */ + public static String bcdToString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + if (ByteUtil.bcdToInt(bytes[i], 7, 4) != -1 && ByteUtil.bcdToInt(bytes[i], 3, 0) != -1) { + sb.append(ByteUtil.bcdToInt(bytes[i], 7, 4)); + sb.append(ByteUtil.bcdToInt(bytes[i], 3, 0)); + } + } + + return sb.toString(); + } + + + /* BIN码转换为数值或字符 */ + + /** + * 单一字节中选择指定位bin码转换为整数 + * 如ByteUtil.binToInt((byte) 0xA3, 7, 7) = 1 + * + * @param b + * @param highBit 高位,最大7 + * @param lowBit 低位,从0开始 + * @return + */ + public static int binToInt(byte b, int highBit, int lowBit) throws RuntimeException { + int g = highBit - lowBit + 1; + int a = ((int) Math.pow(2, g) - 1) << lowBit; + int b2 = (b & a) >> lowBit; + if (b2 < 0 || b2 >= 16) { + throw new RuntimeException(); + } + return b2; + } + + /** + * BIN字节转换为整数 + * 如ByteUtil.bcdToInt((byte) 0x7B) = 123 + * + * @param b + * @return + */ + public static int binToInt(byte b) { + int i1 = 0x80 & b; + if (i1 == 0x80) { + int i2 = 0x7f & b; + return 128 + i2; + } else { + return b; + } + } + + /** + * BIN码转换为整数 高位在前低位在后 + * 如ByteUtil.bcdToInt(new byte[] {(byte) 0x7B, 0x22}) = 31522 + * + * @param bytes + * @return + */ + public static int binToInt(byte[] bytes) { + int i10 = 0; + if (null != bytes && bytes.length != 0) { + for (int i = 0; i < bytes.length; i++) { + i10 = i10 + new Double(Math.pow(16, (bytes.length - i - 1) * 2)).intValue() * ByteUtil.binToInt(bytes[i]); + } + } + return i10; + } + + /** + * BIN码转换为LONG型整数 高位在前低位在后 + * 如ByteUtil.bcdToLong(new byte[] {(byte) 0x7B, 0x22, 0x32, 0x9A}) = 2065838746 + * + * @param bytes + * @return + */ + public static int binToLong(byte[] bytes) { + int l10 = 0; + if (null != bytes && bytes.length != 0) { + for (int i = 0; i < bytes.length; i++) { + l10 = l10 + new Double(Math.pow(16, (bytes.length - i - 1) * 2)).intValue() * ByteUtil.binToInt(bytes[i]); + } + } + return l10; + } + + /** + * 字节数组转换为16进制字符串 按字节数组顺序转换 + * 如字节数组{0x21, 0x06, 0x01, 0x04, 0x40, (byte) 0xE2, 0x01}转换为"2106010440E201" + * + * @param bytes + * @return + */ + public static String binToHexString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + sb.append(Integer.toHexString(binToInt((byte) ((bytes[i] & 0xf0) >> 4))).toUpperCase()); + sb.append(Integer.toHexString(binToInt((byte) (bytes[i] & 0x0f))).toUpperCase()); + } + + return sb.toString(); + } + + + /** + * BIN输出为二进制字符串 + * 如字节数组{0x01, 0x38}转换为字符串"0000000100111000" + * + * @param bytes + * @return + */ + public static String binToBinString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < bytes.length; i++) { + String s = Integer.toBinaryString(binToInt(bytes[i])); + while (s.length() < 8) { + s = "0" + s; + } + sb.append(s); + } + + return sb.toString(); + } + + + /* int转换为BCD码或BIN码 */ + /** + * 两位整数转换成一个字节的BCD码 + * 大于100的整数取其十位和个位 十位在前个位在后 + * 如79转换为0x79 + * + * @param i + * @return + */ + public static byte intToBcd(int i) { + byte b = 0x00; + while (i > 99) { + i = i % 100; + } + + int l = i % 10; + int h = i / 10; + + b = (byte) (h << 4 | l); + + return b; + } + + /** + * 整数转换为字节数组 高位在前低位在后 + * 如 2379转换为0x23, 0x79 + * + * @param + * @return + */ + public static byte[] intToBcds(long l) { + String str = String.valueOf(l); + Bytes bytes = new Bytes(); + + if (str.length() % 2 == 1) { + str = "0" + str; + } + + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append(ByteUtil.intToBcd(Integer.parseInt(s))); + } + + return bytes.toBytes(); + } + + /** + * 整数转换为指定字节数的BCD码数组 高位在前低位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0x34, 0x79, 指定6字节转换为0x00, 0x00, 0x03, 0x01, 0x34, 0x79 + * + * @param + * @param length + * @return + */ + public static byte[] intToBcds(long l, int length) { + byte[] bts = intToBcds(l); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + /** + * 整数转换为指定字节数的BCD码数组 低位在前高位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0x79, 0x34, 指定6字节转换为0x79, 0x34, 0x01, 0x03, 0x00, 0x00 + * + * @param + * @param length + * @return + */ + public static byte[] intToBcdsHL(long l, int length) { + Bytes bs = new Bytes(); + + for (int i = 0; i < length; i++) { + int low = (int) (l % 100); + bs.append(ByteUtil.intToBcd(low)); + l = l / 100; + } + + return bs.toBytes(); + } + + /** + * 整数转换为BIN码字节数组 高位在前低位在后 + * 如113479转换为0x01, 0xBB, 0x47 + * + * @param l + * @return + */ + public static byte[] intToBins(long l) { + String str = Long.toHexString(l); + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append((byte) Integer.parseInt(s, 16)); + } + + return bytes.toBytes(); + } + + /** + * 整数转换为指定字节数的BIN码数组 高位在前低位在后 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如 3013479指定2字节转换为0xFB, 0x67, 指定6字节转换为0x00, 0x00, 0x00, 0x2D, 0xFB, 0x67 + * + * @param l + * @param length + * @return + */ + public static byte[] intToBins(long l, int length) { + byte[] bts = intToBins(l); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + + /* 16进制字符串转换为字节数组 */ + /** + * 16进制字符串顺序转换为字节数组 + * 如字符串"13810411703"转换为字节数组{0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @return + */ + public static byte[] hexStringToBytes(String str) { + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append((byte) Integer.parseInt(s, 16)); + } + + return bytes.toBytes(); + } + + /** + * 16进制字符串顺序转换为指定字节数的BIN码数组 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如字符串"13810411703"转换为3字节数组{0x41, 0x17, 0x03}, 指定8字节转换为{0x00, 0x00, 0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @param length + * @return + */ + public static byte[] hexStringToBytes(String str, int length) { + byte[] bts = hexStringToBytes(str); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + + /* 十进制BCD码字符串转换为字节数组 */ + /** + * 十进制BCD码字符串顺序转换为字节数组 + * 如字符串"13810411703"转换为字节数组{0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @return + */ + public static byte[] bcdStringToBytes(String str) { + if (str.length() % 2 == 1) { + str = "0" + str; + } + + Bytes bytes = new Bytes(); + for (int i = 0; i < str.length() - 1; i = i + 2) { + String s = str.substring(i, i + 2); + bytes.append(ByteUtil.intToBcd(Integer.parseInt(s))); + } + + return bytes.toBytes(); + } + + /** + * 十进制BCD码字符串顺序转换为指定字节数的BCD码数组 从低位开始计算长度 超出部分忽略 不足部分在高位补0 + * 如字符串"13810411703"转换为3字节数组{0x41, 0x17, 0x03}, 指定8字节转换为{0x00, 0x00, 0x01, 0x38, 0x10, 0x41, 0x17, 0x03} + * + * @param str + * @param length + * @return + */ + public static byte[] bcdStringToBytes(String str, int length) { + byte[] bts = bcdStringToBytes(str); + if (bts.length == length) { + return bts; + } else { + byte[] bytes = new byte[length]; + for (int j = length - 1; j >= 0; j--) { + if (j + bts.length - length >= 0) { + bytes[j] = bts[j + bts.length - length]; + } else { + bytes[j] = 0x00; + } + } + + return bytes; + } + } + + public static String buildCRC16(byte[] data) { + byte[] buf = new byte[data.length];// 存储需要产生校验码的数据 + for (int i = 0; i < data.length; i++) { + buf[i] = data[i]; + } + int len = buf.length; + int crc = 0xFFFF;//16位 + for (int pos = 0; pos < len; pos++) { + if (buf[pos] < 0) { + crc ^= (int) buf[pos] + 256; // XOR byte into least sig. byte of + // crc + } else { + crc ^= (int) buf[pos]; // XOR byte into least sig. byte of crc + } + for (int i = 8; i != 0; i--) { // Loop over each bit + if ((crc & 0x0001) != 0) { // If the LSB is set + crc >>= 1; // Shift right and XOR 0xA001 + crc ^= 0xA001; + } else + // Else LSB is not set + crc >>= 1; // Just shift right + } + } + String c = Integer.toHexString(crc); + if (c.length() == 4) { + c = c.substring(2, 4) + c.substring(0, 2); + } else if (c.length() == 3) { + c = "0" + c; + c = c.substring(2, 4) + c.substring(0, 2); + } else if (c.length() == 2) { + c = "0" + c.substring(1, 2) + "0" + c.substring(0, 1); + } + return c; + } + + + public static byte[] byteMergerAll(byte[]... values) { + int length_byte = 0; + for (int i = 0; i < values.length; i++) { + length_byte += values[i].length; + } + byte[] all_byte = new byte[length_byte]; + int countLength = 0; + for (int i = 0; i < values.length; i++) { + byte[] b = values[i]; + System.arraycopy(b, 0, all_byte, countLength, b.length); + countLength += b.length; + } + return all_byte; + } + + public static String convertToHex(String str) { + char[] charArray = str.toCharArray(); + String hexString = ""; + for (char c : charArray) { + hexString += Integer.toHexString((int) c); + } + return hexString; + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/util/Bytes.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/Bytes.java new file mode 100644 index 0000000..a42789c --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/Bytes.java @@ -0,0 +1,73 @@ +package com.casic.missiles.modular.util; + +public class Bytes { + + private byte[] buffer = null; + + public Bytes() { + + } + + public Bytes append(byte b) { + byte[] nb = null; + if (buffer == null) { + nb = new byte[] { b }; + } else { + nb = new byte[buffer.length + 1]; + for (int i = 0; i < buffer.length; i++) { + nb[i] = buffer[i]; + } + nb[nb.length - 1] = b; + } + buffer = nb; + return this; + } + + public Bytes append(byte[] bs) { + if (bs == null) + return this; + byte[] nb = null; + if (buffer == null) { + buffer = bs; + } else { + nb = new byte[buffer.length + bs.length]; + for (int i = 0; i < buffer.length; i++) { + nb[i] = buffer[i]; + } + for (int i = 0; i < bs.length; i++) { + nb[buffer.length + i] = bs[i]; + } + buffer = nb; + } + return this; + } + + public byte[] toBytes() { + return buffer; + } + + public byte[] toBytes(int l) { + Bytes bs = new Bytes(); + + for (int i = 0; i < l; i++) { + if (i < buffer.length) { + bs.append(buffer[i]); + } else { + bs.append((byte) 0x00); + } + } + + return bs.toBytes(); + } + + public static void main(String[] args) { + Bytes bytes = new Bytes(); + int i = 0xf2; + byte a = 0x68; + byte[] b = new byte[] { 0x11, 0x22 }; + byte c = (byte) i; + byte[] r = bytes.append(a).append(b).append(c).toBytes(); + System.out.println(r); + } + +} diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/util/MsgUtil.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/MsgUtil.java new file mode 100644 index 0000000..b6bb868 --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/MsgUtil.java @@ -0,0 +1,98 @@ +package com.casic.missiles.modular.util; + +import org.springframework.stereotype.Component; + +@Component +public class MsgUtil { + + +// public static String code_ = "68-ED-A4-38-37-FF"; + + public static String getMsg(String data, String type, String code) { + byte[] code_bytes = ByteUtil.hexStringToBytes(ByteUtil.convertToHex(code)); + byte[] gas_bytes = {0x00, 0x01}; + byte[] strength_bytes = {0x00, 0x02}; + switch (type) { + case "1": + byte[] prefix_bytes = {0x01, 0x03, 0x04}; + byte[] data_bytes = ByteUtil.hexStringToBytes(Integer.toHexString((int) Double.parseDouble(data)), 4); + byte[] bytes = ByteUtil.byteMergerAll(prefix_bytes, data_bytes); + byte[] crc_bytes_1 = ByteUtil.hexStringToBytes(ByteUtil.buildCRC16(bytes)); + byte[] bytes_1 = ByteUtil.byteMergerAll(bytes, crc_bytes_1); + byte[] bytes_1_1 = ByteUtil.byteMergerAll(bytes_1, gas_bytes); + byte[] bytes2_1 = ByteUtil.byteMergerAll(bytes_1_1, code_bytes); + String crc = ByteUtil.binToHexString(bytes2_1); + return crc; + case "0": + byte[] prefix0_bytes = {0x01, 0x03, 0x02}; + byte[] data0_bytes = ByteUtil.hexStringToBytes(Integer.toHexString((int) Double.parseDouble(data)), 2); + byte[] bytes0 = ByteUtil.byteMergerAll(prefix0_bytes, data0_bytes); + byte[] crc_bytes = ByteUtil.hexStringToBytes(ByteUtil.buildCRC16(bytes0)); + byte[] bytes1 = ByteUtil.byteMergerAll(bytes0, crc_bytes); + byte[] bytes2 = ByteUtil.byteMergerAll(bytes1, code_bytes); + String crc0 = ByteUtil.bcdToString(bytes2); + return crc0; + default: + return ""; + } + + } + + public static void main(String[] args) { + String crc = getMsg("257", "0", ""); + System.out.println(crc); + + System.out.println(ByteUtil.hexStringToBytes("12654", 8)); + System.out.println(0xff); + System.out.println((byte) 126); + } + + + /** + * 设备编号加密 + * + * @param devCode + * @return + */ + public static String encode(String devCode) { + + String commandStr = "be0c30" + ByteUtil.bcdToString(ByteUtil.intToBcds(devCode.length() + 2, 2)) + devCode + "0000" + ByteUtil.buildCRC16(ByteUtil.bcdStringToBytes(devCode)) + "e0fe"; + return commandStr; + } + + /** + * 设备编号解密 + * + * @param devCode + * @return + */ + public static String decode(String devCode) { + String commandStr = "be0c32" + ByteUtil.bcdToString(ByteUtil.intToBcds(devCode.length() + 2, 2)) + devCode + "0000" + ByteUtil.buildCRC16(ByteUtil.bcdStringToBytes(devCode)) + "e0fe"; + return commandStr; + } + + + /** + * 设备编号加密返回 + * + * @param msg + * @return + */ + public static String encodeResult(String msg) { + + return msg.substring(10); + } + + /** + * 设备编号解密返回 + * + * @param msg + * @return + */ + public static String decodeResult(String msg) { + + return msg.substring(6); + } + +} + diff --git a/casic-rest-api/src/main/java/com/casic/missiles/modular/util/RSAUtil.java b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/RSAUtil.java new file mode 100644 index 0000000..78356be --- /dev/null +++ b/casic-rest-api/src/main/java/com/casic/missiles/modular/util/RSAUtil.java @@ -0,0 +1,368 @@ +package com.casic.missiles.modular.util; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.springframework.stereotype.Component; + +import javax.crypto.Cipher; +import java.io.ByteArrayOutputStream; +import java.security.*; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * RSA加密工具类 + * + * @author ACGkaka + * @since 2021-09-19 19:11:03 + */ +@Component +public class RSAUtil { + + /** + * 密钥类实例化入参 + */ + private static final String KEY_ALGORITHM = "RSA"; + /** + * Cipher类实例化入参 + */ + private static final String CIPHER_ALGORITHM = "RSA/ECB/PKCS1Padding"; + /** + * 密钥对中公钥映射key + */ + private static final String PUBLIC_KEY = "Casic203"; + /** + * 密钥对中私钥映射key + */ + private static final String PRIVATE_KEY = "Casic203_ptz"; + /** + * 签名类实例化入参 + */ + private static final String SIGNATURE_ALGORITHM = "MD5withRSA"; + /** + * RSA最大加密明文大小 + */ + private static final int MAX_ENCRYPT_BLOCK = 117; + + /** + * 初始化密钥对生成器时,指定密钥大小的整数值(安全漏洞,长度至少为2048) + */ + private static final int KEY_PAIR_INIT_SIZE = 2048; + + /** + * RSA最大解密密文大小, + * RSA 位数 如果采用1024 上面最大加密和最大解密则须填写: 117 128 + * RSA 位数 如果采用2048 上面最大加密和最大解密则须填写: 245 256 + */ + private static final int MAX_DECRYPT_BLOCK = 256; + + private static final char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + + + /** + * 北燃特定公钥 + */ + private static final String BR_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPpAX52jBLYqu9E3a95EV2FArV48n5LLQxajEXuuIsRr9fBykn4REeS1RIk4vQYEi1Tgs1xzXEQe2rWgTEnWj8rlscXdUZO0pnluj6YVAIc6SUJFIhLj81XLg8exLTZbSlIWzXHMXYmpkjH9yi7AB6wFRkJ0mOKD5MTdgz4IPK+QIDAQAB"; + + + private static final String BR_PRIVATE_KEY="MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAI+kBfnaMEtiq70Tdr3kRXYUCtXjyfkstDFqMRe64ixGv18HKSfhER5LVEiTi9BgSLVOCzXHNcRB7ataBMSdaPyuWxxd1Rk7SmeW6PphUAhzpJQkUiEuPzVcuDx7EtNltKUhbNccxdiamSMf3KLsAHrAVGQnSY4oPkxN2DPgg8r5AgMBAAECgYBARwcBkrjP0zzE5IPbX94Rg9CBfGiyX2XXQwzq8I8rfxE+JgctuFKfutfhjl0fhyaiM2Vi0F1oEJSZfDPsBACpd9EzDGQxaomLF6rFLXhy8bgb4MLkiuesgYIr/2XnQkeuqVmS+St7j57qfytTcfOj1H0VlLEYuEKWruuTwhhdnQJBAP1HL1brSWw8oFVjjtg9njzatQinUhTrAfS90VMr47L3bHknwDGeZ3IhptfObLXyIwN6pFAkrIE4vm2C6W6SXrMCQQCRLzSnP5YM4f8B2hXkPhVQEVc0eACscIO9L7JqbYjA7uq7WYoDxmk7KRIHh/grrSMA9Mqs3ON0zNdjifKoqAWjAkEAyc4AQCc011LvBVpQJKfj/uTcPcrjsdsWMeVUdgqQYLaX7Wjo0CBAmEWL5IOLRuVpVIpRhbHS6RtHT4ZxbDKf1QJAP0sgHkW3SbiArrL/1jhGnFhi9ynVyVdn52NS2dkUxF+kD7cyVwD5wWPfS084nvnlB7awYPoPY00mHWv3URWnFwJAGrr5YA4XH4Hr2hjDdiy+tBv3e1Ecq6AGesD8yMK8UHp2wS6PRhpa/efwPle7DB/YLurPpitG71dZE2BfRC1jfg=="; + /** + * 获取公钥字符串 + * + * @param keyMap 密钥对 + * @return 公钥字符串 + * @throws Exception 异常 + */ + public static String getPublicKeyStr(Map keyMap) throws Exception { + //获得map中的公钥对象 转为key对象 + Key key = (Key) keyMap.get(PUBLIC_KEY); + //编码返回字符串 + return encryptBASE64(key.getEncoded()); + } + + /** + * 获取私钥字符串 + * + * @param keyMap 密钥对 + * @return 私钥字符串 + * @throws Exception 异常 + */ + public static String getPrivateKeyStr(Map keyMap) throws Exception { + //获得map中的私钥对象 转为key对象 + Key key = (Key) keyMap.get(PRIVATE_KEY); + //编码返回字符串 + return encryptBASE64(key.getEncoded()); + } + + + /** + * 获取公钥 + * + * @param key 公钥字符串 + * @return 公钥 + * @throws Exception 异常 + */ + public static PublicKey getPublicKey(String key) throws Exception { + byte[] keyBytes; + keyBytes = decryptBASE64(key); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); + PublicKey publicKey = keyFactory.generatePublic(keySpec); + return publicKey; + } + + /** + * 获取私钥 + * + * @param key 私钥字符串 + * @return 私钥 + * @throws Exception 异常 + */ + public static PrivateKey getPrivateKey(String key) throws Exception { + byte[] keyBytes; + keyBytes = decryptBASE64(key); + // 修复异常:java.security.InvalidKeyException: IOException : algid parse error, not a sequence + Security.addProvider(new BouncyCastleProvider()); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + return privateKey; + } + + /** + * Base64解码,返回byte[] + * + * @param key 待解码字符串 + * @return 解码后的byte[] + */ + public static byte[] decryptBASE64(String key) { + return Base64.getMimeDecoder().decode(key); + } + + /** + * 将byte[]进行Base64编码 + * + * @param key 待编码的byte[] + * @return 编码后的字符串 + */ + public static String encryptBASE64(byte[] key) { + return Base64.getMimeEncoder().encodeToString(key); + } + + /** + * 生成签名 + * + * @param data 待生成签名内容 + * @param privateKeyStr 私钥 + * @return 签名信息 + * @throws Exception 异常 + */ + public static String sign(byte[] data, String privateKeyStr) throws Exception { + PrivateKey priK = getPrivateKey(new String(hexToBytes(privateKeyStr))); + Signature sig = Signature.getInstance(SIGNATURE_ALGORITHM); + sig.initSign(priK); + sig.update(data); + return bytesToHex(sig.sign()); + } + + /** + * 验证签名 + * + * @param data 待验证原文 + * @param sign 待验证签名 + * @param publicKeyStr 公钥 + * @return 是否验证成功 + * @throws Exception 异常 + */ + public static boolean verify(byte[] data, String sign, String publicKeyStr) throws Exception { + PublicKey pubK = getPublicKey(new String(hexToBytes(publicKeyStr))); + Signature sig = Signature.getInstance(SIGNATURE_ALGORITHM); + sig.initVerify(pubK); + sig.update(data); + return sig.verify(hexToBytes(sign)); + } + + /** + * RSA加密 + * + * @param plainText 待加密内容 + * @param publicKeyStr 公钥字符串 + * @return 加密后内容 + * @throws Exception 异常 + */ + public static String encrypt(byte[] plainText, String publicKeyStr) throws Exception { + PublicKey publicKey = getPublicKey(publicKeyStr); + Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + int inputLen = plainText.length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offSet = 0; + int i = 0; + byte[] cache; + while (inputLen - offSet > 0) { + if (inputLen - offSet > MAX_ENCRYPT_BLOCK) { + cache = cipher.doFinal(plainText, offSet, MAX_ENCRYPT_BLOCK); + } else { + cache = cipher.doFinal(plainText, offSet, inputLen - offSet); + } + out.write(cache, 0, cache.length); + i++; + offSet = i * MAX_ENCRYPT_BLOCK; + } + byte[] encryptText = out.toByteArray(); + out.close(); + return bytesToHex(encryptText); + } + + /** + * RSA解密 + * + * @param encryptTextHex 已加密内容 + * @param privateKeyStr 私钥字符串 + * @return 解密后内容 + * @throws Exception 异常 + */ + public static String decrypt(String encryptTextHex, String privateKeyStr) throws Exception { + byte[] encryptText = hexToBytes(encryptTextHex); + PrivateKey privateKey = getPrivateKey(privateKeyStr); + Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + int inputLen = encryptText.length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offSet = 0; + byte[] cache; + int i = 0; + // 对数据分段解密 + while (inputLen - offSet > 0) { + if (inputLen - offSet > MAX_DECRYPT_BLOCK) { + cache = cipher.doFinal(encryptText, offSet, MAX_DECRYPT_BLOCK); + } else { + cache = cipher.doFinal(encryptText, offSet, inputLen - offSet); + } + out.write(cache, 0, cache.length); + i++; + offSet = i * MAX_DECRYPT_BLOCK; + } + byte[] plainText = out.toByteArray(); + out.close(); + return new String(plainText); + } + + public static Map initKey() throws Exception { + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM); + keyPairGen.initialize(KEY_PAIR_INIT_SIZE); + KeyPair keyPair = keyPairGen.generateKeyPair(); + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); + Map keyMap = new HashMap<>(2); + keyMap.put(PUBLIC_KEY, publicKey); + keyMap.put(PRIVATE_KEY, privateKey); + return keyMap; + } + + /** + * 将byte[]转换为16进制字符串 + * + * @param bytes 待转换byte[] + * @return 转换后的字符串 + */ + public static String bytesToHex(byte[] bytes) { + //一个byte为8位,可用两个十六进制位标识 + char[] buf = new char[bytes.length * 2]; + int a = 0; + int index = 0; + for (byte b : bytes) { // 使用除与取余进行转换 + if (b < 0) { + a = 256 + b; + } else { + a = b; + } + + buf[index++] = HEX_CHAR[a / 16]; + buf[index++] = HEX_CHAR[a % 16]; + } + return new String(buf); + } + + /** + * 将16进制字符串转换为byte[] + * + * @param str 待转换字符串 + * @return 转换后的byte[] + */ + public static byte[] hexToBytes(String str) { + if (str == null || "".equals(str.trim())) { + return new byte[0]; + } + + byte[] bytes = new byte[str.length() / 2]; + for (int i = 0; i < str.length() / 2; i++) { + String subStr = str.substring(i * 2, i * 2 + 2); + bytes[i] = (byte) Integer.parseInt(subStr, 16); + } + + return bytes; + } + + + public static String getMsg(String msg) { + String encodeMsg = ""; + try { + // 初始化密钥对 +// Map keyMap = initKey(); +// // 获取公钥字符串 +// String publicKey = getPublicKeyStr(keyMap); +// // 获取私钥字符串 +// String privateKey = getPrivateKeyStr(keyMap); + + // 进行RSA加密 + encodeMsg = encrypt(msg.getBytes(), BR_PUBLIC_KEY); + } catch (Exception e) { + e.printStackTrace(); + } + return encodeMsg; + } + + + public static void main(String[] args) throws Exception { + // 初始化密钥对 + Map keyMap = initKey(); + // 获取公钥字符串 + String publicKey = getPublicKeyStr(keyMap); + // 获取私钥字符串 + String privateKey = getPrivateKeyStr(keyMap); + + // 打印公钥、私钥 + System.out.println("公钥:(填充方式:PKCS1_PADDING,输出类型:base64,字符集:utf8编码)"); + System.out.println("-----BEGIN PUBLIC KEY-----"); + System.out.println(publicKey); + System.out.println("-----END PUBLIC KEY-----"); + System.out.println("\n"); + + System.out.println("私钥:(填充方式:PKCS1_PADDING,输出类型:base64,字符集:utf8编码)"); + System.out.println("-----BEGIN RSA PRIVATE KEY-----"); + System.out.println(privateKey); + System.out.println("-----END RSA PRIVATE KEY-----"); + System.out.println("\n"); + + // 待加密内容,例:123 + String s = "010304000001013A63000136382D45442D41342D33382D33372D4345"; + // 进行RSA加密 + String encrypt = encrypt(s.getBytes(), BR_PUBLIC_KEY); + // 打印加密后内容 + System.out.println("密文:(填充方式:PKCS1_PADDING,输出类型:hex,字符集:utf8编码)"); + System.out.println(encrypt); + System.out.println("\n"); + + // 进行RSA解密 + String decrypt = decrypt(encrypt, BR_PRIVATE_KEY); + // 打印解密后内容 + System.out.println("解密后明文: "); + System.out.println(decrypt); + } +} +