diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java index 25e3340..ebc43a8 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/service/impl/AvSyncServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; import com.casic.missiles.modular.device.dto.AvDeviceDTO; import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; @@ -51,28 +52,37 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); + try{ + //全量查询设备信息 + List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); - //全量查询设备信息 - List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); + if (CollectionUtil.isNotEmpty(deviceDTOS)) { + for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { + BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - if (CollectionUtil.isNotEmpty(deviceDTOS)) { - for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { - BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); + this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + } + + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); - this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); + query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); + if (CollectionUtil.isNotEmpty(deviceSns)) { + this.deviceInfoService.remove(query); + } + }else{ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); - if (CollectionUtil.isNotEmpty(deviceSns)) { - this.deviceInfoService.remove(query); - } + }catch (Exception e){ + e.printStackTrace(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", "0"); + this.deviceInfoService.update(updateWrapper); } - // AvUtil.dict(avUrl,avToken); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java index c434836..a7baa99 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/BusDeviceInfoMapper.java @@ -1,11 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import org.apache.ibatis.annotations.CacheNamespace; @@ -34,4 +34,10 @@ List selectDeviceBoundaryList(@Param("deviceId")Long id); List selectAllRecognitionUrl(); + + List focusVideosRisk(@Param("ew")QueryWrapper query); + + Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); + + List selectWarnObject(@Param("ew")QueryWrapper warnQuery); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml index 140db4a..cebd58d 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dao/mapping/BusDeviceInfoMapper.xml @@ -142,6 +142,46 @@ device_id = #{deviceId} + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java index 24279f0..b0baf9f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/IBusDeviceInfoService.java @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.service; +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.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.DeptDTO; import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.video.service.IDeviceInfoSupportService; @@ -82,4 +84,11 @@ * @return */ List selectDeviceBoundaryList(Long id); + + /** + * 关注视频查询 + * @param query + * @return + */ + List focusVideos(LambdaQueryWrapper query); } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java index 5c6b3b9..c9effed 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/BusDeviceInfoServiceImpl.java @@ -19,10 +19,7 @@ import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; import com.casic.missiles.modular.device.dao.BusDeviceInfoMapper; -import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; -import com.casic.missiles.modular.device.dto.DeptDTO; -import com.casic.missiles.modular.device.dto.DeviceBoundaryDTO; -import com.casic.missiles.modular.device.dto.DeviceRecognitionDTO; +import com.casic.missiles.modular.device.dto.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -217,7 +214,7 @@ AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { deptQuery.in(Dept::getId, scope.getDeptIds()); } deptQuery.inSql(Dept::getId, " select dept_id from bus_device_info "); @@ -476,6 +473,76 @@ return this.baseMapper.selectDeviceBoundaryList(id); } + @Transactional + @Override + public List focusVideos(LambdaQueryWrapper query) { + //work_Procedure 危险作业工序名称 + //risk_name 重大危险源名称 hazardLevel 危险等级 + //risk_name 危险点名称 grade 等级 + //hazardousWork 危险作业名称 workLevel危险作业等级 + //hazardousChemicalSite 危化品场所 + //检索设备信息 + List videoDTOS = new ArrayList<>(); + List deviceInfos = this.baseMapper.selectList(query); + for (BusDeviceInfo deviceInfo : deviceInfos) { + FocusVideoDTO videoDTO = new FocusVideoDTO(); + videoDTO.setMonitorId(deviceInfo.getId() + ""); + videoDTO.setMonitorName(deviceInfo.getMonitorName()); + videoDTO.setCameraIndexCode(deviceInfo.getCameraIndexCode()); + + //1.统计历史告警数 + QueryWrapper alarmQuery = new QueryWrapper<>(); + alarmQuery.eq("device_id", deviceInfo.getId()); + Integer count = this.baseMapper.selectAlarmNum(alarmQuery); + videoDTO.setAlarmNum(count); + //2.检索启用预警对象 + QueryWrapper warnQuery = new QueryWrapper<>(); + warnQuery.eq("a.device_id", deviceInfo.getId()); + warnQuery.eq("a.is_use","1"); + List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); + String attention = ""; + if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { +// StrUtil.join + List typeNames = warnObjectDTOS.stream().map(DeviceWarnObjectDTO::getTypeName).collect(Collectors.toList()); + attention = StrUtil.join(",", typeNames); + } + + //3.检索风险点信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("c.id", deviceInfo.getId()); + List riskDTOList = this.baseMapper.focusVideosRisk(deviceQuery); + for (RiskDTO riskDTO : riskDTOList) { + riskDTO.setAttention(attention); + switch (riskDTO.getRiskType()) { + //危险点 + case 1: + break; + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskDTO.setRiskName(riskDTO.getHazardousChemicalSite()); + break; + //危险作业 + case 4: + riskDTO.setRiskName(riskDTO.getHazardousWork()); + riskDTO.setNature(riskDTO.getHazardousRemark()); + break; + //危险作业工序 + case 5: + riskDTO.setRiskName(riskDTO.getWorkProcedure()); + riskDTO.setNature(riskDTO.getAccidentType()); + break; + } + } + videoDTO.setRiskDTOList(riskDTOList); + + videoDTOS.add(videoDTO); + } + return videoDTOS; + } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 diff --git a/casic-warning-analysis/pom.xml b/casic-warning-analysis/pom.xml index d784702..70aa09b 100644 --- a/casic-warning-analysis/pom.xml +++ b/casic-warning-analysis/pom.xml @@ -39,6 +39,11 @@ com.casic + casic-http + ${core.version} + + + com.casic casic-admin-core ${admin.version} provided diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java index 02de230..d11c11f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/auth/util/JwtUtil.java @@ -30,7 +30,7 @@ //RSA 解密 String str = RSAUtils.decrypt(loginForm.getSecret(), device.getServerPrivateKey()); - String key = loginForm.getCode() + loginForm.getTime() ; + String key = loginForm.getCode()+"_" + loginForm.getTime() ; if (!key.equals(str)) { //秘钥验证失败 throw new ServiceException(500,"秘钥验证失败"); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java index 7d9b8dd..8027fca 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BgController.java @@ -2,7 +2,6 @@ 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.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; @@ -10,18 +9,17 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.constant.AnalysisConstants; -import com.casic.missiles.modular.device.dto.analysis.AreaDangerDTO; import com.casic.missiles.modular.device.dto.ConfigJson; +import com.casic.missiles.modular.device.dto.FocusVideoDTO; import com.casic.missiles.modular.device.dto.RiskPointDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DangerCategoryDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; -import com.casic.missiles.modular.device.model.AlgoModel; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.dto.bo.VideoIdsBo; +import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.model.RiskPointInfo; import com.casic.missiles.modular.device.service.IAlgoModelService; +import com.casic.missiles.modular.device.service.IBusDeviceInfoService; import com.casic.missiles.modular.device.service.IModelRecognitionTypeService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; -import com.casic.missiles.modular.device.vo.AlgoModelVO; import com.casic.missiles.modular.system.model.Config; import com.casic.missiles.modular.system.service.IConfigService; import io.swagger.annotations.Api; @@ -41,14 +39,12 @@ @RequestMapping("/bg") public class BgController extends BaseController { - private final IAlgoModelService algoModelService; - private final IModelRecognitionTypeService modelRecognitionTypeService; + private final IBusDeviceInfoService busDeviceInfoService; private final IConfigService configService; private final IRiskPointInfoService riskPointInfoService; - public BgController(IAlgoModelService algoModelService, IModelRecognitionTypeService modelRecognitionTypeService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { - this.algoModelService = algoModelService; - this.modelRecognitionTypeService = modelRecognitionTypeService; + public BgController( IBusDeviceInfoService busDeviceInfoService, IConfigService configService, IRiskPointInfoService riskPointInfoService) { + this.busDeviceInfoService = busDeviceInfoService; this.configService = configService; this.riskPointInfoService = riskPointInfoService; } @@ -118,20 +114,21 @@ @BussinessLog("单位隐患分布") @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") - public ResponseDataDTO > list() { + public ResponseDataDTO> list() { LambdaQueryWrapper query = new LambdaQueryWrapper(); // List riskPointInfos = riskPointInfoService.deptDangerList(query); List riskPointDTOS = riskPointInfoService.deptDangerDTOList(query); return ResponseDataDTO.success(riskPointDTOS); } + @ApiOperation(value = "单位隐患分布分页查询") @GetMapping(value = "/deptDangerPage") public ResponseDataDTO> deptDangerPage() { Page page = PageFactory.defaultPage(); LambdaQueryWrapper query = new LambdaQueryWrapper(); - List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query,page); + List riskPointDTOS = riskPointInfoService.deptDangerDTOPage(query, page); Page pageDTO = PageFactory.defaultPage(); pageDTO.setTotal(page.getTotal()); @@ -146,8 +143,17 @@ LambdaQueryWrapper query = new LambdaQueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); - return ResponseDataDTO.success(areaDangerDTO); } + @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 0796dc9..86c75e3 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,8 +7,10 @@ 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.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.service.IBoxDeviceService; +import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.device.vo.BoxDeviceVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -27,10 +29,11 @@ @RestController @RequestMapping("/device/box") public class BoxDeviceController extends BaseController { - + private final IDeviceAuthService deviceAuthService; private final IBoxDeviceService boxDeviceService; - public BoxDeviceController(IBoxDeviceService boxDeviceService) { + public BoxDeviceController(IDeviceAuthService deviceAuthService, IBoxDeviceService boxDeviceService) { + this.deviceAuthService = deviceAuthService; this.boxDeviceService = boxDeviceService; } @@ -47,6 +50,18 @@ boxDeviceService.genKey(boxDevice); return ResponseDataDTO.success(); } + /** + * 盒子指令下发 + * + * @param + * @return + */ + @PostMapping("/command") + @ResponseBody + public ResponseDataDTO command(@RequestBody CommandDTO commandDTO) { + deviceAuthService.sendCommand(commandDTO); + return ResponseDataDTO.success(); + } @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") 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 b9e5c4c..beadcd2 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,41 +1,156 @@ package com.casic.missiles.modular.device.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.common.annotion.BussinessLog; +import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.model.response.dto.ResponseDataDTO; +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.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.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.FileInputStream; +import java.security.MessageDigest; import java.util.List; @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") -public class DeviceSyncController { +public class DeviceSyncController extends BaseController { private final IDeviceModelRelationService deviceModelRelationService; private final IDeviceSceneRelationService sceneRelationService; private final IBoxDeviceRelationService boxDeviceRelationService; - public DeviceSyncController(IDeviceModelRelationService deviceModelRelationService, IDeviceSceneRelationService sceneRelationService, 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) { this.deviceModelRelationService = deviceModelRelationService; this.sceneRelationService = sceneRelationService; this.boxDeviceRelationService = boxDeviceRelationService; + this.deviceAuthService = deviceAuthService; + } + + @PostMapping("/login") + @ResponseBody + public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { + return deviceAuthService.deviceLogin(deviceLoginForm, session); } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { + + DeviceLoginForm deviceLoginForm = validToken(); + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + + boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); QueryWrapper query = boxDeviceRelationVO.genQuery(); List list = boxDeviceRelationService.selectBoxDeviceModelRelationList(query); return ResponseDataDTO.success(list); } + + /** + * 心跳接收 + * + * @param code + * @return + */ + @GetMapping("/heart") + @ResponseBody + public ResponseDataDTO heart(String code) { + DeviceLoginForm deviceLoginForm = validToken(); + if (deviceLoginForm == null) { + return ResponseDataDTO.error("未获取到有效登录token"); + } + deviceAuthService.reloadStatus(deviceLoginForm.getCode()); + return ResponseDataDTO.success(); + } + + /** + * + * @param path + * @return + */ + @GetMapping("/md5") + @ResponseBody + public ResponseDataDTO md5(String path) { + String md5 = calculateMD5(filePath + path); + return ResponseDataDTO.success(md5); + } + + public static String calculateMD5(String filePath) { + try { + // 创建MessageDigest实例,用于计算MD5值 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用文件输入流读取文件内容 + FileInputStream fis = new FileInputStream(filePath); + + // 分配一个缓冲区,用于读取文件 + byte[] buffer = new byte[1024]; + int bytesRead; + + // 读取文件内容,更新MessageDigest + while ((bytesRead = fis.read(buffer)) != -1) { + md.update(buffer, 0, bytesRead); + } + + // 关闭文件输入流 + fis.close(); + + // 完成MD5计算并返回结果 + byte[] digest = md.digest(); + + // 将字节转换为十六进制字符串 + StringBuilder sb = new StringBuilder(); + for (byte b : digest) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } catch (Exception e) { + // 处理异常情况 + return null; + } + } + + /** + * 校验用户token + * + * @return + */ + private DeviceLoginForm validToken() { + HttpServletRequest request = super.getHttpServletRequest(); + String token = request.getHeader("Authorization"); + if (StrUtil.isNotEmpty(token)) { + String cacheKey = ICacheUtil.get(token); + if (cacheKey == null) { + return null; + } + try { + return JwtUtil.parseToken(token); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java index 5bf57ec..424ad8f 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/SceneController.java @@ -4,18 +4,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.page.PageFactory; -import com.casic.missiles.model.response.dto.ResponseDataDTO; -import org.springframework.web.bind.annotation.*; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; - -import java.util.List; - -import com.casic.missiles.modular.device.service.ISceneService; +import com.casic.missiles.model.response.dto.ResponseDataDTO; import com.casic.missiles.modular.device.model.Scene; +import com.casic.missiles.modular.device.service.ISceneService; import com.casic.missiles.modular.device.vo.SceneVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; /** * 业务场景Controller @@ -34,41 +34,45 @@ this.sceneService = sceneService; } - @ApiOperation(value ="列表查询") + @ApiOperation(value = "列表查询") @GetMapping(value = "/list") public ResponseDataDTO> list(SceneVO sceneVO) { QueryWrapper query = sceneVO.genQuery(); return ResponseDataDTO.success(sceneService.list(query)); } - @ApiOperation(value ="分页查询") + @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SceneVO sceneVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = sceneVO.genQuery(); - page = sceneService.page(page, query); + List scenes = sceneService.selectScenePage(page, query); + page.setRecords(scenes); return ResponseDataDTO.success(super.packForBT(page)); } - @ApiOperation(value ="新增接口") + @ApiOperation(value = "新增接口") @PostMapping(value = "/add") - public ResponseDataDTO add(@RequestBody Scene scene) { - sceneService.save(scene); + public ResponseDataDTO add(@RequestBody Scene scene) { + scene.setCreateTime(new Date()); + scene.setUpdateTime(new Date()); + sceneService.save(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="修改接口") + @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody Scene scene) { - sceneService.updateById(scene); + scene.setUpdateTime(new Date()); + sceneService.updateById(scene); return ResponseDataDTO.success(); } - @ApiOperation(value ="删除接口") + @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { - sceneService.removeById(id); + sceneService.removeById(id); return ResponseDataDTO.success(); } @@ -79,7 +83,7 @@ return ResponseDataDTO.success(); } - @ApiOperation(value ="详情查询") + @ApiOperation(value = "详情查询") @GetMapping(value = "/detail") public ResponseDataDTO detail(String id) { return ResponseDataDTO.success(sceneService.getById(id)); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java index 8b6fcce..45bcf4c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/AlarmRecordMapper.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.dao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ * 设备告警记录 分页检索 */ List selectAlarmRecordPage(@Param("page") Page page, @Param("ew") QueryWrapper query); + + List deptRecord(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java index 2129bc6..78c3034 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/RiskPointInfoMapper.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaAnalysisRiskDTO; -import com.casic.missiles.modular.device.dto.analysis.AreaNumDTO; -import com.casic.missiles.modular.device.dto.analysis.DeptVideoAnalysisDTO; +import com.casic.missiles.modular.device.dto.analysis.*; +import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; import org.apache.ibatis.annotations.Param; @@ -70,4 +68,16 @@ * @return */ List selectDeptVideoNum(@Param("ew")LambdaQueryWrapper query); + + /** + * 检索各区域隐患数 + * @param dictQuery 检索条件 + * @return + */ + List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); + List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + + List deptAlarmDate(@Param("ew")QueryWrapper query); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml index e3e378f..1d259df 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/AlarmRecordMapper.xml @@ -62,7 +62,24 @@ order by a.alarm_time desc - + + + and device_id = #{request.deviceId} 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 ee8f4b6..bd8b8c7 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 @@ -53,8 +53,10 @@ select ,b.type_name as recognitionTypeName,b.type_code as typeCode, - a.boundary,a.remark,c.code,c.path,c.model_name as modelName + a.boundary,a.remark,c.code,c.path,c.model_name as modelName,c.handle_task as handleTask from device_model_relation a inner join algo_model c on a.algo_model_id = c.id inner join model_recognition_type b on a.recognition_type_id = b.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml index 5cbb6d4..c202c96 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/DeviceSceneRelationMapper.xml @@ -40,7 +40,7 @@ select b.area_name as area, + a.area as areaId, count(1) AS num - from - risk_point_info a + from risk_point_info a inner join sys_area b on a.area = b.id ${ew.sqlSegment} - GROUP BY a.area,b.area_name + GROUP BY a.area,b.area_name,b.id + SELECT b.AREA_NAME as name, - count(1) AS 'value' + count(1) AS value FROM bus_device_info a inner JOIN sys_area b on a.area=b.id @@ -186,6 +186,64 @@ group by a.dept_id,b.simple_name,b.version + + + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml index 1df845a..6121e46 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/SceneMapper.xml @@ -36,7 +36,7 @@ a.handle_task as handleTask , a.scene_code - as sceneCode + as sceneCode,a.path