diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java new file mode 100644 index 0000000..cba3aeb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FocusVideoDTO { + /** + * 监控点名称 + */ + @ApiModelProperty(value = "监控点名称", dataType = "String") + private String monitorName; + /** + * 监控点ID + */ + @ApiModelProperty(value = "监控点ID", dataType = "String") + private String monitorId; + /** + * 监控点国标号 + */ + @ApiModelProperty(value = "监控点国标", dataType = "String") + private String cameraIndexCode; + @ApiModelProperty(value = "告警数", dataType = "String") + private Integer alarmNum; + private List riskDTOList; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java new file mode 100644 index 0000000..cba3aeb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FocusVideoDTO { + /** + * 监控点名称 + */ + @ApiModelProperty(value = "监控点名称", dataType = "String") + private String monitorName; + /** + * 监控点ID + */ + @ApiModelProperty(value = "监控点ID", dataType = "String") + private String monitorId; + /** + * 监控点国标号 + */ + @ApiModelProperty(value = "监控点国标", dataType = "String") + private String cameraIndexCode; + @ApiModelProperty(value = "告警数", dataType = "String") + private Integer alarmNum; + private List riskDTOList; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java new file mode 100644 index 0000000..1e7f3b2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +@Data +public class RiskDTO { + /** + * 危险点类型 + */ + private Integer riskType; + /** + * 危险点名称 + */ + @ApiModelProperty(value = "危险点名称", dataType = "String") + private String riskName; + @JsonIgnore + private String workProcedure; + @JsonIgnore + private String hazardousWork; + @JsonIgnore + private String hazardousChemicalSite; + /** + * 危险性质 + */ + @ApiModelProperty(value = "伤害种类", dataType = "String") + private String nature; + @ApiModelProperty(value = "关注对象", dataType = "String") + private String attention; + /** + * 主要危害描述 + */ + @JsonIgnore + private String hazardousRemark; + @JsonIgnore + private String accidentType; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java new file mode 100644 index 0000000..cba3aeb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FocusVideoDTO { + /** + * 监控点名称 + */ + @ApiModelProperty(value = "监控点名称", dataType = "String") + private String monitorName; + /** + * 监控点ID + */ + @ApiModelProperty(value = "监控点ID", dataType = "String") + private String monitorId; + /** + * 监控点国标号 + */ + @ApiModelProperty(value = "监控点国标", dataType = "String") + private String cameraIndexCode; + @ApiModelProperty(value = "告警数", dataType = "String") + private Integer alarmNum; + private List riskDTOList; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java new file mode 100644 index 0000000..1e7f3b2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +@Data +public class RiskDTO { + /** + * 危险点类型 + */ + private Integer riskType; + /** + * 危险点名称 + */ + @ApiModelProperty(value = "危险点名称", dataType = "String") + private String riskName; + @JsonIgnore + private String workProcedure; + @JsonIgnore + private String hazardousWork; + @JsonIgnore + private String hazardousChemicalSite; + /** + * 危险性质 + */ + @ApiModelProperty(value = "伤害种类", dataType = "String") + private String nature; + @ApiModelProperty(value = "关注对象", dataType = "String") + private String attention; + /** + * 主要危害描述 + */ + @JsonIgnore + private String hazardousRemark; + @JsonIgnore + private String accidentType; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java new file mode 100644 index 0000000..c067f09 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java @@ -0,0 +1,174 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; +import com.casic.missiles.modular.device.dto.RiskPointDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.AlarmRecord; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.system.service.IConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 模型管理Controller + * + * @author lwh + * @date 2024-11-20 + */ +@Api(tags = "统计相关接口") +@RestController +@RequestMapping("/statistics") +public class StatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public StatisticsController(IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService, AbstractAuthService authService, IAlarmRecordService alarmRecordService) { + this.busDeviceInfoService = busDeviceInfoService; + this.configService = configService; + this.riskPointInfoService = riskPointInfoService; + this.authService = authService; + this.alarmRecordService = alarmRecordService; + } + + @BussinessLog("隐患分类查询") + @ApiOperation(value = "隐患分类查询") + @GetMapping(value = "/dangerCategory") + public ResponseDataDTO dangerCategory() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); + return ResponseDataDTO.success(dangerCategory); + } + + @BussinessLog("区域隐患分布") + @ApiOperation(value = "区域隐患分布") + @GetMapping(value = "/areaDanger") + public ResponseDataDTO areaDanger() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位隐患分布") + @ApiOperation(value = "单位隐患分布") + @GetMapping(value = "/deptDanger") + public ResponseDataDTO list() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位月报警分析") + @ApiOperation(value = "单位月报警分析") + @GetMapping(value = "/dept/record") + public ResponseDataDTO deptRecord() { + QueryWrapper query = new QueryWrapper(); + //计算近一个月 + Date lastMonth = DateUtil.offsetMonth(new Date(), -1); + query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in("dept_id", scope.getDeptIds()); + } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位报警时间曲线") + @ApiOperation(value = "单位报警时间曲线") + @GetMapping(value = "/dept/alarm/date") + public ResponseDataDTO deptAlarmDate(@ApiParam("开始时间(yyyy-MM-dd)") String beginDate,@ApiParam("结束时间(yyyy-MM-dd)") String endDate) { + + QueryWrapper query = new QueryWrapper(); +// DataScope scope = authService.getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); +// } + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); + return ResponseDataDTO.success(videoNumDTO); + } + + @BussinessLog("区域接入视频点位数") + @ApiOperation(value = "区域接入视频点位数") + @GetMapping(value = "/videoPoint") + public ResponseDataDTO videoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + List areaNumDTOS = riskPointInfoService.videoPoint(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位设备接入数") + @ApiOperation(value = "单位设备接入数") + @GetMapping(value = "/deptVideoPoint") + public ResponseDataDTO deptVideoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptVideoPoint(query); + //统计组名称 + return ResponseDataDTO.success(videoNumDTO); + } + + + + @ApiOperation(value = "单位隐患分布分页查询") + @GetMapping(value = "/deptDangerPage") + public ResponseDataDTO> deptDangerPage() { + + Page page = PageFactory.defaultPage(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); + + Page pageDTO = PageFactory.defaultPage(); + pageDTO.setTotal(page.getTotal()); + pageDTO.setRecords(riskPointDTOS); + return ResponseDataDTO.success(super.packForBT(pageDTO)); + } + + + @BussinessLog("关注对象查询") + @ApiOperation(value = "关注对象查询") + @PostMapping(value = "/focus/video") + public ResponseDataDTO> focusVideos(@RequestBody VideoIdsBo videoIdsBo) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.in(BusDeviceInfo::getCameraIndexCode, videoIdsBo.getVideoNos()); + List riskPointDTOS = busDeviceInfoService.focusVideos(query); + return ResponseDataDTO.success(riskPointDTOS); + } + +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java new file mode 100644 index 0000000..cba3aeb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FocusVideoDTO { + /** + * 监控点名称 + */ + @ApiModelProperty(value = "监控点名称", dataType = "String") + private String monitorName; + /** + * 监控点ID + */ + @ApiModelProperty(value = "监控点ID", dataType = "String") + private String monitorId; + /** + * 监控点国标号 + */ + @ApiModelProperty(value = "监控点国标", dataType = "String") + private String cameraIndexCode; + @ApiModelProperty(value = "告警数", dataType = "String") + private Integer alarmNum; + private List riskDTOList; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java new file mode 100644 index 0000000..1e7f3b2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +@Data +public class RiskDTO { + /** + * 危险点类型 + */ + private Integer riskType; + /** + * 危险点名称 + */ + @ApiModelProperty(value = "危险点名称", dataType = "String") + private String riskName; + @JsonIgnore + private String workProcedure; + @JsonIgnore + private String hazardousWork; + @JsonIgnore + private String hazardousChemicalSite; + /** + * 危险性质 + */ + @ApiModelProperty(value = "伤害种类", dataType = "String") + private String nature; + @ApiModelProperty(value = "关注对象", dataType = "String") + private String attention; + /** + * 主要危害描述 + */ + @JsonIgnore + private String hazardousRemark; + @JsonIgnore + private String accidentType; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java new file mode 100644 index 0000000..c067f09 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java @@ -0,0 +1,174 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; +import com.casic.missiles.modular.device.dto.RiskPointDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.AlarmRecord; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.system.service.IConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 模型管理Controller + * + * @author lwh + * @date 2024-11-20 + */ +@Api(tags = "统计相关接口") +@RestController +@RequestMapping("/statistics") +public class StatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public StatisticsController(IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService, AbstractAuthService authService, IAlarmRecordService alarmRecordService) { + this.busDeviceInfoService = busDeviceInfoService; + this.configService = configService; + this.riskPointInfoService = riskPointInfoService; + this.authService = authService; + this.alarmRecordService = alarmRecordService; + } + + @BussinessLog("隐患分类查询") + @ApiOperation(value = "隐患分类查询") + @GetMapping(value = "/dangerCategory") + public ResponseDataDTO dangerCategory() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); + return ResponseDataDTO.success(dangerCategory); + } + + @BussinessLog("区域隐患分布") + @ApiOperation(value = "区域隐患分布") + @GetMapping(value = "/areaDanger") + public ResponseDataDTO areaDanger() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位隐患分布") + @ApiOperation(value = "单位隐患分布") + @GetMapping(value = "/deptDanger") + public ResponseDataDTO list() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位月报警分析") + @ApiOperation(value = "单位月报警分析") + @GetMapping(value = "/dept/record") + public ResponseDataDTO deptRecord() { + QueryWrapper query = new QueryWrapper(); + //计算近一个月 + Date lastMonth = DateUtil.offsetMonth(new Date(), -1); + query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in("dept_id", scope.getDeptIds()); + } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位报警时间曲线") + @ApiOperation(value = "单位报警时间曲线") + @GetMapping(value = "/dept/alarm/date") + public ResponseDataDTO deptAlarmDate(@ApiParam("开始时间(yyyy-MM-dd)") String beginDate,@ApiParam("结束时间(yyyy-MM-dd)") String endDate) { + + QueryWrapper query = new QueryWrapper(); +// DataScope scope = authService.getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); +// } + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); + return ResponseDataDTO.success(videoNumDTO); + } + + @BussinessLog("区域接入视频点位数") + @ApiOperation(value = "区域接入视频点位数") + @GetMapping(value = "/videoPoint") + public ResponseDataDTO videoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + List areaNumDTOS = riskPointInfoService.videoPoint(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位设备接入数") + @ApiOperation(value = "单位设备接入数") + @GetMapping(value = "/deptVideoPoint") + public ResponseDataDTO deptVideoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptVideoPoint(query); + //统计组名称 + return ResponseDataDTO.success(videoNumDTO); + } + + + + @ApiOperation(value = "单位隐患分布分页查询") + @GetMapping(value = "/deptDangerPage") + public ResponseDataDTO> deptDangerPage() { + + Page page = PageFactory.defaultPage(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); + + Page pageDTO = PageFactory.defaultPage(); + pageDTO.setTotal(page.getTotal()); + pageDTO.setRecords(riskPointDTOS); + return ResponseDataDTO.success(super.packForBT(pageDTO)); + } + + + @BussinessLog("关注对象查询") + @ApiOperation(value = "关注对象查询") + @PostMapping(value = "/focus/video") + public ResponseDataDTO> focusVideos(@RequestBody VideoIdsBo videoIdsBo) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.in(BusDeviceInfo::getCameraIndexCode, videoIdsBo.getVideoNos()); + List riskPointDTOS = busDeviceInfoService.focusVideos(query); + return ResponseDataDTO.success(riskPointDTOS); + } + +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java new file mode 100644 index 0000000..0765b84 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CommandDTO { + @ApiModelProperty(value = "盒子指令", dataType = "String",required = true) + private String command; + @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) + private Long boxId; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java new file mode 100644 index 0000000..cba3aeb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FocusVideoDTO { + /** + * 监控点名称 + */ + @ApiModelProperty(value = "监控点名称", dataType = "String") + private String monitorName; + /** + * 监控点ID + */ + @ApiModelProperty(value = "监控点ID", dataType = "String") + private String monitorId; + /** + * 监控点国标号 + */ + @ApiModelProperty(value = "监控点国标", dataType = "String") + private String cameraIndexCode; + @ApiModelProperty(value = "告警数", dataType = "String") + private Integer alarmNum; + private List riskDTOList; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java new file mode 100644 index 0000000..1e7f3b2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +@Data +public class RiskDTO { + /** + * 危险点类型 + */ + private Integer riskType; + /** + * 危险点名称 + */ + @ApiModelProperty(value = "危险点名称", dataType = "String") + private String riskName; + @JsonIgnore + private String workProcedure; + @JsonIgnore + private String hazardousWork; + @JsonIgnore + private String hazardousChemicalSite; + /** + * 危险性质 + */ + @ApiModelProperty(value = "伤害种类", dataType = "String") + private String nature; + @ApiModelProperty(value = "关注对象", dataType = "String") + private String attention; + /** + * 主要危害描述 + */ + @JsonIgnore + private String hazardousRemark; + @JsonIgnore + private String accidentType; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java new file mode 100644 index 0000000..c067f09 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java @@ -0,0 +1,174 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; +import com.casic.missiles.modular.device.dto.RiskPointDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.AlarmRecord; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.system.service.IConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 模型管理Controller + * + * @author lwh + * @date 2024-11-20 + */ +@Api(tags = "统计相关接口") +@RestController +@RequestMapping("/statistics") +public class StatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public StatisticsController(IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService, AbstractAuthService authService, IAlarmRecordService alarmRecordService) { + this.busDeviceInfoService = busDeviceInfoService; + this.configService = configService; + this.riskPointInfoService = riskPointInfoService; + this.authService = authService; + this.alarmRecordService = alarmRecordService; + } + + @BussinessLog("隐患分类查询") + @ApiOperation(value = "隐患分类查询") + @GetMapping(value = "/dangerCategory") + public ResponseDataDTO dangerCategory() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); + return ResponseDataDTO.success(dangerCategory); + } + + @BussinessLog("区域隐患分布") + @ApiOperation(value = "区域隐患分布") + @GetMapping(value = "/areaDanger") + public ResponseDataDTO areaDanger() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位隐患分布") + @ApiOperation(value = "单位隐患分布") + @GetMapping(value = "/deptDanger") + public ResponseDataDTO list() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位月报警分析") + @ApiOperation(value = "单位月报警分析") + @GetMapping(value = "/dept/record") + public ResponseDataDTO deptRecord() { + QueryWrapper query = new QueryWrapper(); + //计算近一个月 + Date lastMonth = DateUtil.offsetMonth(new Date(), -1); + query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in("dept_id", scope.getDeptIds()); + } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位报警时间曲线") + @ApiOperation(value = "单位报警时间曲线") + @GetMapping(value = "/dept/alarm/date") + public ResponseDataDTO deptAlarmDate(@ApiParam("开始时间(yyyy-MM-dd)") String beginDate,@ApiParam("结束时间(yyyy-MM-dd)") String endDate) { + + QueryWrapper query = new QueryWrapper(); +// DataScope scope = authService.getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); +// } + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); + return ResponseDataDTO.success(videoNumDTO); + } + + @BussinessLog("区域接入视频点位数") + @ApiOperation(value = "区域接入视频点位数") + @GetMapping(value = "/videoPoint") + public ResponseDataDTO videoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + List areaNumDTOS = riskPointInfoService.videoPoint(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位设备接入数") + @ApiOperation(value = "单位设备接入数") + @GetMapping(value = "/deptVideoPoint") + public ResponseDataDTO deptVideoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptVideoPoint(query); + //统计组名称 + return ResponseDataDTO.success(videoNumDTO); + } + + + + @ApiOperation(value = "单位隐患分布分页查询") + @GetMapping(value = "/deptDangerPage") + public ResponseDataDTO> deptDangerPage() { + + Page page = PageFactory.defaultPage(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); + + Page pageDTO = PageFactory.defaultPage(); + pageDTO.setTotal(page.getTotal()); + pageDTO.setRecords(riskPointDTOS); + return ResponseDataDTO.success(super.packForBT(pageDTO)); + } + + + @BussinessLog("关注对象查询") + @ApiOperation(value = "关注对象查询") + @PostMapping(value = "/focus/video") + public ResponseDataDTO> focusVideos(@RequestBody VideoIdsBo videoIdsBo) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.in(BusDeviceInfo::getCameraIndexCode, videoIdsBo.getVideoNos()); + List riskPointDTOS = busDeviceInfoService.focusVideos(query); + return ResponseDataDTO.success(riskPointDTOS); + } + +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java new file mode 100644 index 0000000..0765b84 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CommandDTO { + @ApiModelProperty(value = "盒子指令", dataType = "String",required = true) + private String command; + @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) + private Long boxId; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java new file mode 100644 index 0000000..29db19c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordAnalysisDTO { + private String deptId; + private String deptName; + private String num; + private String date; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java new file mode 100644 index 0000000..cba3aeb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FocusVideoDTO { + /** + * 监控点名称 + */ + @ApiModelProperty(value = "监控点名称", dataType = "String") + private String monitorName; + /** + * 监控点ID + */ + @ApiModelProperty(value = "监控点ID", dataType = "String") + private String monitorId; + /** + * 监控点国标号 + */ + @ApiModelProperty(value = "监控点国标", dataType = "String") + private String cameraIndexCode; + @ApiModelProperty(value = "告警数", dataType = "String") + private Integer alarmNum; + private List riskDTOList; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java new file mode 100644 index 0000000..1e7f3b2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +@Data +public class RiskDTO { + /** + * 危险点类型 + */ + private Integer riskType; + /** + * 危险点名称 + */ + @ApiModelProperty(value = "危险点名称", dataType = "String") + private String riskName; + @JsonIgnore + private String workProcedure; + @JsonIgnore + private String hazardousWork; + @JsonIgnore + private String hazardousChemicalSite; + /** + * 危险性质 + */ + @ApiModelProperty(value = "伤害种类", dataType = "String") + private String nature; + @ApiModelProperty(value = "关注对象", dataType = "String") + private String attention; + /** + * 主要危害描述 + */ + @JsonIgnore + private String hazardousRemark; + @JsonIgnore + private String accidentType; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java new file mode 100644 index 0000000..c067f09 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java @@ -0,0 +1,174 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; +import com.casic.missiles.modular.device.dto.RiskPointDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.AlarmRecord; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.system.service.IConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 模型管理Controller + * + * @author lwh + * @date 2024-11-20 + */ +@Api(tags = "统计相关接口") +@RestController +@RequestMapping("/statistics") +public class StatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public StatisticsController(IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService, AbstractAuthService authService, IAlarmRecordService alarmRecordService) { + this.busDeviceInfoService = busDeviceInfoService; + this.configService = configService; + this.riskPointInfoService = riskPointInfoService; + this.authService = authService; + this.alarmRecordService = alarmRecordService; + } + + @BussinessLog("隐患分类查询") + @ApiOperation(value = "隐患分类查询") + @GetMapping(value = "/dangerCategory") + public ResponseDataDTO dangerCategory() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); + return ResponseDataDTO.success(dangerCategory); + } + + @BussinessLog("区域隐患分布") + @ApiOperation(value = "区域隐患分布") + @GetMapping(value = "/areaDanger") + public ResponseDataDTO areaDanger() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位隐患分布") + @ApiOperation(value = "单位隐患分布") + @GetMapping(value = "/deptDanger") + public ResponseDataDTO list() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位月报警分析") + @ApiOperation(value = "单位月报警分析") + @GetMapping(value = "/dept/record") + public ResponseDataDTO deptRecord() { + QueryWrapper query = new QueryWrapper(); + //计算近一个月 + Date lastMonth = DateUtil.offsetMonth(new Date(), -1); + query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in("dept_id", scope.getDeptIds()); + } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位报警时间曲线") + @ApiOperation(value = "单位报警时间曲线") + @GetMapping(value = "/dept/alarm/date") + public ResponseDataDTO deptAlarmDate(@ApiParam("开始时间(yyyy-MM-dd)") String beginDate,@ApiParam("结束时间(yyyy-MM-dd)") String endDate) { + + QueryWrapper query = new QueryWrapper(); +// DataScope scope = authService.getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); +// } + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); + return ResponseDataDTO.success(videoNumDTO); + } + + @BussinessLog("区域接入视频点位数") + @ApiOperation(value = "区域接入视频点位数") + @GetMapping(value = "/videoPoint") + public ResponseDataDTO videoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + List areaNumDTOS = riskPointInfoService.videoPoint(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位设备接入数") + @ApiOperation(value = "单位设备接入数") + @GetMapping(value = "/deptVideoPoint") + public ResponseDataDTO deptVideoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptVideoPoint(query); + //统计组名称 + return ResponseDataDTO.success(videoNumDTO); + } + + + + @ApiOperation(value = "单位隐患分布分页查询") + @GetMapping(value = "/deptDangerPage") + public ResponseDataDTO> deptDangerPage() { + + Page page = PageFactory.defaultPage(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); + + Page pageDTO = PageFactory.defaultPage(); + pageDTO.setTotal(page.getTotal()); + pageDTO.setRecords(riskPointDTOS); + return ResponseDataDTO.success(super.packForBT(pageDTO)); + } + + + @BussinessLog("关注对象查询") + @ApiOperation(value = "关注对象查询") + @PostMapping(value = "/focus/video") + public ResponseDataDTO> focusVideos(@RequestBody VideoIdsBo videoIdsBo) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.in(BusDeviceInfo::getCameraIndexCode, videoIdsBo.getVideoNos()); + List riskPointDTOS = busDeviceInfoService.focusVideos(query); + return ResponseDataDTO.success(riskPointDTOS); + } + +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java new file mode 100644 index 0000000..0765b84 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CommandDTO { + @ApiModelProperty(value = "盒子指令", dataType = "String",required = true) + private String command; + @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) + private Long boxId; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java new file mode 100644 index 0000000..29db19c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordAnalysisDTO { + private String deptId; + private String deptName; + private String num; + private String date; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java new file mode 100644 index 0000000..9df2592 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordDTO { + private String deptName; + private String num; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java new file mode 100644 index 0000000..cba3aeb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FocusVideoDTO { + /** + * 监控点名称 + */ + @ApiModelProperty(value = "监控点名称", dataType = "String") + private String monitorName; + /** + * 监控点ID + */ + @ApiModelProperty(value = "监控点ID", dataType = "String") + private String monitorId; + /** + * 监控点国标号 + */ + @ApiModelProperty(value = "监控点国标", dataType = "String") + private String cameraIndexCode; + @ApiModelProperty(value = "告警数", dataType = "String") + private Integer alarmNum; + private List riskDTOList; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java new file mode 100644 index 0000000..1e7f3b2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +@Data +public class RiskDTO { + /** + * 危险点类型 + */ + private Integer riskType; + /** + * 危险点名称 + */ + @ApiModelProperty(value = "危险点名称", dataType = "String") + private String riskName; + @JsonIgnore + private String workProcedure; + @JsonIgnore + private String hazardousWork; + @JsonIgnore + private String hazardousChemicalSite; + /** + * 危险性质 + */ + @ApiModelProperty(value = "伤害种类", dataType = "String") + private String nature; + @ApiModelProperty(value = "关注对象", dataType = "String") + private String attention; + /** + * 主要危害描述 + */ + @JsonIgnore + private String hazardousRemark; + @JsonIgnore + private String accidentType; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java new file mode 100644 index 0000000..c067f09 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java @@ -0,0 +1,174 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; +import com.casic.missiles.modular.device.dto.RiskPointDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.AlarmRecord; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.system.service.IConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 模型管理Controller + * + * @author lwh + * @date 2024-11-20 + */ +@Api(tags = "统计相关接口") +@RestController +@RequestMapping("/statistics") +public class StatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public StatisticsController(IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService, AbstractAuthService authService, IAlarmRecordService alarmRecordService) { + this.busDeviceInfoService = busDeviceInfoService; + this.configService = configService; + this.riskPointInfoService = riskPointInfoService; + this.authService = authService; + this.alarmRecordService = alarmRecordService; + } + + @BussinessLog("隐患分类查询") + @ApiOperation(value = "隐患分类查询") + @GetMapping(value = "/dangerCategory") + public ResponseDataDTO dangerCategory() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); + return ResponseDataDTO.success(dangerCategory); + } + + @BussinessLog("区域隐患分布") + @ApiOperation(value = "区域隐患分布") + @GetMapping(value = "/areaDanger") + public ResponseDataDTO areaDanger() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位隐患分布") + @ApiOperation(value = "单位隐患分布") + @GetMapping(value = "/deptDanger") + public ResponseDataDTO list() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位月报警分析") + @ApiOperation(value = "单位月报警分析") + @GetMapping(value = "/dept/record") + public ResponseDataDTO deptRecord() { + QueryWrapper query = new QueryWrapper(); + //计算近一个月 + Date lastMonth = DateUtil.offsetMonth(new Date(), -1); + query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in("dept_id", scope.getDeptIds()); + } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位报警时间曲线") + @ApiOperation(value = "单位报警时间曲线") + @GetMapping(value = "/dept/alarm/date") + public ResponseDataDTO deptAlarmDate(@ApiParam("开始时间(yyyy-MM-dd)") String beginDate,@ApiParam("结束时间(yyyy-MM-dd)") String endDate) { + + QueryWrapper query = new QueryWrapper(); +// DataScope scope = authService.getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); +// } + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); + return ResponseDataDTO.success(videoNumDTO); + } + + @BussinessLog("区域接入视频点位数") + @ApiOperation(value = "区域接入视频点位数") + @GetMapping(value = "/videoPoint") + public ResponseDataDTO videoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + List areaNumDTOS = riskPointInfoService.videoPoint(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位设备接入数") + @ApiOperation(value = "单位设备接入数") + @GetMapping(value = "/deptVideoPoint") + public ResponseDataDTO deptVideoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptVideoPoint(query); + //统计组名称 + return ResponseDataDTO.success(videoNumDTO); + } + + + + @ApiOperation(value = "单位隐患分布分页查询") + @GetMapping(value = "/deptDangerPage") + public ResponseDataDTO> deptDangerPage() { + + Page page = PageFactory.defaultPage(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); + + Page pageDTO = PageFactory.defaultPage(); + pageDTO.setTotal(page.getTotal()); + pageDTO.setRecords(riskPointDTOS); + return ResponseDataDTO.success(super.packForBT(pageDTO)); + } + + + @BussinessLog("关注对象查询") + @ApiOperation(value = "关注对象查询") + @PostMapping(value = "/focus/video") + public ResponseDataDTO> focusVideos(@RequestBody VideoIdsBo videoIdsBo) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.in(BusDeviceInfo::getCameraIndexCode, videoIdsBo.getVideoNos()); + List riskPointDTOS = busDeviceInfoService.focusVideos(query); + return ResponseDataDTO.success(riskPointDTOS); + } + +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java new file mode 100644 index 0000000..0765b84 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CommandDTO { + @ApiModelProperty(value = "盒子指令", dataType = "String",required = true) + private String command; + @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) + private Long boxId; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java new file mode 100644 index 0000000..29db19c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordAnalysisDTO { + private String deptId; + private String deptName; + private String num; + private String date; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java new file mode 100644 index 0000000..9df2592 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordDTO { + private String deptName; + private String num; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java new file mode 100644 index 0000000..2c9bd95 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.device.dto.bo; + +import lombok.Data; + +import java.util.List; + +@Data +public class VideoIdsBo { + private List videoNos; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java new file mode 100644 index 0000000..cba3aeb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FocusVideoDTO { + /** + * 监控点名称 + */ + @ApiModelProperty(value = "监控点名称", dataType = "String") + private String monitorName; + /** + * 监控点ID + */ + @ApiModelProperty(value = "监控点ID", dataType = "String") + private String monitorId; + /** + * 监控点国标号 + */ + @ApiModelProperty(value = "监控点国标", dataType = "String") + private String cameraIndexCode; + @ApiModelProperty(value = "告警数", dataType = "String") + private Integer alarmNum; + private List riskDTOList; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java new file mode 100644 index 0000000..1e7f3b2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +@Data +public class RiskDTO { + /** + * 危险点类型 + */ + private Integer riskType; + /** + * 危险点名称 + */ + @ApiModelProperty(value = "危险点名称", dataType = "String") + private String riskName; + @JsonIgnore + private String workProcedure; + @JsonIgnore + private String hazardousWork; + @JsonIgnore + private String hazardousChemicalSite; + /** + * 危险性质 + */ + @ApiModelProperty(value = "伤害种类", dataType = "String") + private String nature; + @ApiModelProperty(value = "关注对象", dataType = "String") + private String attention; + /** + * 主要危害描述 + */ + @JsonIgnore + private String hazardousRemark; + @JsonIgnore + private String accidentType; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java new file mode 100644 index 0000000..c067f09 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java @@ -0,0 +1,174 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; +import com.casic.missiles.modular.device.dto.RiskPointDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.AlarmRecord; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.system.service.IConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 模型管理Controller + * + * @author lwh + * @date 2024-11-20 + */ +@Api(tags = "统计相关接口") +@RestController +@RequestMapping("/statistics") +public class StatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public StatisticsController(IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService, AbstractAuthService authService, IAlarmRecordService alarmRecordService) { + this.busDeviceInfoService = busDeviceInfoService; + this.configService = configService; + this.riskPointInfoService = riskPointInfoService; + this.authService = authService; + this.alarmRecordService = alarmRecordService; + } + + @BussinessLog("隐患分类查询") + @ApiOperation(value = "隐患分类查询") + @GetMapping(value = "/dangerCategory") + public ResponseDataDTO dangerCategory() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); + return ResponseDataDTO.success(dangerCategory); + } + + @BussinessLog("区域隐患分布") + @ApiOperation(value = "区域隐患分布") + @GetMapping(value = "/areaDanger") + public ResponseDataDTO areaDanger() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位隐患分布") + @ApiOperation(value = "单位隐患分布") + @GetMapping(value = "/deptDanger") + public ResponseDataDTO list() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位月报警分析") + @ApiOperation(value = "单位月报警分析") + @GetMapping(value = "/dept/record") + public ResponseDataDTO deptRecord() { + QueryWrapper query = new QueryWrapper(); + //计算近一个月 + Date lastMonth = DateUtil.offsetMonth(new Date(), -1); + query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in("dept_id", scope.getDeptIds()); + } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位报警时间曲线") + @ApiOperation(value = "单位报警时间曲线") + @GetMapping(value = "/dept/alarm/date") + public ResponseDataDTO deptAlarmDate(@ApiParam("开始时间(yyyy-MM-dd)") String beginDate,@ApiParam("结束时间(yyyy-MM-dd)") String endDate) { + + QueryWrapper query = new QueryWrapper(); +// DataScope scope = authService.getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); +// } + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); + return ResponseDataDTO.success(videoNumDTO); + } + + @BussinessLog("区域接入视频点位数") + @ApiOperation(value = "区域接入视频点位数") + @GetMapping(value = "/videoPoint") + public ResponseDataDTO videoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + List areaNumDTOS = riskPointInfoService.videoPoint(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位设备接入数") + @ApiOperation(value = "单位设备接入数") + @GetMapping(value = "/deptVideoPoint") + public ResponseDataDTO deptVideoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptVideoPoint(query); + //统计组名称 + return ResponseDataDTO.success(videoNumDTO); + } + + + + @ApiOperation(value = "单位隐患分布分页查询") + @GetMapping(value = "/deptDangerPage") + public ResponseDataDTO> deptDangerPage() { + + Page page = PageFactory.defaultPage(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); + + Page pageDTO = PageFactory.defaultPage(); + pageDTO.setTotal(page.getTotal()); + pageDTO.setRecords(riskPointDTOS); + return ResponseDataDTO.success(super.packForBT(pageDTO)); + } + + + @BussinessLog("关注对象查询") + @ApiOperation(value = "关注对象查询") + @PostMapping(value = "/focus/video") + public ResponseDataDTO> focusVideos(@RequestBody VideoIdsBo videoIdsBo) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.in(BusDeviceInfo::getCameraIndexCode, videoIdsBo.getVideoNos()); + List riskPointDTOS = busDeviceInfoService.focusVideos(query); + return ResponseDataDTO.success(riskPointDTOS); + } + +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java new file mode 100644 index 0000000..0765b84 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CommandDTO { + @ApiModelProperty(value = "盒子指令", dataType = "String",required = true) + private String command; + @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) + private Long boxId; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java new file mode 100644 index 0000000..29db19c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordAnalysisDTO { + private String deptId; + private String deptName; + private String num; + private String date; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java new file mode 100644 index 0000000..9df2592 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordDTO { + private String deptName; + private String num; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java new file mode 100644 index 0000000..2c9bd95 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.device.dto.bo; + +import lombok.Data; + +import java.util.List; + +@Data +public class VideoIdsBo { + private List videoNos; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java new file mode 100644 index 0000000..7117463 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.device.dto.CommandDTO; + +import javax.servlet.http.HttpSession; + +public interface IDeviceAuthService { + ResponseData deviceLogin(DeviceLoginForm deviceLoginForm, HttpSession session); + + /** + * 盒子状态更新 + * @param code 盒子编码 + */ + void reloadStatus(String code); + + /** + * 盒子指令下发 + * @param commandDTO + */ + void sendCommand(CommandDTO commandDTO); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java new file mode 100644 index 0000000..cba3aeb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FocusVideoDTO { + /** + * 监控点名称 + */ + @ApiModelProperty(value = "监控点名称", dataType = "String") + private String monitorName; + /** + * 监控点ID + */ + @ApiModelProperty(value = "监控点ID", dataType = "String") + private String monitorId; + /** + * 监控点国标号 + */ + @ApiModelProperty(value = "监控点国标", dataType = "String") + private String cameraIndexCode; + @ApiModelProperty(value = "告警数", dataType = "String") + private Integer alarmNum; + private List riskDTOList; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java new file mode 100644 index 0000000..1e7f3b2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +@Data +public class RiskDTO { + /** + * 危险点类型 + */ + private Integer riskType; + /** + * 危险点名称 + */ + @ApiModelProperty(value = "危险点名称", dataType = "String") + private String riskName; + @JsonIgnore + private String workProcedure; + @JsonIgnore + private String hazardousWork; + @JsonIgnore + private String hazardousChemicalSite; + /** + * 危险性质 + */ + @ApiModelProperty(value = "伤害种类", dataType = "String") + private String nature; + @ApiModelProperty(value = "关注对象", dataType = "String") + private String attention; + /** + * 主要危害描述 + */ + @JsonIgnore + private String hazardousRemark; + @JsonIgnore + private String accidentType; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java new file mode 100644 index 0000000..c067f09 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java @@ -0,0 +1,174 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; +import com.casic.missiles.modular.device.dto.RiskPointDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.AlarmRecord; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.system.service.IConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 模型管理Controller + * + * @author lwh + * @date 2024-11-20 + */ +@Api(tags = "统计相关接口") +@RestController +@RequestMapping("/statistics") +public class StatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public StatisticsController(IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService, AbstractAuthService authService, IAlarmRecordService alarmRecordService) { + this.busDeviceInfoService = busDeviceInfoService; + this.configService = configService; + this.riskPointInfoService = riskPointInfoService; + this.authService = authService; + this.alarmRecordService = alarmRecordService; + } + + @BussinessLog("隐患分类查询") + @ApiOperation(value = "隐患分类查询") + @GetMapping(value = "/dangerCategory") + public ResponseDataDTO dangerCategory() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); + return ResponseDataDTO.success(dangerCategory); + } + + @BussinessLog("区域隐患分布") + @ApiOperation(value = "区域隐患分布") + @GetMapping(value = "/areaDanger") + public ResponseDataDTO areaDanger() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位隐患分布") + @ApiOperation(value = "单位隐患分布") + @GetMapping(value = "/deptDanger") + public ResponseDataDTO list() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位月报警分析") + @ApiOperation(value = "单位月报警分析") + @GetMapping(value = "/dept/record") + public ResponseDataDTO deptRecord() { + QueryWrapper query = new QueryWrapper(); + //计算近一个月 + Date lastMonth = DateUtil.offsetMonth(new Date(), -1); + query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in("dept_id", scope.getDeptIds()); + } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位报警时间曲线") + @ApiOperation(value = "单位报警时间曲线") + @GetMapping(value = "/dept/alarm/date") + public ResponseDataDTO deptAlarmDate(@ApiParam("开始时间(yyyy-MM-dd)") String beginDate,@ApiParam("结束时间(yyyy-MM-dd)") String endDate) { + + QueryWrapper query = new QueryWrapper(); +// DataScope scope = authService.getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); +// } + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); + return ResponseDataDTO.success(videoNumDTO); + } + + @BussinessLog("区域接入视频点位数") + @ApiOperation(value = "区域接入视频点位数") + @GetMapping(value = "/videoPoint") + public ResponseDataDTO videoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + List areaNumDTOS = riskPointInfoService.videoPoint(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位设备接入数") + @ApiOperation(value = "单位设备接入数") + @GetMapping(value = "/deptVideoPoint") + public ResponseDataDTO deptVideoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptVideoPoint(query); + //统计组名称 + return ResponseDataDTO.success(videoNumDTO); + } + + + + @ApiOperation(value = "单位隐患分布分页查询") + @GetMapping(value = "/deptDangerPage") + public ResponseDataDTO> deptDangerPage() { + + Page page = PageFactory.defaultPage(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); + + Page pageDTO = PageFactory.defaultPage(); + pageDTO.setTotal(page.getTotal()); + pageDTO.setRecords(riskPointDTOS); + return ResponseDataDTO.success(super.packForBT(pageDTO)); + } + + + @BussinessLog("关注对象查询") + @ApiOperation(value = "关注对象查询") + @PostMapping(value = "/focus/video") + public ResponseDataDTO> focusVideos(@RequestBody VideoIdsBo videoIdsBo) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.in(BusDeviceInfo::getCameraIndexCode, videoIdsBo.getVideoNos()); + List riskPointDTOS = busDeviceInfoService.focusVideos(query); + return ResponseDataDTO.success(riskPointDTOS); + } + +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java new file mode 100644 index 0000000..0765b84 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CommandDTO { + @ApiModelProperty(value = "盒子指令", dataType = "String",required = true) + private String command; + @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) + private Long boxId; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java new file mode 100644 index 0000000..29db19c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordAnalysisDTO { + private String deptId; + private String deptName; + private String num; + private String date; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java new file mode 100644 index 0000000..9df2592 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordDTO { + private String deptName; + private String num; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java new file mode 100644 index 0000000..2c9bd95 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.device.dto.bo; + +import lombok.Data; + +import java.util.List; + +@Data +public class VideoIdsBo { + private List videoNos; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java new file mode 100644 index 0000000..7117463 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.device.dto.CommandDTO; + +import javax.servlet.http.HttpSession; + +public interface IDeviceAuthService { + ResponseData deviceLogin(DeviceLoginForm deviceLoginForm, HttpSession session); + + /** + * 盒子状态更新 + * @param code 盒子编码 + */ + void reloadStatus(String code); + + /** + * 盒子指令下发 + * @param commandDTO + */ + void sendCommand(CommandDTO commandDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java new file mode 100644 index 0000000..4fe7758 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -0,0 +1,120 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.CommandDTO; +import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; +import com.casic.missiles.modular.system.utils.HttpUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpSession; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Component +public class DeviceAuthServiceImpl implements IDeviceAuthService { + private final IBoxDeviceService boxDeviceService; + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + this.boxDeviceService = boxDeviceService; + } + + /** + * 设备登录token + * + * @param deviceLoginForm 设备登录表单 + * @param session 会话 + * @return + */ + @Override + public ResponseData deviceLogin(DeviceLoginForm deviceLoginForm, HttpSession session) { + + BoxDevice device = boxDeviceService.selectByCode(deviceLoginForm.getCode()); + if (device == null) { + return ResponseData.error("设备信息不存在"); + } + + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), device.getServerPrivateKey()); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = JwtUtil.createJwtToken(deviceLoginForm, device); + ICacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } + + } + + /** + * 更新设备在线状态 + * + * @param code 盒子编码 + */ + @Override + public void reloadStatus(String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + boxDeviceService.update(updateWrapper); + } + + @Override + public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); + if (device == null || 0 == device.getDeviceStatus()) { + throw new ServiceException(500, "设备不存在或已离线!"); + } + if (StrUtil.isEmpty(device.getClientPublicKey())) { + throw new ServiceException(500, "无秘钥,请联系管理员!"); + } + + //生成加密指令 + String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { + String str = RSAUtils.encrypt(command, device.getClientPublicKey()); + if (StrUtil.isEmpty(device.getIp())) { + throw new ServiceException(500, "设备IP不存在,请设置"); + } + String url = "http://" + device.getIp() + "/command/test"; + DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); + httpHeaderHandler.setJson(true); + httpHeaderHandler.setGetError(true); + Map params = new HashMap<>(); + params.put("secret", str); + String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); + if(StrUtil.isEmpty(res)){ + throw new ServiceException(500, "调用异常,请联系管理员!"); + } + } catch (Exception e) { + throw new ServiceException(500, "加密异常,请联系管理员!"); + } + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java new file mode 100644 index 0000000..cba3aeb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FocusVideoDTO { + /** + * 监控点名称 + */ + @ApiModelProperty(value = "监控点名称", dataType = "String") + private String monitorName; + /** + * 监控点ID + */ + @ApiModelProperty(value = "监控点ID", dataType = "String") + private String monitorId; + /** + * 监控点国标号 + */ + @ApiModelProperty(value = "监控点国标", dataType = "String") + private String cameraIndexCode; + @ApiModelProperty(value = "告警数", dataType = "String") + private Integer alarmNum; + private List riskDTOList; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java new file mode 100644 index 0000000..1e7f3b2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +@Data +public class RiskDTO { + /** + * 危险点类型 + */ + private Integer riskType; + /** + * 危险点名称 + */ + @ApiModelProperty(value = "危险点名称", dataType = "String") + private String riskName; + @JsonIgnore + private String workProcedure; + @JsonIgnore + private String hazardousWork; + @JsonIgnore + private String hazardousChemicalSite; + /** + * 危险性质 + */ + @ApiModelProperty(value = "伤害种类", dataType = "String") + private String nature; + @ApiModelProperty(value = "关注对象", dataType = "String") + private String attention; + /** + * 主要危害描述 + */ + @JsonIgnore + private String hazardousRemark; + @JsonIgnore + private String accidentType; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java new file mode 100644 index 0000000..c067f09 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java @@ -0,0 +1,174 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; +import com.casic.missiles.modular.device.dto.RiskPointDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.AlarmRecord; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.system.service.IConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 模型管理Controller + * + * @author lwh + * @date 2024-11-20 + */ +@Api(tags = "统计相关接口") +@RestController +@RequestMapping("/statistics") +public class StatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public StatisticsController(IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService, AbstractAuthService authService, IAlarmRecordService alarmRecordService) { + this.busDeviceInfoService = busDeviceInfoService; + this.configService = configService; + this.riskPointInfoService = riskPointInfoService; + this.authService = authService; + this.alarmRecordService = alarmRecordService; + } + + @BussinessLog("隐患分类查询") + @ApiOperation(value = "隐患分类查询") + @GetMapping(value = "/dangerCategory") + public ResponseDataDTO dangerCategory() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); + return ResponseDataDTO.success(dangerCategory); + } + + @BussinessLog("区域隐患分布") + @ApiOperation(value = "区域隐患分布") + @GetMapping(value = "/areaDanger") + public ResponseDataDTO areaDanger() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位隐患分布") + @ApiOperation(value = "单位隐患分布") + @GetMapping(value = "/deptDanger") + public ResponseDataDTO list() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位月报警分析") + @ApiOperation(value = "单位月报警分析") + @GetMapping(value = "/dept/record") + public ResponseDataDTO deptRecord() { + QueryWrapper query = new QueryWrapper(); + //计算近一个月 + Date lastMonth = DateUtil.offsetMonth(new Date(), -1); + query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in("dept_id", scope.getDeptIds()); + } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位报警时间曲线") + @ApiOperation(value = "单位报警时间曲线") + @GetMapping(value = "/dept/alarm/date") + public ResponseDataDTO deptAlarmDate(@ApiParam("开始时间(yyyy-MM-dd)") String beginDate,@ApiParam("结束时间(yyyy-MM-dd)") String endDate) { + + QueryWrapper query = new QueryWrapper(); +// DataScope scope = authService.getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); +// } + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); + return ResponseDataDTO.success(videoNumDTO); + } + + @BussinessLog("区域接入视频点位数") + @ApiOperation(value = "区域接入视频点位数") + @GetMapping(value = "/videoPoint") + public ResponseDataDTO videoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + List areaNumDTOS = riskPointInfoService.videoPoint(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位设备接入数") + @ApiOperation(value = "单位设备接入数") + @GetMapping(value = "/deptVideoPoint") + public ResponseDataDTO deptVideoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptVideoPoint(query); + //统计组名称 + return ResponseDataDTO.success(videoNumDTO); + } + + + + @ApiOperation(value = "单位隐患分布分页查询") + @GetMapping(value = "/deptDangerPage") + public ResponseDataDTO> deptDangerPage() { + + Page page = PageFactory.defaultPage(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); + + Page pageDTO = PageFactory.defaultPage(); + pageDTO.setTotal(page.getTotal()); + pageDTO.setRecords(riskPointDTOS); + return ResponseDataDTO.success(super.packForBT(pageDTO)); + } + + + @BussinessLog("关注对象查询") + @ApiOperation(value = "关注对象查询") + @PostMapping(value = "/focus/video") + public ResponseDataDTO> focusVideos(@RequestBody VideoIdsBo videoIdsBo) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.in(BusDeviceInfo::getCameraIndexCode, videoIdsBo.getVideoNos()); + List riskPointDTOS = busDeviceInfoService.focusVideos(query); + return ResponseDataDTO.success(riskPointDTOS); + } + +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java new file mode 100644 index 0000000..0765b84 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CommandDTO { + @ApiModelProperty(value = "盒子指令", dataType = "String",required = true) + private String command; + @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) + private Long boxId; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java new file mode 100644 index 0000000..29db19c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordAnalysisDTO { + private String deptId; + private String deptName; + private String num; + private String date; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java new file mode 100644 index 0000000..9df2592 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordDTO { + private String deptName; + private String num; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java new file mode 100644 index 0000000..2c9bd95 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.device.dto.bo; + +import lombok.Data; + +import java.util.List; + +@Data +public class VideoIdsBo { + private List videoNos; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java new file mode 100644 index 0000000..7117463 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.device.dto.CommandDTO; + +import javax.servlet.http.HttpSession; + +public interface IDeviceAuthService { + ResponseData deviceLogin(DeviceLoginForm deviceLoginForm, HttpSession session); + + /** + * 盒子状态更新 + * @param code 盒子编码 + */ + void reloadStatus(String code); + + /** + * 盒子指令下发 + * @param commandDTO + */ + void sendCommand(CommandDTO commandDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java new file mode 100644 index 0000000..4fe7758 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -0,0 +1,120 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.CommandDTO; +import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; +import com.casic.missiles.modular.system.utils.HttpUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpSession; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Component +public class DeviceAuthServiceImpl implements IDeviceAuthService { + private final IBoxDeviceService boxDeviceService; + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + this.boxDeviceService = boxDeviceService; + } + + /** + * 设备登录token + * + * @param deviceLoginForm 设备登录表单 + * @param session 会话 + * @return + */ + @Override + public ResponseData deviceLogin(DeviceLoginForm deviceLoginForm, HttpSession session) { + + BoxDevice device = boxDeviceService.selectByCode(deviceLoginForm.getCode()); + if (device == null) { + return ResponseData.error("设备信息不存在"); + } + + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), device.getServerPrivateKey()); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = JwtUtil.createJwtToken(deviceLoginForm, device); + ICacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } + + } + + /** + * 更新设备在线状态 + * + * @param code 盒子编码 + */ + @Override + public void reloadStatus(String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + boxDeviceService.update(updateWrapper); + } + + @Override + public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); + if (device == null || 0 == device.getDeviceStatus()) { + throw new ServiceException(500, "设备不存在或已离线!"); + } + if (StrUtil.isEmpty(device.getClientPublicKey())) { + throw new ServiceException(500, "无秘钥,请联系管理员!"); + } + + //生成加密指令 + String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { + String str = RSAUtils.encrypt(command, device.getClientPublicKey()); + if (StrUtil.isEmpty(device.getIp())) { + throw new ServiceException(500, "设备IP不存在,请设置"); + } + String url = "http://" + device.getIp() + "/command/test"; + DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); + httpHeaderHandler.setJson(true); + httpHeaderHandler.setGetError(true); + Map params = new HashMap<>(); + params.put("secret", str); + String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); + if(StrUtil.isEmpty(res)){ + throw new ServiceException(500, "调用异常,请联系管理员!"); + } + } catch (Exception e) { + throw new ServiceException(500, "加密异常,请联系管理员!"); + } + + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java new file mode 100644 index 0000000..48c9d89 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.task; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Date; + +@Slf4j +@Component +public class BoxTask { + + @Resource + private IBoxDeviceService boxDeviceService; + @Value("${casic.video.box.open:-1}") + private Boolean open; + /** + * 设备信息同步0 + * 每30分钟采集一次 + */ + @Scheduled(cron = "${casic.video.box.deviceCorn:0 */5 * * * *}") + public void deviceRefresh() { + //设备状态更新 + log.info("box online task start"); + if (open) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status",0); + updateWrapper.le("update_time",DateUtil.offsetMinute(new Date(),-5)); + boxDeviceService.update(updateWrapper); + } + log.info("box online task end"); + } +} \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java new file mode 100644 index 0000000..a51bc94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceWarnObjectDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class DeviceWarnObjectDTO { + private String typeId; + private String typeName; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java new file mode 100644 index 0000000..cba3aeb --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/FocusVideoDTO.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FocusVideoDTO { + /** + * 监控点名称 + */ + @ApiModelProperty(value = "监控点名称", dataType = "String") + private String monitorName; + /** + * 监控点ID + */ + @ApiModelProperty(value = "监控点ID", dataType = "String") + private String monitorId; + /** + * 监控点国标号 + */ + @ApiModelProperty(value = "监控点国标", dataType = "String") + private String cameraIndexCode; + @ApiModelProperty(value = "告警数", dataType = "String") + private Integer alarmNum; + private List riskDTOList; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java new file mode 100644 index 0000000..1e7f3b2 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/RiskDTO.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; + +@Data +public class RiskDTO { + /** + * 危险点类型 + */ + private Integer riskType; + /** + * 危险点名称 + */ + @ApiModelProperty(value = "危险点名称", dataType = "String") + private String riskName; + @JsonIgnore + private String workProcedure; + @JsonIgnore + private String hazardousWork; + @JsonIgnore + private String hazardousChemicalSite; + /** + * 危险性质 + */ + @ApiModelProperty(value = "伤害种类", dataType = "String") + private String nature; + @ApiModelProperty(value = "关注对象", dataType = "String") + private String attention; + /** + * 主要危害描述 + */ + @JsonIgnore + private String hazardousRemark; + @JsonIgnore + private String accidentType; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java new file mode 100644 index 0000000..c067f09 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java @@ -0,0 +1,174 @@ +package com.casic.missiles.modular.device.controller; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.core.application.service.AbstractAuthService; +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.page.PageFactory; +import com.casic.missiles.core.page.PageInfoBT; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; +import com.casic.missiles.modular.device.dto.RiskPointDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.AlarmRecord; +import com.casic.missiles.modular.device.model.BusDeviceInfo; +import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.device.service.IAlarmRecordService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.IRiskPointInfoService; +import com.casic.missiles.modular.system.service.IConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * 模型管理Controller + * + * @author lwh + * @date 2024-11-20 + */ +@Api(tags = "统计相关接口") +@RestController +@RequestMapping("/statistics") +public class StatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public StatisticsController(IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService, AbstractAuthService authService, IAlarmRecordService alarmRecordService) { + this.busDeviceInfoService = busDeviceInfoService; + this.configService = configService; + this.riskPointInfoService = riskPointInfoService; + this.authService = authService; + this.alarmRecordService = alarmRecordService; + } + + @BussinessLog("隐患分类查询") + @ApiOperation(value = "隐患分类查询") + @GetMapping(value = "/dangerCategory") + public ResponseDataDTO dangerCategory() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); + return ResponseDataDTO.success(dangerCategory); + } + + @BussinessLog("区域隐患分布") + @ApiOperation(value = "区域隐患分布") + @GetMapping(value = "/areaDanger") + public ResponseDataDTO areaDanger() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位隐患分布") + @ApiOperation(value = "单位隐患分布") + @GetMapping(value = "/deptDanger") + public ResponseDataDTO list() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); + return ResponseDataDTO.success(areaDangerDTO); + } + + @BussinessLog("单位月报警分析") + @ApiOperation(value = "单位月报警分析") + @GetMapping(value = "/dept/record") + public ResponseDataDTO deptRecord() { + QueryWrapper query = new QueryWrapper(); + //计算近一个月 + Date lastMonth = DateUtil.offsetMonth(new Date(), -1); + query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in("dept_id", scope.getDeptIds()); + } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位报警时间曲线") + @ApiOperation(value = "单位报警时间曲线") + @GetMapping(value = "/dept/alarm/date") + public ResponseDataDTO deptAlarmDate(@ApiParam("开始时间(yyyy-MM-dd)") String beginDate,@ApiParam("结束时间(yyyy-MM-dd)") String endDate) { + + QueryWrapper query = new QueryWrapper(); +// DataScope scope = authService.getLoginUserDataScope(); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); +// } + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); + return ResponseDataDTO.success(videoNumDTO); + } + + @BussinessLog("区域接入视频点位数") + @ApiOperation(value = "区域接入视频点位数") + @GetMapping(value = "/videoPoint") + public ResponseDataDTO videoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DataScope scope = authService.getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + } + List areaNumDTOS = riskPointInfoService.videoPoint(query); + return ResponseDataDTO.success(areaNumDTOS); + } + + @BussinessLog("单位设备接入数") + @ApiOperation(value = "单位设备接入数") + @GetMapping(value = "/deptVideoPoint") + public ResponseDataDTO deptVideoPoint() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptVideoPoint(query); + //统计组名称 + return ResponseDataDTO.success(videoNumDTO); + } + + + + @ApiOperation(value = "单位隐患分布分页查询") + @GetMapping(value = "/deptDangerPage") + public ResponseDataDTO> deptDangerPage() { + + Page page = PageFactory.defaultPage(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); + + Page pageDTO = PageFactory.defaultPage(); + pageDTO.setTotal(page.getTotal()); + pageDTO.setRecords(riskPointDTOS); + return ResponseDataDTO.success(super.packForBT(pageDTO)); + } + + + @BussinessLog("关注对象查询") + @ApiOperation(value = "关注对象查询") + @PostMapping(value = "/focus/video") + public ResponseDataDTO> focusVideos(@RequestBody VideoIdsBo videoIdsBo) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.in(BusDeviceInfo::getCameraIndexCode, videoIdsBo.getVideoNos()); + List riskPointDTOS = busDeviceInfoService.focusVideos(query); + return ResponseDataDTO.success(riskPointDTOS); + } + +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java new file mode 100644 index 0000000..0765b84 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CommandDTO { + @ApiModelProperty(value = "盒子指令", dataType = "String",required = true) + private String command; + @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) + private Long boxId; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java new file mode 100644 index 0000000..29db19c --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordAnalysisDTO.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordAnalysisDTO { + private String deptId; + private String deptName; + private String num; + private String date; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java new file mode 100644 index 0000000..9df2592 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/analysis/DeptRecordDTO.java @@ -0,0 +1,9 @@ +package com.casic.missiles.modular.device.dto.analysis; + +import lombok.Data; + +@Data +public class DeptRecordDTO { + private String deptName; + private String num; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java new file mode 100644 index 0000000..2c9bd95 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/bo/VideoIdsBo.java @@ -0,0 +1,10 @@ +package com.casic.missiles.modular.device.dto.bo; + +import lombok.Data; + +import java.util.List; + +@Data +public class VideoIdsBo { + private List videoNos; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java new file mode 100644 index 0000000..7117463 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IDeviceAuthService.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.device.dto.CommandDTO; + +import javax.servlet.http.HttpSession; + +public interface IDeviceAuthService { + ResponseData deviceLogin(DeviceLoginForm deviceLoginForm, HttpSession session); + + /** + * 盒子状态更新 + * @param code 盒子编码 + */ + void reloadStatus(String code); + + /** + * 盒子指令下发 + * @param commandDTO + */ + void sendCommand(CommandDTO commandDTO); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java new file mode 100644 index 0000000..4fe7758 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -0,0 +1,120 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.casic.missiles.core.util.RSAUtils; +import com.casic.missiles.model.exception.ServiceException; +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.modular.auth.dto.DeviceLoginForm; +import com.casic.missiles.modular.auth.util.ICacheUtil; +import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.CommandDTO; +import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; +import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; +import com.casic.missiles.modular.system.utils.HttpUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpSession; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Component +public class DeviceAuthServiceImpl implements IDeviceAuthService { + private final IBoxDeviceService boxDeviceService; + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + this.boxDeviceService = boxDeviceService; + } + + /** + * 设备登录token + * + * @param deviceLoginForm 设备登录表单 + * @param session 会话 + * @return + */ + @Override + public ResponseData deviceLogin(DeviceLoginForm deviceLoginForm, HttpSession session) { + + BoxDevice device = boxDeviceService.selectByCode(deviceLoginForm.getCode()); + if (device == null) { + return ResponseData.error("设备信息不存在"); + } + + try { + String str = RSAUtils.decrypt(deviceLoginForm.getSecret(), device.getServerPrivateKey()); + Long time = Long.valueOf(StrUtil.split(str, "_").get(1)); + //边缘盒子时差与服务时差不可超过24小时 + if (time == null || System.currentTimeMillis() - time > 3600 * 24 * 1000) { + return ResponseData.error("请求时间超时"); + } + deviceLoginForm.setTime(time); + } catch (Exception e) { + e.printStackTrace(); + return ResponseData.error("设备解析异常!"); + } + + try { + String token = JwtUtil.createJwtToken(deviceLoginForm, device); + ICacheUtil.put(token, token); + return ResponseData.success(token); + } catch (Exception e) { + log.error("设备登录异常:{}", e.getMessage()); + return ResponseData.error("登录异常,请联系管理员"); + } + + } + + /** + * 更新设备在线状态 + * + * @param code 盒子编码 + */ + @Override + public void reloadStatus(String code) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + boxDeviceService.update(updateWrapper); + } + + @Override + public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); + if (device == null || 0 == device.getDeviceStatus()) { + throw new ServiceException(500, "设备不存在或已离线!"); + } + if (StrUtil.isEmpty(device.getClientPublicKey())) { + throw new ServiceException(500, "无秘钥,请联系管理员!"); + } + + //生成加密指令 + String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { + String str = RSAUtils.encrypt(command, device.getClientPublicKey()); + if (StrUtil.isEmpty(device.getIp())) { + throw new ServiceException(500, "设备IP不存在,请设置"); + } + String url = "http://" + device.getIp() + "/command/test"; + DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); + httpHeaderHandler.setJson(true); + httpHeaderHandler.setGetError(true); + Map params = new HashMap<>(); + params.put("secret", str); + String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); + if(StrUtil.isEmpty(res)){ + throw new ServiceException(500, "调用异常,请联系管理员!"); + } + } catch (Exception e) { + throw new ServiceException(500, "加密异常,请联系管理员!"); + } + + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java new file mode 100644 index 0000000..48c9d89 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java @@ -0,0 +1,39 @@ +package com.casic.missiles.modular.device.task; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Date; + +@Slf4j +@Component +public class BoxTask { + + @Resource + private IBoxDeviceService boxDeviceService; + @Value("${casic.video.box.open:-1}") + private Boolean open; + /** + * 设备信息同步0 + * 每30分钟采集一次 + */ + @Scheduled(cron = "${casic.video.box.deviceCorn:0 */5 * * * *}") + public void deviceRefresh() { + //设备状态更新 + log.info("box online task start"); + if (open) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status",0); + updateWrapper.le("update_time",DateUtil.offsetMinute(new Date(),-5)); + boxDeviceService.update(updateWrapper); + } + log.info("box online task end"); + } +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/ZipFileUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/ZipFileUtil.java new file mode 100644 index 0000000..3bf86d8 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/ZipFileUtil.java @@ -0,0 +1,32 @@ +package com.casic.missiles.modular.device.util; + +import java.io.File; +import java.io.IOException; +import java.util.Enumeration; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +public class ZipFileUtil { + public static String getZipHandleTask(String path) throws IOException { + String task = null; + File file = new File(path); + ZipFile zipFile = null; + try { + zipFile = new ZipFile(file); + Enumeration zipEntries = (Enumeration) zipFile.entries(); + // 遍历条目 + while (zipEntries.hasMoreElements()) { + ZipEntry entry = zipEntries.nextElement(); + // 如果条目是文件,你可以选择读取内容 + if (!entry.isDirectory() && entry.getName().indexOf('/') == -1 && entry.getName().endsWith(".py")) { + task = entry.getName().replaceAll(".py",""); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + zipFile.close(); + } + return task; + } +}