diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java index beadcd2..b4a999e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -9,11 +10,9 @@ 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.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; -import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; -import com.casic.missiles.modular.device.service.IDeviceAuthService; -import com.casic.missiles.modular.device.service.IDeviceModelRelationService; -import com.casic.missiles.modular.device.service.IDeviceSceneRelationService; +import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,6 +24,7 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; @Api(tags = "设备同步接口") @RestController @@ -33,14 +33,17 @@ private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; + private final IBoxDeviceService boxDeviceService; private final IBoxDeviceRelationService boxDeviceRelationService; private final IDeviceAuthService deviceAuthService; + @Value("${casic.file.uploadPath:D://tmp//}") private String filePath; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { + public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceService boxDeviceService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; + this.boxDeviceService = boxDeviceService; this.boxDeviceRelationService = boxDeviceRelationService; this.deviceAuthService = deviceAuthService; } @@ -74,19 +77,50 @@ * @param code * @return */ + @GetMapping("/info") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + if (StrUtil.isEmpty(code)) { + return ResponseDataDTO.error("设备编码不能为空"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BoxDevice::getCode, code); + BoxDevice boxDevice = boxDeviceService.getOne(query); + clearBoxDevice(boxDevice); + return ResponseDataDTO.success(boxDevice); + } + + private void clearBoxDevice(BoxDevice boxDevice) { + boxDevice.setClientPrivateKey(null); + boxDevice.setClientPublicKey(null); + boxDevice.setServerPrivateKey(null); + boxDevice.setServerPublicKey(null); + } + + /** + * 心跳接收 + * + * @param code + * @return + */ @GetMapping("/heart") @ResponseBody - public ResponseDataDTO heart(String code) { + public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { return ResponseDataDTO.error("未获取到有效登录token"); } - deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } /** - * * @param path * @return */ @@ -153,4 +187,4 @@ return null; } -} +} \ No newline at end of file diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java index beadcd2..b4a999e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -9,11 +10,9 @@ 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.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; -import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; -import com.casic.missiles.modular.device.service.IDeviceAuthService; -import com.casic.missiles.modular.device.service.IDeviceModelRelationService; -import com.casic.missiles.modular.device.service.IDeviceSceneRelationService; +import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,6 +24,7 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; @Api(tags = "设备同步接口") @RestController @@ -33,14 +33,17 @@ private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; + private final IBoxDeviceService boxDeviceService; private final IBoxDeviceRelationService boxDeviceRelationService; private final IDeviceAuthService deviceAuthService; + @Value("${casic.file.uploadPath:D://tmp//}") private String filePath; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { + public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceService boxDeviceService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; + this.boxDeviceService = boxDeviceService; this.boxDeviceRelationService = boxDeviceRelationService; this.deviceAuthService = deviceAuthService; } @@ -74,19 +77,50 @@ * @param code * @return */ + @GetMapping("/info") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + if (StrUtil.isEmpty(code)) { + return ResponseDataDTO.error("设备编码不能为空"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BoxDevice::getCode, code); + BoxDevice boxDevice = boxDeviceService.getOne(query); + clearBoxDevice(boxDevice); + return ResponseDataDTO.success(boxDevice); + } + + private void clearBoxDevice(BoxDevice boxDevice) { + boxDevice.setClientPrivateKey(null); + boxDevice.setClientPublicKey(null); + boxDevice.setServerPrivateKey(null); + boxDevice.setServerPublicKey(null); + } + + /** + * 心跳接收 + * + * @param code + * @return + */ @GetMapping("/heart") @ResponseBody - public ResponseDataDTO heart(String code) { + public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { return ResponseDataDTO.error("未获取到有效登录token"); } - deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } /** - * * @param path * @return */ @@ -153,4 +187,4 @@ return null; } -} +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java new file mode 100644 index 0000000..4a48309 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +@Api(tags = "安全生产附件") +@RestController +@RequestMapping({"/safe/file"}) +public class SafeFileManagerController { + @Resource + private ISafeCasicFileService casicFileService; + + @ApiOperation(value = "盒子服务附件上传") + @PostMapping({"/upload"}) + @ResponseBody + public Object upload(@RequestParam("file") MultipartFile file) throws IOException { + String fileId = this.casicFileService.saveFile(file); + return fileId != null ? ResponseData.success(fileId) : ResponseData.error("文件为空"); + } + + @ApiOperation(value = "盒子服务版本查询") + @GetMapping({"/version"}) + @ResponseBody + public ResponseDataDTO> version() throws IOException { + List listFiles = this.casicFileService.listFiles(); + return ResponseDataDTO.success(listFiles); + } +} diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java index beadcd2..b4a999e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -9,11 +10,9 @@ 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.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; -import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; -import com.casic.missiles.modular.device.service.IDeviceAuthService; -import com.casic.missiles.modular.device.service.IDeviceModelRelationService; -import com.casic.missiles.modular.device.service.IDeviceSceneRelationService; +import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,6 +24,7 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; @Api(tags = "设备同步接口") @RestController @@ -33,14 +33,17 @@ private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; + private final IBoxDeviceService boxDeviceService; private final IBoxDeviceRelationService boxDeviceRelationService; private final IDeviceAuthService deviceAuthService; + @Value("${casic.file.uploadPath:D://tmp//}") private String filePath; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { + public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceService boxDeviceService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; + this.boxDeviceService = boxDeviceService; this.boxDeviceRelationService = boxDeviceRelationService; this.deviceAuthService = deviceAuthService; } @@ -74,19 +77,50 @@ * @param code * @return */ + @GetMapping("/info") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + if (StrUtil.isEmpty(code)) { + return ResponseDataDTO.error("设备编码不能为空"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BoxDevice::getCode, code); + BoxDevice boxDevice = boxDeviceService.getOne(query); + clearBoxDevice(boxDevice); + return ResponseDataDTO.success(boxDevice); + } + + private void clearBoxDevice(BoxDevice boxDevice) { + boxDevice.setClientPrivateKey(null); + boxDevice.setClientPublicKey(null); + boxDevice.setServerPrivateKey(null); + boxDevice.setServerPublicKey(null); + } + + /** + * 心跳接收 + * + * @param code + * @return + */ @GetMapping("/heart") @ResponseBody - public ResponseDataDTO heart(String code) { + public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { return ResponseDataDTO.error("未获取到有效登录token"); } - deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } /** - * * @param path * @return */ @@ -153,4 +187,4 @@ return null; } -} +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java new file mode 100644 index 0000000..4a48309 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +@Api(tags = "安全生产附件") +@RestController +@RequestMapping({"/safe/file"}) +public class SafeFileManagerController { + @Resource + private ISafeCasicFileService casicFileService; + + @ApiOperation(value = "盒子服务附件上传") + @PostMapping({"/upload"}) + @ResponseBody + public Object upload(@RequestParam("file") MultipartFile file) throws IOException { + String fileId = this.casicFileService.saveFile(file); + return fileId != null ? ResponseData.success(fileId) : ResponseData.error("文件为空"); + } + + @ApiOperation(value = "盒子服务版本查询") + @GetMapping({"/version"}) + @ResponseBody + public ResponseDataDTO> version() throws IOException { + List listFiles = this.casicFileService.listFiles(); + return ResponseDataDTO.success(listFiles); + } +} 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 deleted file mode 100644 index c067f09..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java +++ /dev/null @@ -1,174 +0,0 @@ -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-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java index beadcd2..b4a999e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -9,11 +10,9 @@ 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.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; -import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; -import com.casic.missiles.modular.device.service.IDeviceAuthService; -import com.casic.missiles.modular.device.service.IDeviceModelRelationService; -import com.casic.missiles.modular.device.service.IDeviceSceneRelationService; +import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,6 +24,7 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; @Api(tags = "设备同步接口") @RestController @@ -33,14 +33,17 @@ private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; + private final IBoxDeviceService boxDeviceService; private final IBoxDeviceRelationService boxDeviceRelationService; private final IDeviceAuthService deviceAuthService; + @Value("${casic.file.uploadPath:D://tmp//}") private String filePath; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { + public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceService boxDeviceService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; + this.boxDeviceService = boxDeviceService; this.boxDeviceRelationService = boxDeviceRelationService; this.deviceAuthService = deviceAuthService; } @@ -74,19 +77,50 @@ * @param code * @return */ + @GetMapping("/info") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + if (StrUtil.isEmpty(code)) { + return ResponseDataDTO.error("设备编码不能为空"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BoxDevice::getCode, code); + BoxDevice boxDevice = boxDeviceService.getOne(query); + clearBoxDevice(boxDevice); + return ResponseDataDTO.success(boxDevice); + } + + private void clearBoxDevice(BoxDevice boxDevice) { + boxDevice.setClientPrivateKey(null); + boxDevice.setClientPublicKey(null); + boxDevice.setServerPrivateKey(null); + boxDevice.setServerPublicKey(null); + } + + /** + * 心跳接收 + * + * @param code + * @return + */ @GetMapping("/heart") @ResponseBody - public ResponseDataDTO heart(String code) { + public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { return ResponseDataDTO.error("未获取到有效登录token"); } - deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } /** - * * @param path * @return */ @@ -153,4 +187,4 @@ return null; } -} +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java new file mode 100644 index 0000000..4a48309 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +@Api(tags = "安全生产附件") +@RestController +@RequestMapping({"/safe/file"}) +public class SafeFileManagerController { + @Resource + private ISafeCasicFileService casicFileService; + + @ApiOperation(value = "盒子服务附件上传") + @PostMapping({"/upload"}) + @ResponseBody + public Object upload(@RequestParam("file") MultipartFile file) throws IOException { + String fileId = this.casicFileService.saveFile(file); + return fileId != null ? ResponseData.success(fileId) : ResponseData.error("文件为空"); + } + + @ApiOperation(value = "盒子服务版本查询") + @GetMapping({"/version"}) + @ResponseBody + public ResponseDataDTO> version() throws IOException { + List listFiles = this.casicFileService.listFiles(); + return ResponseDataDTO.success(listFiles); + } +} 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 deleted file mode 100644 index c067f09..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java +++ /dev/null @@ -1,174 +0,0 @@ -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/dao/mapping/BoxDeviceMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml index bd8b8c7..2b251de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml @@ -49,11 +49,11 @@ a.device_status as deviceStatus , a.box_name - as boxName + as boxName select - ,b.AREA_NAME as areaName,c.FULL_NAME as deptName + ,a.path,b.AREA_NAME as areaName,c.FULL_NAME as deptName from box_device a inner join sys_area b on a.area = b.id inner join sys_dept c on a.dept_id = c.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java new file mode 100644 index 0000000..20f5de2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class BoxIdForms { + private List ids; + private String versionPath; +} \ No newline at end of file diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java index beadcd2..b4a999e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -9,11 +10,9 @@ 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.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; -import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; -import com.casic.missiles.modular.device.service.IDeviceAuthService; -import com.casic.missiles.modular.device.service.IDeviceModelRelationService; -import com.casic.missiles.modular.device.service.IDeviceSceneRelationService; +import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,6 +24,7 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; @Api(tags = "设备同步接口") @RestController @@ -33,14 +33,17 @@ private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; + private final IBoxDeviceService boxDeviceService; private final IBoxDeviceRelationService boxDeviceRelationService; private final IDeviceAuthService deviceAuthService; + @Value("${casic.file.uploadPath:D://tmp//}") private String filePath; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { + public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceService boxDeviceService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; + this.boxDeviceService = boxDeviceService; this.boxDeviceRelationService = boxDeviceRelationService; this.deviceAuthService = deviceAuthService; } @@ -74,19 +77,50 @@ * @param code * @return */ + @GetMapping("/info") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + if (StrUtil.isEmpty(code)) { + return ResponseDataDTO.error("设备编码不能为空"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BoxDevice::getCode, code); + BoxDevice boxDevice = boxDeviceService.getOne(query); + clearBoxDevice(boxDevice); + return ResponseDataDTO.success(boxDevice); + } + + private void clearBoxDevice(BoxDevice boxDevice) { + boxDevice.setClientPrivateKey(null); + boxDevice.setClientPublicKey(null); + boxDevice.setServerPrivateKey(null); + boxDevice.setServerPublicKey(null); + } + + /** + * 心跳接收 + * + * @param code + * @return + */ @GetMapping("/heart") @ResponseBody - public ResponseDataDTO heart(String code) { + public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { return ResponseDataDTO.error("未获取到有效登录token"); } - deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } /** - * * @param path * @return */ @@ -153,4 +187,4 @@ return null; } -} +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java new file mode 100644 index 0000000..4a48309 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +@Api(tags = "安全生产附件") +@RestController +@RequestMapping({"/safe/file"}) +public class SafeFileManagerController { + @Resource + private ISafeCasicFileService casicFileService; + + @ApiOperation(value = "盒子服务附件上传") + @PostMapping({"/upload"}) + @ResponseBody + public Object upload(@RequestParam("file") MultipartFile file) throws IOException { + String fileId = this.casicFileService.saveFile(file); + return fileId != null ? ResponseData.success(fileId) : ResponseData.error("文件为空"); + } + + @ApiOperation(value = "盒子服务版本查询") + @GetMapping({"/version"}) + @ResponseBody + public ResponseDataDTO> version() throws IOException { + List listFiles = this.casicFileService.listFiles(); + return ResponseDataDTO.success(listFiles); + } +} 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 deleted file mode 100644 index c067f09..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java +++ /dev/null @@ -1,174 +0,0 @@ -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/dao/mapping/BoxDeviceMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml index bd8b8c7..2b251de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml @@ -49,11 +49,11 @@ a.device_status as deviceStatus , a.box_name - as boxName + as boxName select - ,b.AREA_NAME as areaName,c.FULL_NAME as deptName + ,a.path,b.AREA_NAME as areaName,c.FULL_NAME as deptName from box_device a inner join sys_area b on a.area = b.id inner join sys_dept c on a.dept_id = c.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java new file mode 100644 index 0000000..20f5de2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class BoxIdForms { + private List ids; + private String versionPath; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java new file mode 100644 index 0000000..33e6fcb --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class FileVersionDTO { + /** + * 版本号 + */ + private String version; + /** + * 版本路径 + */ + private String filePath; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java index 7dc0ac5..3d8c43b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java @@ -86,10 +86,21 @@ @ApiModelProperty(value = "客户端私钥", dataType = "String") @TableField("client_private_key") private String clientPrivateKey; + + @ApiModelProperty(value = "服务版本号", dataType = "String") + private String version; + @TableField(exist = false) private String areaName; + @TableField(exist = false) private String deptName; + /** + * 盒子升级包路径 + */ + @ApiModelProperty(value = "盒子升级包路径", dataType = "String") + private String path; + @Override public String toString() { return "BoxDevice{" diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java index beadcd2..b4a999e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -9,11 +10,9 @@ 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.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; -import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; -import com.casic.missiles.modular.device.service.IDeviceAuthService; -import com.casic.missiles.modular.device.service.IDeviceModelRelationService; -import com.casic.missiles.modular.device.service.IDeviceSceneRelationService; +import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,6 +24,7 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; @Api(tags = "设备同步接口") @RestController @@ -33,14 +33,17 @@ private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; + private final IBoxDeviceService boxDeviceService; private final IBoxDeviceRelationService boxDeviceRelationService; private final IDeviceAuthService deviceAuthService; + @Value("${casic.file.uploadPath:D://tmp//}") private String filePath; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { + public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceService boxDeviceService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; + this.boxDeviceService = boxDeviceService; this.boxDeviceRelationService = boxDeviceRelationService; this.deviceAuthService = deviceAuthService; } @@ -74,19 +77,50 @@ * @param code * @return */ + @GetMapping("/info") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + if (StrUtil.isEmpty(code)) { + return ResponseDataDTO.error("设备编码不能为空"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BoxDevice::getCode, code); + BoxDevice boxDevice = boxDeviceService.getOne(query); + clearBoxDevice(boxDevice); + return ResponseDataDTO.success(boxDevice); + } + + private void clearBoxDevice(BoxDevice boxDevice) { + boxDevice.setClientPrivateKey(null); + boxDevice.setClientPublicKey(null); + boxDevice.setServerPrivateKey(null); + boxDevice.setServerPublicKey(null); + } + + /** + * 心跳接收 + * + * @param code + * @return + */ @GetMapping("/heart") @ResponseBody - public ResponseDataDTO heart(String code) { + public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { return ResponseDataDTO.error("未获取到有效登录token"); } - deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } /** - * * @param path * @return */ @@ -153,4 +187,4 @@ return null; } -} +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java new file mode 100644 index 0000000..4a48309 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +@Api(tags = "安全生产附件") +@RestController +@RequestMapping({"/safe/file"}) +public class SafeFileManagerController { + @Resource + private ISafeCasicFileService casicFileService; + + @ApiOperation(value = "盒子服务附件上传") + @PostMapping({"/upload"}) + @ResponseBody + public Object upload(@RequestParam("file") MultipartFile file) throws IOException { + String fileId = this.casicFileService.saveFile(file); + return fileId != null ? ResponseData.success(fileId) : ResponseData.error("文件为空"); + } + + @ApiOperation(value = "盒子服务版本查询") + @GetMapping({"/version"}) + @ResponseBody + public ResponseDataDTO> version() throws IOException { + List listFiles = this.casicFileService.listFiles(); + return ResponseDataDTO.success(listFiles); + } +} 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 deleted file mode 100644 index c067f09..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java +++ /dev/null @@ -1,174 +0,0 @@ -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/dao/mapping/BoxDeviceMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml index bd8b8c7..2b251de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml @@ -49,11 +49,11 @@ a.device_status as deviceStatus , a.box_name - as boxName + as boxName select - ,b.AREA_NAME as areaName,c.FULL_NAME as deptName + ,a.path,b.AREA_NAME as areaName,c.FULL_NAME as deptName from box_device a inner join sys_area b on a.area = b.id inner join sys_dept c on a.dept_id = c.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java new file mode 100644 index 0000000..20f5de2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class BoxIdForms { + private List ids; + private String versionPath; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java new file mode 100644 index 0000000..33e6fcb --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class FileVersionDTO { + /** + * 版本号 + */ + private String version; + /** + * 版本路径 + */ + private String filePath; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java index 7dc0ac5..3d8c43b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java @@ -86,10 +86,21 @@ @ApiModelProperty(value = "客户端私钥", dataType = "String") @TableField("client_private_key") private String clientPrivateKey; + + @ApiModelProperty(value = "服务版本号", dataType = "String") + private String version; + @TableField(exist = false) private String areaName; + @TableField(exist = false) private String deptName; + /** + * 盒子升级包路径 + */ + @ApiModelProperty(value = "盒子升级包路径", dataType = "String") + private String path; + @Override public String toString() { return "BoxDevice{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 864d9aa..0158766 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.model.BoxDevice; import java.util.List; @@ -21,18 +22,28 @@ * 盒子信息 分页检索 */ List selectBoxDevicePage(Page page, QueryWrapper query); - List selectBoxDeviceList( QueryWrapper query); + + List selectBoxDeviceList(QueryWrapper query); /** * 盒子key生成 + * * @param boxDevice */ void genKey(BoxDevice boxDevice); /** * 根据编码查询边缘盒子 + * * @param code 盒子编码 * @return */ BoxDevice selectByCode(String code); + + /** + * 批量修改版本号 + * + * @param ids + */ + void updatePath(BoxIdForms ids); } 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 index 7117463..bc34771 100644 --- 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 @@ -13,7 +13,7 @@ * 盒子状态更新 * @param code 盒子编码 */ - void reloadStatus(String code); + void reloadStatus(String code,String version); /** * 盒子指令下发 diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java index beadcd2..b4a999e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -9,11 +10,9 @@ 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.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; -import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; -import com.casic.missiles.modular.device.service.IDeviceAuthService; -import com.casic.missiles.modular.device.service.IDeviceModelRelationService; -import com.casic.missiles.modular.device.service.IDeviceSceneRelationService; +import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,6 +24,7 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; @Api(tags = "设备同步接口") @RestController @@ -33,14 +33,17 @@ private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; + private final IBoxDeviceService boxDeviceService; private final IBoxDeviceRelationService boxDeviceRelationService; private final IDeviceAuthService deviceAuthService; + @Value("${casic.file.uploadPath:D://tmp//}") private String filePath; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { + public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceService boxDeviceService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; + this.boxDeviceService = boxDeviceService; this.boxDeviceRelationService = boxDeviceRelationService; this.deviceAuthService = deviceAuthService; } @@ -74,19 +77,50 @@ * @param code * @return */ + @GetMapping("/info") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + if (StrUtil.isEmpty(code)) { + return ResponseDataDTO.error("设备编码不能为空"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BoxDevice::getCode, code); + BoxDevice boxDevice = boxDeviceService.getOne(query); + clearBoxDevice(boxDevice); + return ResponseDataDTO.success(boxDevice); + } + + private void clearBoxDevice(BoxDevice boxDevice) { + boxDevice.setClientPrivateKey(null); + boxDevice.setClientPublicKey(null); + boxDevice.setServerPrivateKey(null); + boxDevice.setServerPublicKey(null); + } + + /** + * 心跳接收 + * + * @param code + * @return + */ @GetMapping("/heart") @ResponseBody - public ResponseDataDTO heart(String code) { + public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { return ResponseDataDTO.error("未获取到有效登录token"); } - deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } /** - * * @param path * @return */ @@ -153,4 +187,4 @@ return null; } -} +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java new file mode 100644 index 0000000..4a48309 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +@Api(tags = "安全生产附件") +@RestController +@RequestMapping({"/safe/file"}) +public class SafeFileManagerController { + @Resource + private ISafeCasicFileService casicFileService; + + @ApiOperation(value = "盒子服务附件上传") + @PostMapping({"/upload"}) + @ResponseBody + public Object upload(@RequestParam("file") MultipartFile file) throws IOException { + String fileId = this.casicFileService.saveFile(file); + return fileId != null ? ResponseData.success(fileId) : ResponseData.error("文件为空"); + } + + @ApiOperation(value = "盒子服务版本查询") + @GetMapping({"/version"}) + @ResponseBody + public ResponseDataDTO> version() throws IOException { + List listFiles = this.casicFileService.listFiles(); + return ResponseDataDTO.success(listFiles); + } +} 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 deleted file mode 100644 index c067f09..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java +++ /dev/null @@ -1,174 +0,0 @@ -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/dao/mapping/BoxDeviceMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml index bd8b8c7..2b251de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml @@ -49,11 +49,11 @@ a.device_status as deviceStatus , a.box_name - as boxName + as boxName select - ,b.AREA_NAME as areaName,c.FULL_NAME as deptName + ,a.path,b.AREA_NAME as areaName,c.FULL_NAME as deptName from box_device a inner join sys_area b on a.area = b.id inner join sys_dept c on a.dept_id = c.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java new file mode 100644 index 0000000..20f5de2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class BoxIdForms { + private List ids; + private String versionPath; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java new file mode 100644 index 0000000..33e6fcb --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class FileVersionDTO { + /** + * 版本号 + */ + private String version; + /** + * 版本路径 + */ + private String filePath; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java index 7dc0ac5..3d8c43b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java @@ -86,10 +86,21 @@ @ApiModelProperty(value = "客户端私钥", dataType = "String") @TableField("client_private_key") private String clientPrivateKey; + + @ApiModelProperty(value = "服务版本号", dataType = "String") + private String version; + @TableField(exist = false) private String areaName; + @TableField(exist = false) private String deptName; + /** + * 盒子升级包路径 + */ + @ApiModelProperty(value = "盒子升级包路径", dataType = "String") + private String path; + @Override public String toString() { return "BoxDevice{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 864d9aa..0158766 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.model.BoxDevice; import java.util.List; @@ -21,18 +22,28 @@ * 盒子信息 分页检索 */ List selectBoxDevicePage(Page page, QueryWrapper query); - List selectBoxDeviceList( QueryWrapper query); + + List selectBoxDeviceList(QueryWrapper query); /** * 盒子key生成 + * * @param boxDevice */ void genKey(BoxDevice boxDevice); /** * 根据编码查询边缘盒子 + * * @param code 盒子编码 * @return */ BoxDevice selectByCode(String code); + + /** + * 批量修改版本号 + * + * @param ids + */ + void updatePath(BoxIdForms ids); } 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 index 7117463..bc34771 100644 --- 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 @@ -13,7 +13,7 @@ * 盒子状态更新 * @param code 盒子编码 */ - void reloadStatus(String code); + void reloadStatus(String code,String version); /** * 盒子指令下发 diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java new file mode 100644 index 0000000..6f2ed5a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; + +public interface ISafeCasicFileService { + String saveFile(MultipartFile file) throws IOException; + List listFiles(); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 9d681dd..6e91b47 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,19 +1,21 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.device.dao.BoxDeviceMapper; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -62,8 +64,8 @@ } private void wrapper(BoxDevice boxDevice) { - if(boxDevice.getDeviceStatus() != null) { - String statusName = abstractDictService.getDictNameByCode("status",boxDevice.getDeviceStatus()+""); + if (boxDevice.getDeviceStatus() != null) { + String statusName = abstractDictService.getDictNameByCode("status", boxDevice.getDeviceStatus() + ""); boxDevice.setDeviceStatusName(statusName); } } @@ -112,6 +114,16 @@ return boxDevice; } + @Override + public void updatePath(BoxIdForms ids) { + if (CollectionUtil.isNotEmpty(ids.getIds())) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDevice::getPath, ids.getVersionPath()); + update.in(BoxDevice::getId, ids.getIds()); + this.update(update); + } + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java index beadcd2..b4a999e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -9,11 +10,9 @@ 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.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; -import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; -import com.casic.missiles.modular.device.service.IDeviceAuthService; -import com.casic.missiles.modular.device.service.IDeviceModelRelationService; -import com.casic.missiles.modular.device.service.IDeviceSceneRelationService; +import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,6 +24,7 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; @Api(tags = "设备同步接口") @RestController @@ -33,14 +33,17 @@ private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; + private final IBoxDeviceService boxDeviceService; private final IBoxDeviceRelationService boxDeviceRelationService; private final IDeviceAuthService deviceAuthService; + @Value("${casic.file.uploadPath:D://tmp//}") private String filePath; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { + public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceService boxDeviceService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; + this.boxDeviceService = boxDeviceService; this.boxDeviceRelationService = boxDeviceRelationService; this.deviceAuthService = deviceAuthService; } @@ -74,19 +77,50 @@ * @param code * @return */ + @GetMapping("/info") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + if (StrUtil.isEmpty(code)) { + return ResponseDataDTO.error("设备编码不能为空"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BoxDevice::getCode, code); + BoxDevice boxDevice = boxDeviceService.getOne(query); + clearBoxDevice(boxDevice); + return ResponseDataDTO.success(boxDevice); + } + + private void clearBoxDevice(BoxDevice boxDevice) { + boxDevice.setClientPrivateKey(null); + boxDevice.setClientPublicKey(null); + boxDevice.setServerPrivateKey(null); + boxDevice.setServerPublicKey(null); + } + + /** + * 心跳接收 + * + * @param code + * @return + */ @GetMapping("/heart") @ResponseBody - public ResponseDataDTO heart(String code) { + public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { return ResponseDataDTO.error("未获取到有效登录token"); } - deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } /** - * * @param path * @return */ @@ -153,4 +187,4 @@ return null; } -} +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java new file mode 100644 index 0000000..4a48309 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +@Api(tags = "安全生产附件") +@RestController +@RequestMapping({"/safe/file"}) +public class SafeFileManagerController { + @Resource + private ISafeCasicFileService casicFileService; + + @ApiOperation(value = "盒子服务附件上传") + @PostMapping({"/upload"}) + @ResponseBody + public Object upload(@RequestParam("file") MultipartFile file) throws IOException { + String fileId = this.casicFileService.saveFile(file); + return fileId != null ? ResponseData.success(fileId) : ResponseData.error("文件为空"); + } + + @ApiOperation(value = "盒子服务版本查询") + @GetMapping({"/version"}) + @ResponseBody + public ResponseDataDTO> version() throws IOException { + List listFiles = this.casicFileService.listFiles(); + return ResponseDataDTO.success(listFiles); + } +} 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 deleted file mode 100644 index c067f09..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java +++ /dev/null @@ -1,174 +0,0 @@ -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/dao/mapping/BoxDeviceMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml index bd8b8c7..2b251de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml @@ -49,11 +49,11 @@ a.device_status as deviceStatus , a.box_name - as boxName + as boxName select - ,b.AREA_NAME as areaName,c.FULL_NAME as deptName + ,a.path,b.AREA_NAME as areaName,c.FULL_NAME as deptName from box_device a inner join sys_area b on a.area = b.id inner join sys_dept c on a.dept_id = c.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java new file mode 100644 index 0000000..20f5de2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class BoxIdForms { + private List ids; + private String versionPath; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java new file mode 100644 index 0000000..33e6fcb --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class FileVersionDTO { + /** + * 版本号 + */ + private String version; + /** + * 版本路径 + */ + private String filePath; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java index 7dc0ac5..3d8c43b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java @@ -86,10 +86,21 @@ @ApiModelProperty(value = "客户端私钥", dataType = "String") @TableField("client_private_key") private String clientPrivateKey; + + @ApiModelProperty(value = "服务版本号", dataType = "String") + private String version; + @TableField(exist = false) private String areaName; + @TableField(exist = false) private String deptName; + /** + * 盒子升级包路径 + */ + @ApiModelProperty(value = "盒子升级包路径", dataType = "String") + private String path; + @Override public String toString() { return "BoxDevice{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 864d9aa..0158766 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.model.BoxDevice; import java.util.List; @@ -21,18 +22,28 @@ * 盒子信息 分页检索 */ List selectBoxDevicePage(Page page, QueryWrapper query); - List selectBoxDeviceList( QueryWrapper query); + + List selectBoxDeviceList(QueryWrapper query); /** * 盒子key生成 + * * @param boxDevice */ void genKey(BoxDevice boxDevice); /** * 根据编码查询边缘盒子 + * * @param code 盒子编码 * @return */ BoxDevice selectByCode(String code); + + /** + * 批量修改版本号 + * + * @param ids + */ + void updatePath(BoxIdForms ids); } 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 index 7117463..bc34771 100644 --- 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 @@ -13,7 +13,7 @@ * 盒子状态更新 * @param code 盒子编码 */ - void reloadStatus(String code); + void reloadStatus(String code,String version); /** * 盒子指令下发 diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java new file mode 100644 index 0000000..6f2ed5a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; + +public interface ISafeCasicFileService { + String saveFile(MultipartFile file) throws IOException; + List listFiles(); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 9d681dd..6e91b47 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,19 +1,21 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.device.dao.BoxDeviceMapper; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -62,8 +64,8 @@ } private void wrapper(BoxDevice boxDevice) { - if(boxDevice.getDeviceStatus() != null) { - String statusName = abstractDictService.getDictNameByCode("status",boxDevice.getDeviceStatus()+""); + if (boxDevice.getDeviceStatus() != null) { + String statusName = abstractDictService.getDictNameByCode("status", boxDevice.getDeviceStatus() + ""); boxDevice.setDeviceStatusName(statusName); } } @@ -112,6 +114,16 @@ return boxDevice; } + @Override + public void updatePath(BoxIdForms ids) { + if (CollectionUtil.isNotEmpty(ids.getIds())) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDevice::getPath, ids.getVersionPath()); + update.in(BoxDevice::getId, ids.getIds()); + this.update(update); + } + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { 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 index 4fe7758..3490cc2 100644 --- 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 @@ -21,12 +21,13 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; @Slf4j @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; - + private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { this.boxDeviceService = boxDeviceService; } @@ -76,11 +77,12 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code) { + public void reloadStatus(String code,String version) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("code", code); updateWrapper.set("device_status", 1); updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); boxDeviceService.update(updateWrapper); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SafeCasiscDiskServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SafeCasiscDiskServiceImpl.java new file mode 100644 index 0000000..bf82ed3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SafeCasiscDiskServiceImpl.java @@ -0,0 +1,74 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.io.FileUtil; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +@Slf4j +@Component +public class SafeCasiscDiskServiceImpl implements ISafeCasicFileService { + @Value("${casic.file.uploadPath:D://tmp//}") + private String filePath; + + // 正则表达式匹配中文字符范围 + private static final String CHINESE_REGEX = "[\\u4e00-\\u9fa5]"; + private static final String VERSION_PATH = "version"; + + public static boolean isNotChinese(String str) { + Pattern pattern = Pattern.compile(CHINESE_REGEX); + Matcher matcher = pattern.matcher(str); + // 如果匹配到中文字符,则返回false + return !matcher.find(); + } + + @Override + public String saveFile(MultipartFile file) throws IOException { + if (!file.isEmpty()) { + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + String oldName = file.getOriginalFilename(); + String filePrex = null; + if (isNotChinese(oldName)) { + filePrex = oldName; + } else { + filePrex = uuid + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + } + File dir = new File(this.filePath + VERSION_PATH); + if (!dir.exists()) { + dir.mkdirs(); + log.info("创建文件夹路径为:{}", dir.getPath()); + } + String pathName = dir.getPath() + File.separator + filePrex; + file.transferTo(new File(pathName)); + return VERSION_PATH+File.separator.concat(filePrex); + } else { + return null; + } + } + + @Override + public List listFiles() { + File folder = FileUtil.file(this.filePath + VERSION_PATH); + List files = FileUtil.loopFiles(folder); + return files.stream().map(file -> { + FileVersionDTO versionDTO = new FileVersionDTO(); + versionDTO.setVersion(file.getName().substring(0,file.getName().lastIndexOf("."))); + versionDTO.setFilePath(VERSION_PATH+File.separator+file.getName()); + return versionDTO; + }).collect(Collectors.toList()); + } +} diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java index beadcd2..b4a999e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -9,11 +10,9 @@ 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.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; -import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; -import com.casic.missiles.modular.device.service.IDeviceAuthService; -import com.casic.missiles.modular.device.service.IDeviceModelRelationService; -import com.casic.missiles.modular.device.service.IDeviceSceneRelationService; +import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,6 +24,7 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; @Api(tags = "设备同步接口") @RestController @@ -33,14 +33,17 @@ private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; + private final IBoxDeviceService boxDeviceService; private final IBoxDeviceRelationService boxDeviceRelationService; private final IDeviceAuthService deviceAuthService; + @Value("${casic.file.uploadPath:D://tmp//}") private String filePath; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { + public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceService boxDeviceService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; + this.boxDeviceService = boxDeviceService; this.boxDeviceRelationService = boxDeviceRelationService; this.deviceAuthService = deviceAuthService; } @@ -74,19 +77,50 @@ * @param code * @return */ + @GetMapping("/info") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + if (StrUtil.isEmpty(code)) { + return ResponseDataDTO.error("设备编码不能为空"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BoxDevice::getCode, code); + BoxDevice boxDevice = boxDeviceService.getOne(query); + clearBoxDevice(boxDevice); + return ResponseDataDTO.success(boxDevice); + } + + private void clearBoxDevice(BoxDevice boxDevice) { + boxDevice.setClientPrivateKey(null); + boxDevice.setClientPublicKey(null); + boxDevice.setServerPrivateKey(null); + boxDevice.setServerPublicKey(null); + } + + /** + * 心跳接收 + * + * @param code + * @return + */ @GetMapping("/heart") @ResponseBody - public ResponseDataDTO heart(String code) { + public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { return ResponseDataDTO.error("未获取到有效登录token"); } - deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } /** - * * @param path * @return */ @@ -153,4 +187,4 @@ return null; } -} +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java new file mode 100644 index 0000000..4a48309 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +@Api(tags = "安全生产附件") +@RestController +@RequestMapping({"/safe/file"}) +public class SafeFileManagerController { + @Resource + private ISafeCasicFileService casicFileService; + + @ApiOperation(value = "盒子服务附件上传") + @PostMapping({"/upload"}) + @ResponseBody + public Object upload(@RequestParam("file") MultipartFile file) throws IOException { + String fileId = this.casicFileService.saveFile(file); + return fileId != null ? ResponseData.success(fileId) : ResponseData.error("文件为空"); + } + + @ApiOperation(value = "盒子服务版本查询") + @GetMapping({"/version"}) + @ResponseBody + public ResponseDataDTO> version() throws IOException { + List listFiles = this.casicFileService.listFiles(); + return ResponseDataDTO.success(listFiles); + } +} 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 deleted file mode 100644 index c067f09..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java +++ /dev/null @@ -1,174 +0,0 @@ -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/dao/mapping/BoxDeviceMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml index bd8b8c7..2b251de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml @@ -49,11 +49,11 @@ a.device_status as deviceStatus , a.box_name - as boxName + as boxName select - ,b.AREA_NAME as areaName,c.FULL_NAME as deptName + ,a.path,b.AREA_NAME as areaName,c.FULL_NAME as deptName from box_device a inner join sys_area b on a.area = b.id inner join sys_dept c on a.dept_id = c.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java new file mode 100644 index 0000000..20f5de2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class BoxIdForms { + private List ids; + private String versionPath; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java new file mode 100644 index 0000000..33e6fcb --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class FileVersionDTO { + /** + * 版本号 + */ + private String version; + /** + * 版本路径 + */ + private String filePath; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java index 7dc0ac5..3d8c43b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java @@ -86,10 +86,21 @@ @ApiModelProperty(value = "客户端私钥", dataType = "String") @TableField("client_private_key") private String clientPrivateKey; + + @ApiModelProperty(value = "服务版本号", dataType = "String") + private String version; + @TableField(exist = false) private String areaName; + @TableField(exist = false) private String deptName; + /** + * 盒子升级包路径 + */ + @ApiModelProperty(value = "盒子升级包路径", dataType = "String") + private String path; + @Override public String toString() { return "BoxDevice{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 864d9aa..0158766 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.model.BoxDevice; import java.util.List; @@ -21,18 +22,28 @@ * 盒子信息 分页检索 */ List selectBoxDevicePage(Page page, QueryWrapper query); - List selectBoxDeviceList( QueryWrapper query); + + List selectBoxDeviceList(QueryWrapper query); /** * 盒子key生成 + * * @param boxDevice */ void genKey(BoxDevice boxDevice); /** * 根据编码查询边缘盒子 + * * @param code 盒子编码 * @return */ BoxDevice selectByCode(String code); + + /** + * 批量修改版本号 + * + * @param ids + */ + void updatePath(BoxIdForms ids); } 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 index 7117463..bc34771 100644 --- 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 @@ -13,7 +13,7 @@ * 盒子状态更新 * @param code 盒子编码 */ - void reloadStatus(String code); + void reloadStatus(String code,String version); /** * 盒子指令下发 diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java new file mode 100644 index 0000000..6f2ed5a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; + +public interface ISafeCasicFileService { + String saveFile(MultipartFile file) throws IOException; + List listFiles(); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 9d681dd..6e91b47 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,19 +1,21 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.device.dao.BoxDeviceMapper; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -62,8 +64,8 @@ } private void wrapper(BoxDevice boxDevice) { - if(boxDevice.getDeviceStatus() != null) { - String statusName = abstractDictService.getDictNameByCode("status",boxDevice.getDeviceStatus()+""); + if (boxDevice.getDeviceStatus() != null) { + String statusName = abstractDictService.getDictNameByCode("status", boxDevice.getDeviceStatus() + ""); boxDevice.setDeviceStatusName(statusName); } } @@ -112,6 +114,16 @@ return boxDevice; } + @Override + public void updatePath(BoxIdForms ids) { + if (CollectionUtil.isNotEmpty(ids.getIds())) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDevice::getPath, ids.getVersionPath()); + update.in(BoxDevice::getId, ids.getIds()); + this.update(update); + } + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { 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 index 4fe7758..3490cc2 100644 --- 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 @@ -21,12 +21,13 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; @Slf4j @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; - + private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { this.boxDeviceService = boxDeviceService; } @@ -76,11 +77,12 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code) { + public void reloadStatus(String code,String version) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("code", code); updateWrapper.set("device_status", 1); updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); boxDeviceService.update(updateWrapper); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SafeCasiscDiskServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SafeCasiscDiskServiceImpl.java new file mode 100644 index 0000000..bf82ed3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SafeCasiscDiskServiceImpl.java @@ -0,0 +1,74 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.io.FileUtil; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +@Slf4j +@Component +public class SafeCasiscDiskServiceImpl implements ISafeCasicFileService { + @Value("${casic.file.uploadPath:D://tmp//}") + private String filePath; + + // 正则表达式匹配中文字符范围 + private static final String CHINESE_REGEX = "[\\u4e00-\\u9fa5]"; + private static final String VERSION_PATH = "version"; + + public static boolean isNotChinese(String str) { + Pattern pattern = Pattern.compile(CHINESE_REGEX); + Matcher matcher = pattern.matcher(str); + // 如果匹配到中文字符,则返回false + return !matcher.find(); + } + + @Override + public String saveFile(MultipartFile file) throws IOException { + if (!file.isEmpty()) { + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + String oldName = file.getOriginalFilename(); + String filePrex = null; + if (isNotChinese(oldName)) { + filePrex = oldName; + } else { + filePrex = uuid + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + } + File dir = new File(this.filePath + VERSION_PATH); + if (!dir.exists()) { + dir.mkdirs(); + log.info("创建文件夹路径为:{}", dir.getPath()); + } + String pathName = dir.getPath() + File.separator + filePrex; + file.transferTo(new File(pathName)); + return VERSION_PATH+File.separator.concat(filePrex); + } else { + return null; + } + } + + @Override + public List listFiles() { + File folder = FileUtil.file(this.filePath + VERSION_PATH); + List files = FileUtil.loopFiles(folder); + return files.stream().map(file -> { + FileVersionDTO versionDTO = new FileVersionDTO(); + versionDTO.setVersion(file.getName().substring(0,file.getName().lastIndexOf("."))); + versionDTO.setFilePath(VERSION_PATH+File.separator+file.getName()); + return versionDTO; + }).collect(Collectors.toList()); + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/vo/RiskPointInfoVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/vo/RiskPointInfoVO.java index 8d6fa75..c2152f2 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/vo/RiskPointInfoVO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/vo/RiskPointInfoVO.java @@ -32,7 +32,15 @@ public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); if (StrUtil.isNotEmpty(riskName)) { - query.like("risk_name", riskName); + if (StrUtil.isNotEmpty(riskType) && "3".equals(riskType)) { + query.like("hazardous_chemical_site", riskName); + } else if (StrUtil.isNotEmpty(riskType) && "4".equals(riskType)) { + query.like("hazardous_work", riskName); + } else if (StrUtil.isNotEmpty(riskType) && "5".equals(riskType)) { + query.like("work_procedure", riskName); + } else { + query.like("risk_name", riskName); + } } if (deptId != null) { query.eq("dept_id", deptId); diff --git a/casic-web/src/main/java/com/casic/missiles/test/Test.java b/casic-web/src/main/java/com/casic/missiles/test/Test.java index 37a85bc..8ada97d 100644 --- a/casic-web/src/main/java/com/casic/missiles/test/Test.java +++ b/casic-web/src/main/java/com/casic/missiles/test/Test.java @@ -15,17 +15,24 @@ public class Test { public static void main(String[] args) throws Exception { - File file = new File("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); - String task = ZipFileUtil.getZipHandleTask("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); - System.out.println(task); - String md5 = calculateMD5("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); - System.out.println(md5); - String md52 = calculateMD5("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241122.zip"); - System.out.println(md52); +// File file = new File("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); +// String task = ZipFileUtil.getZipHandleTask("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); +// System.out.println(task); +// String md5 = calculateMD5("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); +// System.out.println(md5); +// String md52 = calculateMD5("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241122.zip"); +// System.out.println(md52); -// testDeviceLogin(); + testDeviceLogin(); System.out.println( DateUtil.offsetMinute(new Date(),-5)); } + public static void testDeviceLogin() throws Exception { + Long time = System.currentTimeMillis(); + String str = "EMBLA23C29A00115_" + time; + String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB"; + String sec = RSAUtils.encrypt(str, pubKey); + System.out.println(sec); + } public static String calculateMD5(String filePath) { try { // 创建MessageDigest实例,用于计算MD5值 @@ -59,13 +66,7 @@ return null; } } - public static void testDeviceLogin() throws Exception { - Long time = System.currentTimeMillis(); - String str = "EMBLA23C29A00115_" + time; - String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCA63rwNnsJ4aPvLKVIYMm44/+kfPxsiRqKV+I9/kM6OWqxKACqGQpF9JYXX7kKYDi7I8D6oi11c6XrNrWkB1ZX4DfT4rO5xnV3wARz9cUO/1WEKLut68+AhlOAcBQbOOvDjsobY/AFbwURNx4SJOMRfNntId1eNy44XXjnpq8udQIDAQAB"; - String sec = RSAUtils.encrypt(str, pubKey); - System.out.println(sec); - } + public static void test() { String token = WvpUtil.loginWvp("http://192.168.83.42:18080", "admin", "21232f297a57a5a743894a0e4a801fc3"); diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java index beadcd2..b4a999e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -9,11 +10,9 @@ 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.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; -import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; -import com.casic.missiles.modular.device.service.IDeviceAuthService; -import com.casic.missiles.modular.device.service.IDeviceModelRelationService; -import com.casic.missiles.modular.device.service.IDeviceSceneRelationService; +import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,6 +24,7 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; @Api(tags = "设备同步接口") @RestController @@ -33,14 +33,17 @@ private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; + private final IBoxDeviceService boxDeviceService; private final IBoxDeviceRelationService boxDeviceRelationService; private final IDeviceAuthService deviceAuthService; + @Value("${casic.file.uploadPath:D://tmp//}") private String filePath; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { + public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceService boxDeviceService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; + this.boxDeviceService = boxDeviceService; this.boxDeviceRelationService = boxDeviceRelationService; this.deviceAuthService = deviceAuthService; } @@ -74,19 +77,50 @@ * @param code * @return */ + @GetMapping("/info") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + if (StrUtil.isEmpty(code)) { + return ResponseDataDTO.error("设备编码不能为空"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BoxDevice::getCode, code); + BoxDevice boxDevice = boxDeviceService.getOne(query); + clearBoxDevice(boxDevice); + return ResponseDataDTO.success(boxDevice); + } + + private void clearBoxDevice(BoxDevice boxDevice) { + boxDevice.setClientPrivateKey(null); + boxDevice.setClientPublicKey(null); + boxDevice.setServerPrivateKey(null); + boxDevice.setServerPublicKey(null); + } + + /** + * 心跳接收 + * + * @param code + * @return + */ @GetMapping("/heart") @ResponseBody - public ResponseDataDTO heart(String code) { + public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { return ResponseDataDTO.error("未获取到有效登录token"); } - deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } /** - * * @param path * @return */ @@ -153,4 +187,4 @@ return null; } -} +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java new file mode 100644 index 0000000..4a48309 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +@Api(tags = "安全生产附件") +@RestController +@RequestMapping({"/safe/file"}) +public class SafeFileManagerController { + @Resource + private ISafeCasicFileService casicFileService; + + @ApiOperation(value = "盒子服务附件上传") + @PostMapping({"/upload"}) + @ResponseBody + public Object upload(@RequestParam("file") MultipartFile file) throws IOException { + String fileId = this.casicFileService.saveFile(file); + return fileId != null ? ResponseData.success(fileId) : ResponseData.error("文件为空"); + } + + @ApiOperation(value = "盒子服务版本查询") + @GetMapping({"/version"}) + @ResponseBody + public ResponseDataDTO> version() throws IOException { + List listFiles = this.casicFileService.listFiles(); + return ResponseDataDTO.success(listFiles); + } +} 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 deleted file mode 100644 index c067f09..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java +++ /dev/null @@ -1,174 +0,0 @@ -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/dao/mapping/BoxDeviceMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml index bd8b8c7..2b251de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml @@ -49,11 +49,11 @@ a.device_status as deviceStatus , a.box_name - as boxName + as boxName select - ,b.AREA_NAME as areaName,c.FULL_NAME as deptName + ,a.path,b.AREA_NAME as areaName,c.FULL_NAME as deptName from box_device a inner join sys_area b on a.area = b.id inner join sys_dept c on a.dept_id = c.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java new file mode 100644 index 0000000..20f5de2 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/BoxIdForms.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class BoxIdForms { + private List ids; + private String versionPath; +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java new file mode 100644 index 0000000..33e6fcb --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/FileVersionDTO.java @@ -0,0 +1,15 @@ +package com.casic.missiles.modular.device.dto; + +import lombok.Data; + +@Data +public class FileVersionDTO { + /** + * 版本号 + */ + private String version; + /** + * 版本路径 + */ + private String filePath; +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java index 7dc0ac5..3d8c43b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDevice.java @@ -86,10 +86,21 @@ @ApiModelProperty(value = "客户端私钥", dataType = "String") @TableField("client_private_key") private String clientPrivateKey; + + @ApiModelProperty(value = "服务版本号", dataType = "String") + private String version; + @TableField(exist = false) private String areaName; + @TableField(exist = false) private String deptName; + /** + * 盒子升级包路径 + */ + @ApiModelProperty(value = "盒子升级包路径", dataType = "String") + private String path; + @Override public String toString() { return "BoxDevice{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 864d9aa..0158766 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.model.BoxDevice; import java.util.List; @@ -21,18 +22,28 @@ * 盒子信息 分页检索 */ List selectBoxDevicePage(Page page, QueryWrapper query); - List selectBoxDeviceList( QueryWrapper query); + + List selectBoxDeviceList(QueryWrapper query); /** * 盒子key生成 + * * @param boxDevice */ void genKey(BoxDevice boxDevice); /** * 根据编码查询边缘盒子 + * * @param code 盒子编码 * @return */ BoxDevice selectByCode(String code); + + /** + * 批量修改版本号 + * + * @param ids + */ + void updatePath(BoxIdForms ids); } 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 index 7117463..bc34771 100644 --- 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 @@ -13,7 +13,7 @@ * 盒子状态更新 * @param code 盒子编码 */ - void reloadStatus(String code); + void reloadStatus(String code,String version); /** * 盒子指令下发 diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java new file mode 100644 index 0000000..6f2ed5a --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/ISafeCasicFileService.java @@ -0,0 +1,12 @@ +package com.casic.missiles.modular.device.service; + +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; + +public interface ISafeCasicFileService { + String saveFile(MultipartFile file) throws IOException; + List listFiles(); +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 9d681dd..6e91b47 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,19 +1,21 @@ package com.casic.missiles.modular.device.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.device.dao.BoxDeviceMapper; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -62,8 +64,8 @@ } private void wrapper(BoxDevice boxDevice) { - if(boxDevice.getDeviceStatus() != null) { - String statusName = abstractDictService.getDictNameByCode("status",boxDevice.getDeviceStatus()+""); + if (boxDevice.getDeviceStatus() != null) { + String statusName = abstractDictService.getDictNameByCode("status", boxDevice.getDeviceStatus() + ""); boxDevice.setDeviceStatusName(statusName); } } @@ -112,6 +114,16 @@ return boxDevice; } + @Override + public void updatePath(BoxIdForms ids) { + if (CollectionUtil.isNotEmpty(ids.getIds())) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDevice::getPath, ids.getVersionPath()); + update.in(BoxDevice::getId, ids.getIds()); + this.update(update); + } + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { 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 index 4fe7758..3490cc2 100644 --- 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 @@ -21,12 +21,13 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; @Slf4j @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; - + private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { this.boxDeviceService = boxDeviceService; } @@ -76,11 +77,12 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code) { + public void reloadStatus(String code,String version) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("code", code); updateWrapper.set("device_status", 1); updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); boxDeviceService.update(updateWrapper); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SafeCasiscDiskServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SafeCasiscDiskServiceImpl.java new file mode 100644 index 0000000..bf82ed3 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SafeCasiscDiskServiceImpl.java @@ -0,0 +1,74 @@ +package com.casic.missiles.modular.device.service.impl; + +import cn.hutool.core.io.FileUtil; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +@Slf4j +@Component +public class SafeCasiscDiskServiceImpl implements ISafeCasicFileService { + @Value("${casic.file.uploadPath:D://tmp//}") + private String filePath; + + // 正则表达式匹配中文字符范围 + private static final String CHINESE_REGEX = "[\\u4e00-\\u9fa5]"; + private static final String VERSION_PATH = "version"; + + public static boolean isNotChinese(String str) { + Pattern pattern = Pattern.compile(CHINESE_REGEX); + Matcher matcher = pattern.matcher(str); + // 如果匹配到中文字符,则返回false + return !matcher.find(); + } + + @Override + public String saveFile(MultipartFile file) throws IOException { + if (!file.isEmpty()) { + String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + String oldName = file.getOriginalFilename(); + String filePrex = null; + if (isNotChinese(oldName)) { + filePrex = oldName; + } else { + filePrex = uuid + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + } + File dir = new File(this.filePath + VERSION_PATH); + if (!dir.exists()) { + dir.mkdirs(); + log.info("创建文件夹路径为:{}", dir.getPath()); + } + String pathName = dir.getPath() + File.separator + filePrex; + file.transferTo(new File(pathName)); + return VERSION_PATH+File.separator.concat(filePrex); + } else { + return null; + } + } + + @Override + public List listFiles() { + File folder = FileUtil.file(this.filePath + VERSION_PATH); + List files = FileUtil.loopFiles(folder); + return files.stream().map(file -> { + FileVersionDTO versionDTO = new FileVersionDTO(); + versionDTO.setVersion(file.getName().substring(0,file.getName().lastIndexOf("."))); + versionDTO.setFilePath(VERSION_PATH+File.separator+file.getName()); + return versionDTO; + }).collect(Collectors.toList()); + } +} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/vo/RiskPointInfoVO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/vo/RiskPointInfoVO.java index 8d6fa75..c2152f2 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/vo/RiskPointInfoVO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/vo/RiskPointInfoVO.java @@ -32,7 +32,15 @@ public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); if (StrUtil.isNotEmpty(riskName)) { - query.like("risk_name", riskName); + if (StrUtil.isNotEmpty(riskType) && "3".equals(riskType)) { + query.like("hazardous_chemical_site", riskName); + } else if (StrUtil.isNotEmpty(riskType) && "4".equals(riskType)) { + query.like("hazardous_work", riskName); + } else if (StrUtil.isNotEmpty(riskType) && "5".equals(riskType)) { + query.like("work_procedure", riskName); + } else { + query.like("risk_name", riskName); + } } if (deptId != null) { query.eq("dept_id", deptId); diff --git a/casic-web/src/main/java/com/casic/missiles/test/Test.java b/casic-web/src/main/java/com/casic/missiles/test/Test.java index 37a85bc..8ada97d 100644 --- a/casic-web/src/main/java/com/casic/missiles/test/Test.java +++ b/casic-web/src/main/java/com/casic/missiles/test/Test.java @@ -15,17 +15,24 @@ public class Test { public static void main(String[] args) throws Exception { - File file = new File("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); - String task = ZipFileUtil.getZipHandleTask("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); - System.out.println(task); - String md5 = calculateMD5("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); - System.out.println(md5); - String md52 = calculateMD5("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241122.zip"); - System.out.println(md52); +// File file = new File("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); +// String task = ZipFileUtil.getZipHandleTask("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); +// System.out.println(task); +// String md5 = calculateMD5("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241121.zip"); +// System.out.println(md5); +// String md52 = calculateMD5("C:\\Users\\lwh\\Desktop\\zip\\safe-v5-20241122.zip"); +// System.out.println(md52); -// testDeviceLogin(); + testDeviceLogin(); System.out.println( DateUtil.offsetMinute(new Date(),-5)); } + public static void testDeviceLogin() throws Exception { + Long time = System.currentTimeMillis(); + String str = "EMBLA23C29A00115_" + time; + String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB"; + String sec = RSAUtils.encrypt(str, pubKey); + System.out.println(sec); + } public static String calculateMD5(String filePath) { try { // 创建MessageDigest实例,用于计算MD5值 @@ -59,13 +66,7 @@ return null; } } - public static void testDeviceLogin() throws Exception { - Long time = System.currentTimeMillis(); - String str = "EMBLA23C29A00115_" + time; - String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCA63rwNnsJ4aPvLKVIYMm44/+kfPxsiRqKV+I9/kM6OWqxKACqGQpF9JYXX7kKYDi7I8D6oi11c6XrNrWkB1ZX4DfT4rO5xnV3wARz9cUO/1WEKLut68+AhlOAcBQbOOvDjsobY/AFbwURNx4SJOMRfNntId1eNy44XXjnpq8udQIDAQAB"; - String sec = RSAUtils.encrypt(str, pubKey); - System.out.println(sec); - } + public static void test() { String token = WvpUtil.loginWvp("http://192.168.83.42:18080", "admin", "21232f297a57a5a743894a0e4a801fc3"); diff --git a/casic-web/src/main/resources/config/application-test42.yml b/casic-web/src/main/resources/config/application-test42.yml index f3b3996..de21991 100644 --- a/casic-web/src/main/resources/config/application-test42.yml +++ b/casic-web/src/main/resources/config/application-test42.yml @@ -33,7 +33,7 @@ hikSdk: /casic/hiklib/HCNetSDK.dll hikPlay: /casic/hiklib/PlayCtrl.dll file: - uploadPath: /opt/stay/data/tmp/ + uploadPath: D://tmp// stay: picPath: /opt/stay/data/stay/ log: #百万日志存储量 diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml index d8bd4e4..01a3187 100644 --- a/casic-web/src/main/resources/config/application.yml +++ b/casic-web/src/main/resources/config/application.yml @@ -30,7 +30,7 @@ url: http://localhost/alarm/#/realTime/page #前端地址 swagger-open: true knife4j: - groups: 系统管理:com.casic.missiles.modular.system,安全生产业务包:com.casic.missiles.modular.device; + groups: 系统管理:com.casic.missiles.modular.system,安全生产业务包:com.casic.missiles.modular.device,视频会议:com.casic.missiles.modular.meeting; kaptcha-open: false #是否开启登录时验证码 (true/false) muti-datasource-open: false #是否开启多数据源(true/false) spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) diff --git a/casic-meeting/pom.xml b/casic-meeting/pom.xml new file mode 100644 index 0000000..6a33cb7 --- /dev/null +++ b/casic-meeting/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.casic + casic-production-safety + 2.0.0 + ../pom.xml + + + casic-meeting + 2.0.0 + jar + casic-meeting + 视频会议 + + + + + com.hikvision.ga + artemis-http-client + 1.1.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + + + + + + com.casic + casic-admin-group + ${admin.version} + + + com.casic + casic-http + ${core.version} + + + com.casic + casic-admin-core + ${admin.version} + provided + + + io.springfox + springfox-swagger-ui + + + io.swagger + swagger-models + + + + + com.casic + casic-core + ${core.version} + provided + + + + com.casic + casic-admin-support + ${admin.version} + provided + + + com.casic + casic-area-starter + ${extension.version} + + + com.casic + casic-export-support + ${export.version} + + + org.springframework.boot + spring-boot-starter-web + ${boot.version} + provided + + + com.casic + casic-knife4j-boot-starter + ${extension.version} + + + + com.casic + casic-file-support + 2.0.0.alpha + compile + + + com.casic + casic-server + ${pro.version} + compile + + + + + + src/main/java + + **/*.xml + + + + ${project.basedir}/lib + + * + + + + + \ No newline at end of file diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java new file mode 100644 index 0000000..fd24b8a --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/controller/UserController.java @@ -0,0 +1,11 @@ +package com.casic.missiles.modular.meeting.controller; + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "会议用户") +@RestController +@RequiredArgsConstructor +public class UserController { +} diff --git a/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java new file mode 100644 index 0000000..15a5f53 --- /dev/null +++ b/casic-meeting/src/main/java/com/casic/missiles/modular/meeting/service/IUserService.java @@ -0,0 +1,4 @@ +package com.casic.missiles.modular.meeting.service; + +public interface IUserService { +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java b/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java deleted file mode 100644 index d7b15b3..0000000 --- a/casic-server/src/main/java/com/casic/missiles/modular/util/Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.casic.missiles.modular.util; - -public class Test { - public static void main(String[] args) { - // 需设置字典类型 - // 危险源等级 - // 危险性质 - // 危险作业等级 - // 事故类型 危险作业工序 - - // - System.out.println(""); - } -} diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java new file mode 100644 index 0000000..08017e7 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.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 AnalysisStatisticsController extends BaseController { + + private final IBusDeviceInfoService busDeviceInfoService; + private final IConfigService configService; + private final IRiskPointInfoService riskPointInfoService; + private final AbstractAuthService authService; + private final IAlarmRecordService alarmRecordService; + public AnalysisStatisticsController(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/controller/BoxDeviceController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java index 86c75e3..04e22d0 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceController.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.BoxIdForms; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; @@ -90,7 +91,12 @@ boxDeviceService.updateById(boxDevice); return ResponseDataDTO.success(); } - + @ApiOperation(value = "修改接口") + @PostMapping(value = "/batch/update/path") + public ResponseDataDTO updatePath(@RequestBody BoxIdForms ids) { + boxDeviceService.updatePath(ids); + return ResponseDataDTO.success(); + } @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java index beadcd2..b4a999e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/DeviceSyncController.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.controller; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -9,11 +10,9 @@ 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.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; -import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; -import com.casic.missiles.modular.device.service.IDeviceAuthService; -import com.casic.missiles.modular.device.service.IDeviceModelRelationService; -import com.casic.missiles.modular.device.service.IDeviceSceneRelationService; +import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,6 +24,7 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; @Api(tags = "设备同步接口") @RestController @@ -33,14 +33,17 @@ private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; + private final IBoxDeviceService boxDeviceService; private final IBoxDeviceRelationService boxDeviceRelationService; private final IDeviceAuthService deviceAuthService; + @Value("${casic.file.uploadPath:D://tmp//}") private String filePath; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { + public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, IBoxDeviceService boxDeviceService, IBoxDeviceRelationService boxDeviceRelationService, IDeviceAuthService deviceAuthService) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; + this.boxDeviceService = boxDeviceService; this.boxDeviceRelationService = boxDeviceRelationService; this.deviceAuthService = deviceAuthService; } @@ -74,19 +77,50 @@ * @param code * @return */ + @GetMapping("/info") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + if (StrUtil.isEmpty(code)) { + return ResponseDataDTO.error("设备编码不能为空"); + } + + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BoxDevice::getCode, code); + BoxDevice boxDevice = boxDeviceService.getOne(query); + clearBoxDevice(boxDevice); + return ResponseDataDTO.success(boxDevice); + } + + private void clearBoxDevice(BoxDevice boxDevice) { + boxDevice.setClientPrivateKey(null); + boxDevice.setClientPublicKey(null); + boxDevice.setServerPrivateKey(null); + boxDevice.setServerPublicKey(null); + } + + /** + * 心跳接收 + * + * @param code + * @return + */ @GetMapping("/heart") @ResponseBody - public ResponseDataDTO heart(String code) { + public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { return ResponseDataDTO.error("未获取到有效登录token"); } - deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } /** - * * @param path * @return */ @@ -153,4 +187,4 @@ return null; } -} +} \ No newline at end of file diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java new file mode 100644 index 0000000..4a48309 --- /dev/null +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SafeFileManagerController.java @@ -0,0 +1,38 @@ +package com.casic.missiles.modular.device.controller; + +import com.casic.missiles.model.response.ResponseData; +import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.FileVersionDTO; +import com.casic.missiles.modular.device.service.ISafeCasicFileService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +@Api(tags = "安全生产附件") +@RestController +@RequestMapping({"/safe/file"}) +public class SafeFileManagerController { + @Resource + private ISafeCasicFileService casicFileService; + + @ApiOperation(value = "盒子服务附件上传") + @PostMapping({"/upload"}) + @ResponseBody + public Object upload(@RequestParam("file") MultipartFile file) throws IOException { + String fileId = this.casicFileService.saveFile(file); + return fileId != null ? ResponseData.success(fileId) : ResponseData.error("文件为空"); + } + + @ApiOperation(value = "盒子服务版本查询") + @GetMapping({"/version"}) + @ResponseBody + public ResponseDataDTO> version() throws IOException { + List listFiles = this.casicFileService.listFiles(); + return ResponseDataDTO.success(listFiles); + } +} 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 deleted file mode 100644 index c067f09..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/StatisticsController.java +++ /dev/null @@ -1,174 +0,0 @@ -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/dao/mapping/BoxDeviceMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml index bd8b8c7..2b251de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceMapper.xml @@ -49,11 +49,11 @@ a.device_status as deviceStatus , a.box_name - as boxName + as boxName