diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == null) { diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper dictQuery); List deptAlarmDate(@Param("ew")QueryWrapper query); + + } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 6e91b47..99fc058 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +127,31 @@ } } + @Override + public void updateStatus() { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", 0); + updateWrapper.le("update_time", DateUtil.offsetMinute(new Date(), -5)); + this.update(updateWrapper); + } + @Override + public void updateBoxStatus(String code, String status) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", status); + this.update(updateWrapper); + } + + @Override + public void reloadStatus(String code, String version) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); + this.update(updateWrapper); + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 6e91b47..99fc058 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +127,31 @@ } } + @Override + public void updateStatus() { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", 0); + updateWrapper.le("update_time", DateUtil.offsetMinute(new Date(), -5)); + this.update(updateWrapper); + } + @Override + public void updateBoxStatus(String code, String status) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", status); + this.update(updateWrapper); + } + + @Override + public void reloadStatus(String code, String version) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); + this.update(updateWrapper); + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java index 3490cc2..a8f0c45 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.util.RSAUtils; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.ResponseData; @@ -10,15 +9,16 @@ import com.casic.missiles.modular.auth.util.JwtUtil; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.service.IBoxDeviceService; import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; import com.casic.missiles.modular.system.utils.HttpUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.servlet.http.HttpSession; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -27,9 +27,12 @@ @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; + private final IBoxDeviceRelationService boxDeviceRelationService; private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); - public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService, @Lazy IBoxDeviceRelationService boxDeviceRelationService) { this.boxDeviceService = boxDeviceService; + this.boxDeviceRelationService = boxDeviceRelationService; } /** @@ -77,45 +80,57 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code,String version) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("code", code); - updateWrapper.set("device_status", 1); - updateWrapper.set("update_time", new Date()); - updateWrapper.set("version", version); - boxDeviceService.update(updateWrapper); + public void reloadStatus(String code, String version) { + boxDeviceService.reloadStatus(code, version); } @Override public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); - if (device == null || 0 == device.getDeviceStatus()) { - throw new ServiceException(500, "设备不存在或已离线!"); - } +// if (device == null || 0 == device.getDeviceStatus()) { +// throw new ServiceException(500, "设备不存在或已离线!"); +// } if (StrUtil.isEmpty(device.getClientPublicKey())) { throw new ServiceException(500, "无秘钥,请联系管理员!"); } //生成加密指令 String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { String str = RSAUtils.encrypt(command, device.getClientPublicKey()); if (StrUtil.isEmpty(device.getIp())) { throw new ServiceException(500, "设备IP不存在,请设置"); } - String url = "http://" + device.getIp() + "/command/test"; + + String url = "http://" + device.getIp() + "/command"; DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); httpHeaderHandler.setJson(true); httpHeaderHandler.setGetError(true); Map params = new HashMap<>(); params.put("secret", str); + + params.put("flag", commandDTO.getFlag()); + params.put("deviceNo", commandDTO.getDeviceNo()); String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); - if(StrUtil.isEmpty(res)){ + + //重启时修改状态为离线 + if (StrUtil.isEmpty(res)) { throw new ServiceException(500, "调用异常,请联系管理员!"); + } else { + if ("restart".equals(commandDTO.getCommand())) { + //重启则设置设备状态为离线 + boxDeviceService.updateBoxStatus(device.getCode(), "0"); + } else if ("stream".equals(commandDTO.getCommand())) { + //发起开流指令 则更新状态 + //boxDeviceRelationService.updateRecognitionStreamFlag(); + } } } catch (Exception e) { - throw new ServiceException(500, "加密异常,请联系管理员!"); + throw new ServiceException(500, "盒子访问异常,请联系管理员!"); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 6e91b47..99fc058 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +127,31 @@ } } + @Override + public void updateStatus() { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", 0); + updateWrapper.le("update_time", DateUtil.offsetMinute(new Date(), -5)); + this.update(updateWrapper); + } + @Override + public void updateBoxStatus(String code, String status) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", status); + this.update(updateWrapper); + } + + @Override + public void reloadStatus(String code, String version) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); + this.update(updateWrapper); + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java index 3490cc2..a8f0c45 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.util.RSAUtils; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.ResponseData; @@ -10,15 +9,16 @@ import com.casic.missiles.modular.auth.util.JwtUtil; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.service.IBoxDeviceService; import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; import com.casic.missiles.modular.system.utils.HttpUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.servlet.http.HttpSession; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -27,9 +27,12 @@ @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; + private final IBoxDeviceRelationService boxDeviceRelationService; private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); - public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService, @Lazy IBoxDeviceRelationService boxDeviceRelationService) { this.boxDeviceService = boxDeviceService; + this.boxDeviceRelationService = boxDeviceRelationService; } /** @@ -77,45 +80,57 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code,String version) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("code", code); - updateWrapper.set("device_status", 1); - updateWrapper.set("update_time", new Date()); - updateWrapper.set("version", version); - boxDeviceService.update(updateWrapper); + public void reloadStatus(String code, String version) { + boxDeviceService.reloadStatus(code, version); } @Override public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); - if (device == null || 0 == device.getDeviceStatus()) { - throw new ServiceException(500, "设备不存在或已离线!"); - } +// if (device == null || 0 == device.getDeviceStatus()) { +// throw new ServiceException(500, "设备不存在或已离线!"); +// } if (StrUtil.isEmpty(device.getClientPublicKey())) { throw new ServiceException(500, "无秘钥,请联系管理员!"); } //生成加密指令 String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { String str = RSAUtils.encrypt(command, device.getClientPublicKey()); if (StrUtil.isEmpty(device.getIp())) { throw new ServiceException(500, "设备IP不存在,请设置"); } - String url = "http://" + device.getIp() + "/command/test"; + + String url = "http://" + device.getIp() + "/command"; DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); httpHeaderHandler.setJson(true); httpHeaderHandler.setGetError(true); Map params = new HashMap<>(); params.put("secret", str); + + params.put("flag", commandDTO.getFlag()); + params.put("deviceNo", commandDTO.getDeviceNo()); String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); - if(StrUtil.isEmpty(res)){ + + //重启时修改状态为离线 + if (StrUtil.isEmpty(res)) { throw new ServiceException(500, "调用异常,请联系管理员!"); + } else { + if ("restart".equals(commandDTO.getCommand())) { + //重启则设置设备状态为离线 + boxDeviceService.updateBoxStatus(device.getCode(), "0"); + } else if ("stream".equals(commandDTO.getCommand())) { + //发起开流指令 则更新状态 + //boxDeviceRelationService.updateRecognitionStreamFlag(); + } } } catch (Exception e) { - throw new ServiceException(500, "加密异常,请联系管理员!"); + throw new ServiceException(500, "盒子访问异常,请联系管理员!"); } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java index 4ef41a4..788b599 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.constant.AnalysisConstants; +import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.RiskPointInfoMapper; import com.casic.missiles.modular.device.dto.RiskPointDTO; import com.casic.missiles.modular.device.dto.analysis.*; @@ -23,6 +26,9 @@ import com.casic.missiles.modular.device.service.IHazardClassificationInfoService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; import com.casic.missiles.modular.device.service.IRiskRelDeviceService; +import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; +import com.casic.missiles.modular.device.util.StayPermissionUtil; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; @@ -34,6 +40,8 @@ import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.modular.data.constants.DataConstants.NODE_TYPE_DEPT; + /** *

@@ -66,6 +74,8 @@ @Transactional(rollbackFor = Exception.class) @Override public List selectRiskPointInfoPage(Page page, QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List riskPointInfos = this.baseMapper.selectRiskPointInfoPage(page, query); riskPointInfos.forEach(this::wrapInfo); return riskPointInfos; @@ -113,6 +123,9 @@ } result.setDeviceList(deviceList); } + if (StrUtil.isEmpty(result.getSecretLevel())) { + result.setSecretLevel("0"); + } importDTOS.add(result); index++; @@ -146,6 +159,26 @@ return riskPointDTOS; } + private void wrapInfo(RiskPointInfo riskPointInfo) { + if (riskPointInfo.getDeptId() != null) { + riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); + + QueryWrapper query = new QueryWrapper<>(); + query.eq("risk_id", riskPointInfo.getId()); + List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); + riskPointInfo.setDeviceList(deviceList); + } + if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { + riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { + riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { + riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); + } + } + public void wrapperDTOS(List riskPointDTOS) { for (RiskPointDTO riskPointDTO : riskPointDTOS) { @@ -164,8 +197,8 @@ //重大危险源 case 2: riskPointDTO.setPlaceName(riskPointDTO.getRiskName()); - String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); - riskPointDTO.setGrade(hazardLevel); +// String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); + riskPointDTO.setGrade(riskPointDTO.getHazardLevel()); break; //危险化学品场所 case 3: @@ -185,6 +218,30 @@ } } + private String getRiskName(RiskPointInfo riskPointInfo) { + String riskName = riskPointInfo.getRiskName(); + switch (riskPointInfo.getRiskType()) { + //危险点 + case 1: + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskName = riskPointInfo.getHazardousChemicalSite(); + break; + //危险作业 + case 4: + riskName = riskPointInfo.getHazardousWork(); + break; + //危险作业工序 + case 5: + riskName = riskPointInfo.getWorkProcedure(); + break; + } + return riskName; + } + @Override public List deptDangerDTOPage(LambdaQueryWrapper query, Page page) { List riskPointInfos = baseMapper.deptDangerPage(query, page); @@ -203,8 +260,12 @@ areaDangerDTO.setYData(chartValueList); if (CollectionUtil.isNotEmpty(areaAnalysisDTOS)) { for (AreaAnalysisDTO areaAnalysisDTO : areaAnalysisDTOS) { - LambdaQueryWrapper dictQuery = new LambdaQueryWrapper<>(); - dictQuery.eq(isDept ? RiskPointInfo::getDeptId : RiskPointInfo::getArea, areaAnalysisDTO.getAreaId()); + QueryWrapper dictQuery = new QueryWrapper<>(); + dictQuery.eq(isDept ? "a.dept_id" : "a.area", areaAnalysisDTO.getAreaId()); + + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(dictQuery, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + List dictAnalysisList = isDept ? baseMapper.riskNumByDept(dictQuery) : baseMapper.riskNumByArea(dictQuery); Map map = dictAnalysisList.stream().collect(Collectors.toMap(AreaAnalysisDTO::getArea, AreaAnalysisDTO::getNum)); @@ -228,7 +289,7 @@ @Transactional @Override - public AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query) { + public AreaDangerDTO deptDangerDTO(QueryWrapper query) { //迭代获取各风险类型数量 List areaAnalysisDTOS = baseMapper.deptDangerDTOList(query); @@ -237,33 +298,129 @@ } @Override - public AreaDangerDTO areaDangerList(LambdaQueryWrapper query) { + public List tree(String groupType) { + //查询可见组织 + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + Integer type = Convert.toInt(groupType); + if (type == null) { + throw new ServiceException(500, "检索条件异常"); + } + + deptQuery.inSql(Dept::getId, "select dept_id from risk_point_info where risk_type = " + type); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + //迭代根组织 + List rootIds = new ArrayList<>(); + List deptDTOS = new ArrayList<>(); + Set normalIds = new HashSet<>(); + + //检索识别信息 + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setPid(dept.getPid()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + normalIds.add(dept.getId()); + deptDTO.setType(NODE_TYPE_DEPT); + + //挂载设备信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("dept_id", deptDTO.getId()); + + //判定只可查看以下密级 安全管理员除外 + if (!user.getRoleTips().contains(adminRole)) { + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + //类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序) + deviceQuery.eq("risk_type", groupType); + deviceQuery.orderByAsc("id"); + //校验分组授权 + StayPermissionUtil.riskQuery(deviceQuery, "id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + + List pointInfos = this.list(deviceQuery); + List deptDTOList = new ArrayList<>(); + for (RiskPointInfo pointInfo : pointInfos) { + RiskGroupDeptDTO deptDto = this.createDeptDTO(pointInfo); + deptDTOList.add(deptDto); + } + + deptDTO.setChildrenNodes(deptDTOList); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点 + DeptDefaultTreeBuildFactory abstractTreeBuildFactory = new DeptDefaultTreeBuildFactory(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + List newTree = new ArrayList<>(); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + /** + * 创建节点 + * + * @param pointInfo 风险点信息 + * @return + */ + public RiskGroupDeptDTO createDeptDTO(RiskPointInfo pointInfo) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(pointInfo.getId()); + deptDTO.setType(DataConstants.NODE_TYPE_RISK); + deptDTO.setPid(pointInfo.getDeptId()); + deptDTO.setRiskPointInfo(pointInfo); + deptDTO.setName(getRiskName(pointInfo)); + deptDTO.setFullName(getRiskName(pointInfo)); + return deptDTO; + } + + @Override + public AreaDangerDTO areaDangerList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.areaDangerList(query); return convertAreaAnalysisDTO(areaAnalysisDTOS, false); } + @Override + public AreaDangerDTO areaDangerScopeList(QueryWrapper query) { + + List areaAnalysisDTOS = baseMapper.areaDangerScopeList(query); + return convertAreaAnalysisDTO(areaAnalysisDTOS, false); + } + @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalRole, sysType); } @Override - public DangerCategoryDTO dangerCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerCategory(QueryWrapper query) { List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -280,11 +437,13 @@ } @Override - public DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerScopeCategory(QueryWrapper query) { DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -358,8 +517,8 @@ } //设置检索日期 - query.ge("alarm_time",begin); - query.le("alarm_time",end); + query.ge("alarm_time", begin); + query.le("alarm_time", end); List analysisDTOS = this.baseMapper.deptAlarmDate(query); long dateNum = DateUtil.betweenDay(begin, end, true); for (int i = 0; i <= dateNum; i++) { @@ -414,23 +573,5 @@ } } - private void wrapInfo(RiskPointInfo riskPointInfo) { - if (riskPointInfo.getDeptId() != null) { - riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); - QueryWrapper query = new QueryWrapper<>(); - query.eq("risk_id", riskPointInfo.getId()); - List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); - riskPointInfo.setDeviceList(deviceList); - } - if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { - riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { - riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { - riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); - } - } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 6e91b47..99fc058 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +127,31 @@ } } + @Override + public void updateStatus() { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", 0); + updateWrapper.le("update_time", DateUtil.offsetMinute(new Date(), -5)); + this.update(updateWrapper); + } + @Override + public void updateBoxStatus(String code, String status) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", status); + this.update(updateWrapper); + } + + @Override + public void reloadStatus(String code, String version) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); + this.update(updateWrapper); + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java index 3490cc2..a8f0c45 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.util.RSAUtils; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.ResponseData; @@ -10,15 +9,16 @@ import com.casic.missiles.modular.auth.util.JwtUtil; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.service.IBoxDeviceService; import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; import com.casic.missiles.modular.system.utils.HttpUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.servlet.http.HttpSession; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -27,9 +27,12 @@ @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; + private final IBoxDeviceRelationService boxDeviceRelationService; private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); - public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService, @Lazy IBoxDeviceRelationService boxDeviceRelationService) { this.boxDeviceService = boxDeviceService; + this.boxDeviceRelationService = boxDeviceRelationService; } /** @@ -77,45 +80,57 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code,String version) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("code", code); - updateWrapper.set("device_status", 1); - updateWrapper.set("update_time", new Date()); - updateWrapper.set("version", version); - boxDeviceService.update(updateWrapper); + public void reloadStatus(String code, String version) { + boxDeviceService.reloadStatus(code, version); } @Override public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); - if (device == null || 0 == device.getDeviceStatus()) { - throw new ServiceException(500, "设备不存在或已离线!"); - } +// if (device == null || 0 == device.getDeviceStatus()) { +// throw new ServiceException(500, "设备不存在或已离线!"); +// } if (StrUtil.isEmpty(device.getClientPublicKey())) { throw new ServiceException(500, "无秘钥,请联系管理员!"); } //生成加密指令 String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { String str = RSAUtils.encrypt(command, device.getClientPublicKey()); if (StrUtil.isEmpty(device.getIp())) { throw new ServiceException(500, "设备IP不存在,请设置"); } - String url = "http://" + device.getIp() + "/command/test"; + + String url = "http://" + device.getIp() + "/command"; DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); httpHeaderHandler.setJson(true); httpHeaderHandler.setGetError(true); Map params = new HashMap<>(); params.put("secret", str); + + params.put("flag", commandDTO.getFlag()); + params.put("deviceNo", commandDTO.getDeviceNo()); String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); - if(StrUtil.isEmpty(res)){ + + //重启时修改状态为离线 + if (StrUtil.isEmpty(res)) { throw new ServiceException(500, "调用异常,请联系管理员!"); + } else { + if ("restart".equals(commandDTO.getCommand())) { + //重启则设置设备状态为离线 + boxDeviceService.updateBoxStatus(device.getCode(), "0"); + } else if ("stream".equals(commandDTO.getCommand())) { + //发起开流指令 则更新状态 + //boxDeviceRelationService.updateRecognitionStreamFlag(); + } } } catch (Exception e) { - throw new ServiceException(500, "加密异常,请联系管理员!"); + throw new ServiceException(500, "盒子访问异常,请联系管理员!"); } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java index 4ef41a4..788b599 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.constant.AnalysisConstants; +import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.RiskPointInfoMapper; import com.casic.missiles.modular.device.dto.RiskPointDTO; import com.casic.missiles.modular.device.dto.analysis.*; @@ -23,6 +26,9 @@ import com.casic.missiles.modular.device.service.IHazardClassificationInfoService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; import com.casic.missiles.modular.device.service.IRiskRelDeviceService; +import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; +import com.casic.missiles.modular.device.util.StayPermissionUtil; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; @@ -34,6 +40,8 @@ import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.modular.data.constants.DataConstants.NODE_TYPE_DEPT; + /** *

@@ -66,6 +74,8 @@ @Transactional(rollbackFor = Exception.class) @Override public List selectRiskPointInfoPage(Page page, QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List riskPointInfos = this.baseMapper.selectRiskPointInfoPage(page, query); riskPointInfos.forEach(this::wrapInfo); return riskPointInfos; @@ -113,6 +123,9 @@ } result.setDeviceList(deviceList); } + if (StrUtil.isEmpty(result.getSecretLevel())) { + result.setSecretLevel("0"); + } importDTOS.add(result); index++; @@ -146,6 +159,26 @@ return riskPointDTOS; } + private void wrapInfo(RiskPointInfo riskPointInfo) { + if (riskPointInfo.getDeptId() != null) { + riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); + + QueryWrapper query = new QueryWrapper<>(); + query.eq("risk_id", riskPointInfo.getId()); + List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); + riskPointInfo.setDeviceList(deviceList); + } + if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { + riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { + riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { + riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); + } + } + public void wrapperDTOS(List riskPointDTOS) { for (RiskPointDTO riskPointDTO : riskPointDTOS) { @@ -164,8 +197,8 @@ //重大危险源 case 2: riskPointDTO.setPlaceName(riskPointDTO.getRiskName()); - String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); - riskPointDTO.setGrade(hazardLevel); +// String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); + riskPointDTO.setGrade(riskPointDTO.getHazardLevel()); break; //危险化学品场所 case 3: @@ -185,6 +218,30 @@ } } + private String getRiskName(RiskPointInfo riskPointInfo) { + String riskName = riskPointInfo.getRiskName(); + switch (riskPointInfo.getRiskType()) { + //危险点 + case 1: + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskName = riskPointInfo.getHazardousChemicalSite(); + break; + //危险作业 + case 4: + riskName = riskPointInfo.getHazardousWork(); + break; + //危险作业工序 + case 5: + riskName = riskPointInfo.getWorkProcedure(); + break; + } + return riskName; + } + @Override public List deptDangerDTOPage(LambdaQueryWrapper query, Page page) { List riskPointInfos = baseMapper.deptDangerPage(query, page); @@ -203,8 +260,12 @@ areaDangerDTO.setYData(chartValueList); if (CollectionUtil.isNotEmpty(areaAnalysisDTOS)) { for (AreaAnalysisDTO areaAnalysisDTO : areaAnalysisDTOS) { - LambdaQueryWrapper dictQuery = new LambdaQueryWrapper<>(); - dictQuery.eq(isDept ? RiskPointInfo::getDeptId : RiskPointInfo::getArea, areaAnalysisDTO.getAreaId()); + QueryWrapper dictQuery = new QueryWrapper<>(); + dictQuery.eq(isDept ? "a.dept_id" : "a.area", areaAnalysisDTO.getAreaId()); + + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(dictQuery, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + List dictAnalysisList = isDept ? baseMapper.riskNumByDept(dictQuery) : baseMapper.riskNumByArea(dictQuery); Map map = dictAnalysisList.stream().collect(Collectors.toMap(AreaAnalysisDTO::getArea, AreaAnalysisDTO::getNum)); @@ -228,7 +289,7 @@ @Transactional @Override - public AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query) { + public AreaDangerDTO deptDangerDTO(QueryWrapper query) { //迭代获取各风险类型数量 List areaAnalysisDTOS = baseMapper.deptDangerDTOList(query); @@ -237,33 +298,129 @@ } @Override - public AreaDangerDTO areaDangerList(LambdaQueryWrapper query) { + public List tree(String groupType) { + //查询可见组织 + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + Integer type = Convert.toInt(groupType); + if (type == null) { + throw new ServiceException(500, "检索条件异常"); + } + + deptQuery.inSql(Dept::getId, "select dept_id from risk_point_info where risk_type = " + type); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + //迭代根组织 + List rootIds = new ArrayList<>(); + List deptDTOS = new ArrayList<>(); + Set normalIds = new HashSet<>(); + + //检索识别信息 + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setPid(dept.getPid()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + normalIds.add(dept.getId()); + deptDTO.setType(NODE_TYPE_DEPT); + + //挂载设备信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("dept_id", deptDTO.getId()); + + //判定只可查看以下密级 安全管理员除外 + if (!user.getRoleTips().contains(adminRole)) { + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + //类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序) + deviceQuery.eq("risk_type", groupType); + deviceQuery.orderByAsc("id"); + //校验分组授权 + StayPermissionUtil.riskQuery(deviceQuery, "id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + + List pointInfos = this.list(deviceQuery); + List deptDTOList = new ArrayList<>(); + for (RiskPointInfo pointInfo : pointInfos) { + RiskGroupDeptDTO deptDto = this.createDeptDTO(pointInfo); + deptDTOList.add(deptDto); + } + + deptDTO.setChildrenNodes(deptDTOList); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点 + DeptDefaultTreeBuildFactory abstractTreeBuildFactory = new DeptDefaultTreeBuildFactory(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + List newTree = new ArrayList<>(); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + /** + * 创建节点 + * + * @param pointInfo 风险点信息 + * @return + */ + public RiskGroupDeptDTO createDeptDTO(RiskPointInfo pointInfo) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(pointInfo.getId()); + deptDTO.setType(DataConstants.NODE_TYPE_RISK); + deptDTO.setPid(pointInfo.getDeptId()); + deptDTO.setRiskPointInfo(pointInfo); + deptDTO.setName(getRiskName(pointInfo)); + deptDTO.setFullName(getRiskName(pointInfo)); + return deptDTO; + } + + @Override + public AreaDangerDTO areaDangerList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.areaDangerList(query); return convertAreaAnalysisDTO(areaAnalysisDTOS, false); } + @Override + public AreaDangerDTO areaDangerScopeList(QueryWrapper query) { + + List areaAnalysisDTOS = baseMapper.areaDangerScopeList(query); + return convertAreaAnalysisDTO(areaAnalysisDTOS, false); + } + @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalRole, sysType); } @Override - public DangerCategoryDTO dangerCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerCategory(QueryWrapper query) { List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -280,11 +437,13 @@ } @Override - public DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerScopeCategory(QueryWrapper query) { DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -358,8 +517,8 @@ } //设置检索日期 - query.ge("alarm_time",begin); - query.le("alarm_time",end); + query.ge("alarm_time", begin); + query.le("alarm_time", end); List analysisDTOS = this.baseMapper.deptAlarmDate(query); long dateNum = DateUtil.betweenDay(begin, end, true); for (int i = 0; i <= dateNum; i++) { @@ -414,23 +573,5 @@ } } - private void wrapInfo(RiskPointInfo riskPointInfo) { - if (riskPointInfo.getDeptId() != null) { - riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); - QueryWrapper query = new QueryWrapper<>(); - query.eq("risk_id", riskPointInfo.getId()); - List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); - riskPointInfo.setDeviceList(deviceList); - } - if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { - riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { - riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { - riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); - } - } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java index 8ac9dac..39a7c5c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java @@ -50,7 +50,7 @@ @Override public boolean save(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setCreateTime(new Date()); entity.setUpdateTime(new Date()); @@ -60,7 +60,7 @@ @Override public boolean updateById(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setUpdateTime(new Date()); return super.updateById(entity); diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 6e91b47..99fc058 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +127,31 @@ } } + @Override + public void updateStatus() { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", 0); + updateWrapper.le("update_time", DateUtil.offsetMinute(new Date(), -5)); + this.update(updateWrapper); + } + @Override + public void updateBoxStatus(String code, String status) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", status); + this.update(updateWrapper); + } + + @Override + public void reloadStatus(String code, String version) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); + this.update(updateWrapper); + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java index 3490cc2..a8f0c45 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.util.RSAUtils; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.ResponseData; @@ -10,15 +9,16 @@ import com.casic.missiles.modular.auth.util.JwtUtil; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.service.IBoxDeviceService; import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; import com.casic.missiles.modular.system.utils.HttpUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.servlet.http.HttpSession; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -27,9 +27,12 @@ @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; + private final IBoxDeviceRelationService boxDeviceRelationService; private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); - public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService, @Lazy IBoxDeviceRelationService boxDeviceRelationService) { this.boxDeviceService = boxDeviceService; + this.boxDeviceRelationService = boxDeviceRelationService; } /** @@ -77,45 +80,57 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code,String version) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("code", code); - updateWrapper.set("device_status", 1); - updateWrapper.set("update_time", new Date()); - updateWrapper.set("version", version); - boxDeviceService.update(updateWrapper); + public void reloadStatus(String code, String version) { + boxDeviceService.reloadStatus(code, version); } @Override public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); - if (device == null || 0 == device.getDeviceStatus()) { - throw new ServiceException(500, "设备不存在或已离线!"); - } +// if (device == null || 0 == device.getDeviceStatus()) { +// throw new ServiceException(500, "设备不存在或已离线!"); +// } if (StrUtil.isEmpty(device.getClientPublicKey())) { throw new ServiceException(500, "无秘钥,请联系管理员!"); } //生成加密指令 String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { String str = RSAUtils.encrypt(command, device.getClientPublicKey()); if (StrUtil.isEmpty(device.getIp())) { throw new ServiceException(500, "设备IP不存在,请设置"); } - String url = "http://" + device.getIp() + "/command/test"; + + String url = "http://" + device.getIp() + "/command"; DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); httpHeaderHandler.setJson(true); httpHeaderHandler.setGetError(true); Map params = new HashMap<>(); params.put("secret", str); + + params.put("flag", commandDTO.getFlag()); + params.put("deviceNo", commandDTO.getDeviceNo()); String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); - if(StrUtil.isEmpty(res)){ + + //重启时修改状态为离线 + if (StrUtil.isEmpty(res)) { throw new ServiceException(500, "调用异常,请联系管理员!"); + } else { + if ("restart".equals(commandDTO.getCommand())) { + //重启则设置设备状态为离线 + boxDeviceService.updateBoxStatus(device.getCode(), "0"); + } else if ("stream".equals(commandDTO.getCommand())) { + //发起开流指令 则更新状态 + //boxDeviceRelationService.updateRecognitionStreamFlag(); + } } } catch (Exception e) { - throw new ServiceException(500, "加密异常,请联系管理员!"); + throw new ServiceException(500, "盒子访问异常,请联系管理员!"); } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java index 4ef41a4..788b599 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.constant.AnalysisConstants; +import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.RiskPointInfoMapper; import com.casic.missiles.modular.device.dto.RiskPointDTO; import com.casic.missiles.modular.device.dto.analysis.*; @@ -23,6 +26,9 @@ import com.casic.missiles.modular.device.service.IHazardClassificationInfoService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; import com.casic.missiles.modular.device.service.IRiskRelDeviceService; +import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; +import com.casic.missiles.modular.device.util.StayPermissionUtil; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; @@ -34,6 +40,8 @@ import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.modular.data.constants.DataConstants.NODE_TYPE_DEPT; + /** *

@@ -66,6 +74,8 @@ @Transactional(rollbackFor = Exception.class) @Override public List selectRiskPointInfoPage(Page page, QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List riskPointInfos = this.baseMapper.selectRiskPointInfoPage(page, query); riskPointInfos.forEach(this::wrapInfo); return riskPointInfos; @@ -113,6 +123,9 @@ } result.setDeviceList(deviceList); } + if (StrUtil.isEmpty(result.getSecretLevel())) { + result.setSecretLevel("0"); + } importDTOS.add(result); index++; @@ -146,6 +159,26 @@ return riskPointDTOS; } + private void wrapInfo(RiskPointInfo riskPointInfo) { + if (riskPointInfo.getDeptId() != null) { + riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); + + QueryWrapper query = new QueryWrapper<>(); + query.eq("risk_id", riskPointInfo.getId()); + List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); + riskPointInfo.setDeviceList(deviceList); + } + if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { + riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { + riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { + riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); + } + } + public void wrapperDTOS(List riskPointDTOS) { for (RiskPointDTO riskPointDTO : riskPointDTOS) { @@ -164,8 +197,8 @@ //重大危险源 case 2: riskPointDTO.setPlaceName(riskPointDTO.getRiskName()); - String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); - riskPointDTO.setGrade(hazardLevel); +// String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); + riskPointDTO.setGrade(riskPointDTO.getHazardLevel()); break; //危险化学品场所 case 3: @@ -185,6 +218,30 @@ } } + private String getRiskName(RiskPointInfo riskPointInfo) { + String riskName = riskPointInfo.getRiskName(); + switch (riskPointInfo.getRiskType()) { + //危险点 + case 1: + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskName = riskPointInfo.getHazardousChemicalSite(); + break; + //危险作业 + case 4: + riskName = riskPointInfo.getHazardousWork(); + break; + //危险作业工序 + case 5: + riskName = riskPointInfo.getWorkProcedure(); + break; + } + return riskName; + } + @Override public List deptDangerDTOPage(LambdaQueryWrapper query, Page page) { List riskPointInfos = baseMapper.deptDangerPage(query, page); @@ -203,8 +260,12 @@ areaDangerDTO.setYData(chartValueList); if (CollectionUtil.isNotEmpty(areaAnalysisDTOS)) { for (AreaAnalysisDTO areaAnalysisDTO : areaAnalysisDTOS) { - LambdaQueryWrapper dictQuery = new LambdaQueryWrapper<>(); - dictQuery.eq(isDept ? RiskPointInfo::getDeptId : RiskPointInfo::getArea, areaAnalysisDTO.getAreaId()); + QueryWrapper dictQuery = new QueryWrapper<>(); + dictQuery.eq(isDept ? "a.dept_id" : "a.area", areaAnalysisDTO.getAreaId()); + + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(dictQuery, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + List dictAnalysisList = isDept ? baseMapper.riskNumByDept(dictQuery) : baseMapper.riskNumByArea(dictQuery); Map map = dictAnalysisList.stream().collect(Collectors.toMap(AreaAnalysisDTO::getArea, AreaAnalysisDTO::getNum)); @@ -228,7 +289,7 @@ @Transactional @Override - public AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query) { + public AreaDangerDTO deptDangerDTO(QueryWrapper query) { //迭代获取各风险类型数量 List areaAnalysisDTOS = baseMapper.deptDangerDTOList(query); @@ -237,33 +298,129 @@ } @Override - public AreaDangerDTO areaDangerList(LambdaQueryWrapper query) { + public List tree(String groupType) { + //查询可见组织 + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + Integer type = Convert.toInt(groupType); + if (type == null) { + throw new ServiceException(500, "检索条件异常"); + } + + deptQuery.inSql(Dept::getId, "select dept_id from risk_point_info where risk_type = " + type); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + //迭代根组织 + List rootIds = new ArrayList<>(); + List deptDTOS = new ArrayList<>(); + Set normalIds = new HashSet<>(); + + //检索识别信息 + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setPid(dept.getPid()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + normalIds.add(dept.getId()); + deptDTO.setType(NODE_TYPE_DEPT); + + //挂载设备信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("dept_id", deptDTO.getId()); + + //判定只可查看以下密级 安全管理员除外 + if (!user.getRoleTips().contains(adminRole)) { + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + //类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序) + deviceQuery.eq("risk_type", groupType); + deviceQuery.orderByAsc("id"); + //校验分组授权 + StayPermissionUtil.riskQuery(deviceQuery, "id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + + List pointInfos = this.list(deviceQuery); + List deptDTOList = new ArrayList<>(); + for (RiskPointInfo pointInfo : pointInfos) { + RiskGroupDeptDTO deptDto = this.createDeptDTO(pointInfo); + deptDTOList.add(deptDto); + } + + deptDTO.setChildrenNodes(deptDTOList); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点 + DeptDefaultTreeBuildFactory abstractTreeBuildFactory = new DeptDefaultTreeBuildFactory(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + List newTree = new ArrayList<>(); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + /** + * 创建节点 + * + * @param pointInfo 风险点信息 + * @return + */ + public RiskGroupDeptDTO createDeptDTO(RiskPointInfo pointInfo) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(pointInfo.getId()); + deptDTO.setType(DataConstants.NODE_TYPE_RISK); + deptDTO.setPid(pointInfo.getDeptId()); + deptDTO.setRiskPointInfo(pointInfo); + deptDTO.setName(getRiskName(pointInfo)); + deptDTO.setFullName(getRiskName(pointInfo)); + return deptDTO; + } + + @Override + public AreaDangerDTO areaDangerList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.areaDangerList(query); return convertAreaAnalysisDTO(areaAnalysisDTOS, false); } + @Override + public AreaDangerDTO areaDangerScopeList(QueryWrapper query) { + + List areaAnalysisDTOS = baseMapper.areaDangerScopeList(query); + return convertAreaAnalysisDTO(areaAnalysisDTOS, false); + } + @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalRole, sysType); } @Override - public DangerCategoryDTO dangerCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerCategory(QueryWrapper query) { List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -280,11 +437,13 @@ } @Override - public DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerScopeCategory(QueryWrapper query) { DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -358,8 +517,8 @@ } //设置检索日期 - query.ge("alarm_time",begin); - query.le("alarm_time",end); + query.ge("alarm_time", begin); + query.le("alarm_time", end); List analysisDTOS = this.baseMapper.deptAlarmDate(query); long dateNum = DateUtil.betweenDay(begin, end, true); for (int i = 0; i <= dateNum; i++) { @@ -414,23 +573,5 @@ } } - private void wrapInfo(RiskPointInfo riskPointInfo) { - if (riskPointInfo.getDeptId() != null) { - riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); - QueryWrapper query = new QueryWrapper<>(); - query.eq("risk_id", riskPointInfo.getId()); - List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); - riskPointInfo.setDeviceList(deviceList); - } - if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { - riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { - riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { - riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); - } - } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java index 8ac9dac..39a7c5c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java @@ -50,7 +50,7 @@ @Override public boolean save(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setCreateTime(new Date()); entity.setUpdateTime(new Date()); @@ -60,7 +60,7 @@ @Override public boolean updateById(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setUpdateTime(new Date()); return super.updateById(entity); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java index 48c9d89..88dc382 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java @@ -29,10 +29,7 @@ //设备状态更新 log.info("box online task start"); if (open) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.set("device_status",0); - updateWrapper.le("update_time",DateUtil.offsetMinute(new Date(),-5)); - boxDeviceService.update(updateWrapper); + boxDeviceService.updateStatus(); } log.info("box online task end"); } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 6e91b47..99fc058 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +127,31 @@ } } + @Override + public void updateStatus() { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", 0); + updateWrapper.le("update_time", DateUtil.offsetMinute(new Date(), -5)); + this.update(updateWrapper); + } + @Override + public void updateBoxStatus(String code, String status) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", status); + this.update(updateWrapper); + } + + @Override + public void reloadStatus(String code, String version) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); + this.update(updateWrapper); + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java index 3490cc2..a8f0c45 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.util.RSAUtils; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.ResponseData; @@ -10,15 +9,16 @@ import com.casic.missiles.modular.auth.util.JwtUtil; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.service.IBoxDeviceService; import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; import com.casic.missiles.modular.system.utils.HttpUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.servlet.http.HttpSession; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -27,9 +27,12 @@ @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; + private final IBoxDeviceRelationService boxDeviceRelationService; private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); - public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService, @Lazy IBoxDeviceRelationService boxDeviceRelationService) { this.boxDeviceService = boxDeviceService; + this.boxDeviceRelationService = boxDeviceRelationService; } /** @@ -77,45 +80,57 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code,String version) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("code", code); - updateWrapper.set("device_status", 1); - updateWrapper.set("update_time", new Date()); - updateWrapper.set("version", version); - boxDeviceService.update(updateWrapper); + public void reloadStatus(String code, String version) { + boxDeviceService.reloadStatus(code, version); } @Override public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); - if (device == null || 0 == device.getDeviceStatus()) { - throw new ServiceException(500, "设备不存在或已离线!"); - } +// if (device == null || 0 == device.getDeviceStatus()) { +// throw new ServiceException(500, "设备不存在或已离线!"); +// } if (StrUtil.isEmpty(device.getClientPublicKey())) { throw new ServiceException(500, "无秘钥,请联系管理员!"); } //生成加密指令 String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { String str = RSAUtils.encrypt(command, device.getClientPublicKey()); if (StrUtil.isEmpty(device.getIp())) { throw new ServiceException(500, "设备IP不存在,请设置"); } - String url = "http://" + device.getIp() + "/command/test"; + + String url = "http://" + device.getIp() + "/command"; DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); httpHeaderHandler.setJson(true); httpHeaderHandler.setGetError(true); Map params = new HashMap<>(); params.put("secret", str); + + params.put("flag", commandDTO.getFlag()); + params.put("deviceNo", commandDTO.getDeviceNo()); String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); - if(StrUtil.isEmpty(res)){ + + //重启时修改状态为离线 + if (StrUtil.isEmpty(res)) { throw new ServiceException(500, "调用异常,请联系管理员!"); + } else { + if ("restart".equals(commandDTO.getCommand())) { + //重启则设置设备状态为离线 + boxDeviceService.updateBoxStatus(device.getCode(), "0"); + } else if ("stream".equals(commandDTO.getCommand())) { + //发起开流指令 则更新状态 + //boxDeviceRelationService.updateRecognitionStreamFlag(); + } } } catch (Exception e) { - throw new ServiceException(500, "加密异常,请联系管理员!"); + throw new ServiceException(500, "盒子访问异常,请联系管理员!"); } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java index 4ef41a4..788b599 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.constant.AnalysisConstants; +import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.RiskPointInfoMapper; import com.casic.missiles.modular.device.dto.RiskPointDTO; import com.casic.missiles.modular.device.dto.analysis.*; @@ -23,6 +26,9 @@ import com.casic.missiles.modular.device.service.IHazardClassificationInfoService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; import com.casic.missiles.modular.device.service.IRiskRelDeviceService; +import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; +import com.casic.missiles.modular.device.util.StayPermissionUtil; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; @@ -34,6 +40,8 @@ import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.modular.data.constants.DataConstants.NODE_TYPE_DEPT; + /** *

@@ -66,6 +74,8 @@ @Transactional(rollbackFor = Exception.class) @Override public List selectRiskPointInfoPage(Page page, QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List riskPointInfos = this.baseMapper.selectRiskPointInfoPage(page, query); riskPointInfos.forEach(this::wrapInfo); return riskPointInfos; @@ -113,6 +123,9 @@ } result.setDeviceList(deviceList); } + if (StrUtil.isEmpty(result.getSecretLevel())) { + result.setSecretLevel("0"); + } importDTOS.add(result); index++; @@ -146,6 +159,26 @@ return riskPointDTOS; } + private void wrapInfo(RiskPointInfo riskPointInfo) { + if (riskPointInfo.getDeptId() != null) { + riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); + + QueryWrapper query = new QueryWrapper<>(); + query.eq("risk_id", riskPointInfo.getId()); + List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); + riskPointInfo.setDeviceList(deviceList); + } + if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { + riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { + riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { + riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); + } + } + public void wrapperDTOS(List riskPointDTOS) { for (RiskPointDTO riskPointDTO : riskPointDTOS) { @@ -164,8 +197,8 @@ //重大危险源 case 2: riskPointDTO.setPlaceName(riskPointDTO.getRiskName()); - String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); - riskPointDTO.setGrade(hazardLevel); +// String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); + riskPointDTO.setGrade(riskPointDTO.getHazardLevel()); break; //危险化学品场所 case 3: @@ -185,6 +218,30 @@ } } + private String getRiskName(RiskPointInfo riskPointInfo) { + String riskName = riskPointInfo.getRiskName(); + switch (riskPointInfo.getRiskType()) { + //危险点 + case 1: + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskName = riskPointInfo.getHazardousChemicalSite(); + break; + //危险作业 + case 4: + riskName = riskPointInfo.getHazardousWork(); + break; + //危险作业工序 + case 5: + riskName = riskPointInfo.getWorkProcedure(); + break; + } + return riskName; + } + @Override public List deptDangerDTOPage(LambdaQueryWrapper query, Page page) { List riskPointInfos = baseMapper.deptDangerPage(query, page); @@ -203,8 +260,12 @@ areaDangerDTO.setYData(chartValueList); if (CollectionUtil.isNotEmpty(areaAnalysisDTOS)) { for (AreaAnalysisDTO areaAnalysisDTO : areaAnalysisDTOS) { - LambdaQueryWrapper dictQuery = new LambdaQueryWrapper<>(); - dictQuery.eq(isDept ? RiskPointInfo::getDeptId : RiskPointInfo::getArea, areaAnalysisDTO.getAreaId()); + QueryWrapper dictQuery = new QueryWrapper<>(); + dictQuery.eq(isDept ? "a.dept_id" : "a.area", areaAnalysisDTO.getAreaId()); + + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(dictQuery, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + List dictAnalysisList = isDept ? baseMapper.riskNumByDept(dictQuery) : baseMapper.riskNumByArea(dictQuery); Map map = dictAnalysisList.stream().collect(Collectors.toMap(AreaAnalysisDTO::getArea, AreaAnalysisDTO::getNum)); @@ -228,7 +289,7 @@ @Transactional @Override - public AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query) { + public AreaDangerDTO deptDangerDTO(QueryWrapper query) { //迭代获取各风险类型数量 List areaAnalysisDTOS = baseMapper.deptDangerDTOList(query); @@ -237,33 +298,129 @@ } @Override - public AreaDangerDTO areaDangerList(LambdaQueryWrapper query) { + public List tree(String groupType) { + //查询可见组织 + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + Integer type = Convert.toInt(groupType); + if (type == null) { + throw new ServiceException(500, "检索条件异常"); + } + + deptQuery.inSql(Dept::getId, "select dept_id from risk_point_info where risk_type = " + type); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + //迭代根组织 + List rootIds = new ArrayList<>(); + List deptDTOS = new ArrayList<>(); + Set normalIds = new HashSet<>(); + + //检索识别信息 + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setPid(dept.getPid()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + normalIds.add(dept.getId()); + deptDTO.setType(NODE_TYPE_DEPT); + + //挂载设备信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("dept_id", deptDTO.getId()); + + //判定只可查看以下密级 安全管理员除外 + if (!user.getRoleTips().contains(adminRole)) { + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + //类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序) + deviceQuery.eq("risk_type", groupType); + deviceQuery.orderByAsc("id"); + //校验分组授权 + StayPermissionUtil.riskQuery(deviceQuery, "id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + + List pointInfos = this.list(deviceQuery); + List deptDTOList = new ArrayList<>(); + for (RiskPointInfo pointInfo : pointInfos) { + RiskGroupDeptDTO deptDto = this.createDeptDTO(pointInfo); + deptDTOList.add(deptDto); + } + + deptDTO.setChildrenNodes(deptDTOList); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点 + DeptDefaultTreeBuildFactory abstractTreeBuildFactory = new DeptDefaultTreeBuildFactory(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + List newTree = new ArrayList<>(); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + /** + * 创建节点 + * + * @param pointInfo 风险点信息 + * @return + */ + public RiskGroupDeptDTO createDeptDTO(RiskPointInfo pointInfo) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(pointInfo.getId()); + deptDTO.setType(DataConstants.NODE_TYPE_RISK); + deptDTO.setPid(pointInfo.getDeptId()); + deptDTO.setRiskPointInfo(pointInfo); + deptDTO.setName(getRiskName(pointInfo)); + deptDTO.setFullName(getRiskName(pointInfo)); + return deptDTO; + } + + @Override + public AreaDangerDTO areaDangerList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.areaDangerList(query); return convertAreaAnalysisDTO(areaAnalysisDTOS, false); } + @Override + public AreaDangerDTO areaDangerScopeList(QueryWrapper query) { + + List areaAnalysisDTOS = baseMapper.areaDangerScopeList(query); + return convertAreaAnalysisDTO(areaAnalysisDTOS, false); + } + @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalRole, sysType); } @Override - public DangerCategoryDTO dangerCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerCategory(QueryWrapper query) { List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -280,11 +437,13 @@ } @Override - public DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerScopeCategory(QueryWrapper query) { DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -358,8 +517,8 @@ } //设置检索日期 - query.ge("alarm_time",begin); - query.le("alarm_time",end); + query.ge("alarm_time", begin); + query.le("alarm_time", end); List analysisDTOS = this.baseMapper.deptAlarmDate(query); long dateNum = DateUtil.betweenDay(begin, end, true); for (int i = 0; i <= dateNum; i++) { @@ -414,23 +573,5 @@ } } - private void wrapInfo(RiskPointInfo riskPointInfo) { - if (riskPointInfo.getDeptId() != null) { - riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); - QueryWrapper query = new QueryWrapper<>(); - query.eq("risk_id", riskPointInfo.getId()); - List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); - riskPointInfo.setDeviceList(deviceList); - } - if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { - riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { - riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { - riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); - } - } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java index 8ac9dac..39a7c5c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java @@ -50,7 +50,7 @@ @Override public boolean save(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setCreateTime(new Date()); entity.setUpdateTime(new Date()); @@ -60,7 +60,7 @@ @Override public boolean updateById(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setUpdateTime(new Date()); return super.updateById(entity); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java index 48c9d89..88dc382 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java @@ -29,10 +29,7 @@ //设备状态更新 log.info("box online task start"); if (open) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.set("device_status",0); - updateWrapper.le("update_time",DateUtil.offsetMinute(new Date(),-5)); - boxDeviceService.update(updateWrapper); + boxDeviceService.updateStatus(); } log.info("box online task end"); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java deleted file mode 100644 index 8067843..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.casic.missiles.modular.device.util; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.core.datascope.ScopeEnums; - -import java.util.Set; - -public class StayPermissionUtil { - - /** - * 分组授权权限查询 - * - * @return - */ - public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); - } - - /** - * 数据权限查询 - * - * @param query - * @param columnId - * @param dataScope - * @param - * @return - */ - public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in(columnId, dataScope.getDeptIds()); - } - return query; - } - -} diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 6e91b47..99fc058 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +127,31 @@ } } + @Override + public void updateStatus() { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", 0); + updateWrapper.le("update_time", DateUtil.offsetMinute(new Date(), -5)); + this.update(updateWrapper); + } + @Override + public void updateBoxStatus(String code, String status) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", status); + this.update(updateWrapper); + } + + @Override + public void reloadStatus(String code, String version) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); + this.update(updateWrapper); + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java index 3490cc2..a8f0c45 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.util.RSAUtils; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.ResponseData; @@ -10,15 +9,16 @@ import com.casic.missiles.modular.auth.util.JwtUtil; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.service.IBoxDeviceService; import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; import com.casic.missiles.modular.system.utils.HttpUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.servlet.http.HttpSession; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -27,9 +27,12 @@ @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; + private final IBoxDeviceRelationService boxDeviceRelationService; private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); - public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService, @Lazy IBoxDeviceRelationService boxDeviceRelationService) { this.boxDeviceService = boxDeviceService; + this.boxDeviceRelationService = boxDeviceRelationService; } /** @@ -77,45 +80,57 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code,String version) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("code", code); - updateWrapper.set("device_status", 1); - updateWrapper.set("update_time", new Date()); - updateWrapper.set("version", version); - boxDeviceService.update(updateWrapper); + public void reloadStatus(String code, String version) { + boxDeviceService.reloadStatus(code, version); } @Override public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); - if (device == null || 0 == device.getDeviceStatus()) { - throw new ServiceException(500, "设备不存在或已离线!"); - } +// if (device == null || 0 == device.getDeviceStatus()) { +// throw new ServiceException(500, "设备不存在或已离线!"); +// } if (StrUtil.isEmpty(device.getClientPublicKey())) { throw new ServiceException(500, "无秘钥,请联系管理员!"); } //生成加密指令 String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { String str = RSAUtils.encrypt(command, device.getClientPublicKey()); if (StrUtil.isEmpty(device.getIp())) { throw new ServiceException(500, "设备IP不存在,请设置"); } - String url = "http://" + device.getIp() + "/command/test"; + + String url = "http://" + device.getIp() + "/command"; DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); httpHeaderHandler.setJson(true); httpHeaderHandler.setGetError(true); Map params = new HashMap<>(); params.put("secret", str); + + params.put("flag", commandDTO.getFlag()); + params.put("deviceNo", commandDTO.getDeviceNo()); String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); - if(StrUtil.isEmpty(res)){ + + //重启时修改状态为离线 + if (StrUtil.isEmpty(res)) { throw new ServiceException(500, "调用异常,请联系管理员!"); + } else { + if ("restart".equals(commandDTO.getCommand())) { + //重启则设置设备状态为离线 + boxDeviceService.updateBoxStatus(device.getCode(), "0"); + } else if ("stream".equals(commandDTO.getCommand())) { + //发起开流指令 则更新状态 + //boxDeviceRelationService.updateRecognitionStreamFlag(); + } } } catch (Exception e) { - throw new ServiceException(500, "加密异常,请联系管理员!"); + throw new ServiceException(500, "盒子访问异常,请联系管理员!"); } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java index 4ef41a4..788b599 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.constant.AnalysisConstants; +import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.RiskPointInfoMapper; import com.casic.missiles.modular.device.dto.RiskPointDTO; import com.casic.missiles.modular.device.dto.analysis.*; @@ -23,6 +26,9 @@ import com.casic.missiles.modular.device.service.IHazardClassificationInfoService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; import com.casic.missiles.modular.device.service.IRiskRelDeviceService; +import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; +import com.casic.missiles.modular.device.util.StayPermissionUtil; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; @@ -34,6 +40,8 @@ import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.modular.data.constants.DataConstants.NODE_TYPE_DEPT; + /** *

@@ -66,6 +74,8 @@ @Transactional(rollbackFor = Exception.class) @Override public List selectRiskPointInfoPage(Page page, QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List riskPointInfos = this.baseMapper.selectRiskPointInfoPage(page, query); riskPointInfos.forEach(this::wrapInfo); return riskPointInfos; @@ -113,6 +123,9 @@ } result.setDeviceList(deviceList); } + if (StrUtil.isEmpty(result.getSecretLevel())) { + result.setSecretLevel("0"); + } importDTOS.add(result); index++; @@ -146,6 +159,26 @@ return riskPointDTOS; } + private void wrapInfo(RiskPointInfo riskPointInfo) { + if (riskPointInfo.getDeptId() != null) { + riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); + + QueryWrapper query = new QueryWrapper<>(); + query.eq("risk_id", riskPointInfo.getId()); + List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); + riskPointInfo.setDeviceList(deviceList); + } + if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { + riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { + riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { + riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); + } + } + public void wrapperDTOS(List riskPointDTOS) { for (RiskPointDTO riskPointDTO : riskPointDTOS) { @@ -164,8 +197,8 @@ //重大危险源 case 2: riskPointDTO.setPlaceName(riskPointDTO.getRiskName()); - String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); - riskPointDTO.setGrade(hazardLevel); +// String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); + riskPointDTO.setGrade(riskPointDTO.getHazardLevel()); break; //危险化学品场所 case 3: @@ -185,6 +218,30 @@ } } + private String getRiskName(RiskPointInfo riskPointInfo) { + String riskName = riskPointInfo.getRiskName(); + switch (riskPointInfo.getRiskType()) { + //危险点 + case 1: + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskName = riskPointInfo.getHazardousChemicalSite(); + break; + //危险作业 + case 4: + riskName = riskPointInfo.getHazardousWork(); + break; + //危险作业工序 + case 5: + riskName = riskPointInfo.getWorkProcedure(); + break; + } + return riskName; + } + @Override public List deptDangerDTOPage(LambdaQueryWrapper query, Page page) { List riskPointInfos = baseMapper.deptDangerPage(query, page); @@ -203,8 +260,12 @@ areaDangerDTO.setYData(chartValueList); if (CollectionUtil.isNotEmpty(areaAnalysisDTOS)) { for (AreaAnalysisDTO areaAnalysisDTO : areaAnalysisDTOS) { - LambdaQueryWrapper dictQuery = new LambdaQueryWrapper<>(); - dictQuery.eq(isDept ? RiskPointInfo::getDeptId : RiskPointInfo::getArea, areaAnalysisDTO.getAreaId()); + QueryWrapper dictQuery = new QueryWrapper<>(); + dictQuery.eq(isDept ? "a.dept_id" : "a.area", areaAnalysisDTO.getAreaId()); + + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(dictQuery, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + List dictAnalysisList = isDept ? baseMapper.riskNumByDept(dictQuery) : baseMapper.riskNumByArea(dictQuery); Map map = dictAnalysisList.stream().collect(Collectors.toMap(AreaAnalysisDTO::getArea, AreaAnalysisDTO::getNum)); @@ -228,7 +289,7 @@ @Transactional @Override - public AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query) { + public AreaDangerDTO deptDangerDTO(QueryWrapper query) { //迭代获取各风险类型数量 List areaAnalysisDTOS = baseMapper.deptDangerDTOList(query); @@ -237,33 +298,129 @@ } @Override - public AreaDangerDTO areaDangerList(LambdaQueryWrapper query) { + public List tree(String groupType) { + //查询可见组织 + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + Integer type = Convert.toInt(groupType); + if (type == null) { + throw new ServiceException(500, "检索条件异常"); + } + + deptQuery.inSql(Dept::getId, "select dept_id from risk_point_info where risk_type = " + type); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + //迭代根组织 + List rootIds = new ArrayList<>(); + List deptDTOS = new ArrayList<>(); + Set normalIds = new HashSet<>(); + + //检索识别信息 + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setPid(dept.getPid()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + normalIds.add(dept.getId()); + deptDTO.setType(NODE_TYPE_DEPT); + + //挂载设备信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("dept_id", deptDTO.getId()); + + //判定只可查看以下密级 安全管理员除外 + if (!user.getRoleTips().contains(adminRole)) { + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + //类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序) + deviceQuery.eq("risk_type", groupType); + deviceQuery.orderByAsc("id"); + //校验分组授权 + StayPermissionUtil.riskQuery(deviceQuery, "id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + + List pointInfos = this.list(deviceQuery); + List deptDTOList = new ArrayList<>(); + for (RiskPointInfo pointInfo : pointInfos) { + RiskGroupDeptDTO deptDto = this.createDeptDTO(pointInfo); + deptDTOList.add(deptDto); + } + + deptDTO.setChildrenNodes(deptDTOList); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点 + DeptDefaultTreeBuildFactory abstractTreeBuildFactory = new DeptDefaultTreeBuildFactory(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + List newTree = new ArrayList<>(); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + /** + * 创建节点 + * + * @param pointInfo 风险点信息 + * @return + */ + public RiskGroupDeptDTO createDeptDTO(RiskPointInfo pointInfo) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(pointInfo.getId()); + deptDTO.setType(DataConstants.NODE_TYPE_RISK); + deptDTO.setPid(pointInfo.getDeptId()); + deptDTO.setRiskPointInfo(pointInfo); + deptDTO.setName(getRiskName(pointInfo)); + deptDTO.setFullName(getRiskName(pointInfo)); + return deptDTO; + } + + @Override + public AreaDangerDTO areaDangerList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.areaDangerList(query); return convertAreaAnalysisDTO(areaAnalysisDTOS, false); } + @Override + public AreaDangerDTO areaDangerScopeList(QueryWrapper query) { + + List areaAnalysisDTOS = baseMapper.areaDangerScopeList(query); + return convertAreaAnalysisDTO(areaAnalysisDTOS, false); + } + @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalRole, sysType); } @Override - public DangerCategoryDTO dangerCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerCategory(QueryWrapper query) { List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -280,11 +437,13 @@ } @Override - public DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerScopeCategory(QueryWrapper query) { DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -358,8 +517,8 @@ } //设置检索日期 - query.ge("alarm_time",begin); - query.le("alarm_time",end); + query.ge("alarm_time", begin); + query.le("alarm_time", end); List analysisDTOS = this.baseMapper.deptAlarmDate(query); long dateNum = DateUtil.betweenDay(begin, end, true); for (int i = 0; i <= dateNum; i++) { @@ -414,23 +573,5 @@ } } - private void wrapInfo(RiskPointInfo riskPointInfo) { - if (riskPointInfo.getDeptId() != null) { - riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); - QueryWrapper query = new QueryWrapper<>(); - query.eq("risk_id", riskPointInfo.getId()); - List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); - riskPointInfo.setDeviceList(deviceList); - } - if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { - riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { - riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { - riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); - } - } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java index 8ac9dac..39a7c5c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java @@ -50,7 +50,7 @@ @Override public boolean save(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setCreateTime(new Date()); entity.setUpdateTime(new Date()); @@ -60,7 +60,7 @@ @Override public boolean updateById(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setUpdateTime(new Date()); return super.updateById(entity); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java index 48c9d89..88dc382 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java @@ -29,10 +29,7 @@ //设备状态更新 log.info("box online task start"); if (open) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.set("device_status",0); - updateWrapper.le("update_time",DateUtil.offsetMinute(new Date(),-5)); - boxDeviceService.update(updateWrapper); + boxDeviceService.updateStatus(); } log.info("box online task end"); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java deleted file mode 100644 index 8067843..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.casic.missiles.modular.device.util; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.core.datascope.ScopeEnums; - -import java.util.Set; - -public class StayPermissionUtil { - - /** - * 分组授权权限查询 - * - * @return - */ - public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); - } - - /** - * 数据权限查询 - * - * @param query - * @param columnId - * @param dataScope - * @param - * @return - */ - public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in(columnId, dataScope.getDeptIds()); - } - return query; - } - -} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 204e65a..4a3e0e0 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -116,6 +116,11 @@ com.casic + casic-admin-audit + ${admin.version} + + + com.casic casic-admin-support ${admin.version} @@ -140,6 +145,12 @@ oscarJDBC8 8.0 + + com.casic + casic-admin-tenant + ${admin.version} + + org.springframework.boot @@ -279,8 +290,7 @@ src/main/resources - - + /config/*/* /config/*-*.yml diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 6e91b47..99fc058 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +127,31 @@ } } + @Override + public void updateStatus() { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", 0); + updateWrapper.le("update_time", DateUtil.offsetMinute(new Date(), -5)); + this.update(updateWrapper); + } + @Override + public void updateBoxStatus(String code, String status) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", status); + this.update(updateWrapper); + } + + @Override + public void reloadStatus(String code, String version) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); + this.update(updateWrapper); + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java index 3490cc2..a8f0c45 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.util.RSAUtils; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.ResponseData; @@ -10,15 +9,16 @@ import com.casic.missiles.modular.auth.util.JwtUtil; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.service.IBoxDeviceService; import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; import com.casic.missiles.modular.system.utils.HttpUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.servlet.http.HttpSession; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -27,9 +27,12 @@ @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; + private final IBoxDeviceRelationService boxDeviceRelationService; private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); - public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService, @Lazy IBoxDeviceRelationService boxDeviceRelationService) { this.boxDeviceService = boxDeviceService; + this.boxDeviceRelationService = boxDeviceRelationService; } /** @@ -77,45 +80,57 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code,String version) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("code", code); - updateWrapper.set("device_status", 1); - updateWrapper.set("update_time", new Date()); - updateWrapper.set("version", version); - boxDeviceService.update(updateWrapper); + public void reloadStatus(String code, String version) { + boxDeviceService.reloadStatus(code, version); } @Override public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); - if (device == null || 0 == device.getDeviceStatus()) { - throw new ServiceException(500, "设备不存在或已离线!"); - } +// if (device == null || 0 == device.getDeviceStatus()) { +// throw new ServiceException(500, "设备不存在或已离线!"); +// } if (StrUtil.isEmpty(device.getClientPublicKey())) { throw new ServiceException(500, "无秘钥,请联系管理员!"); } //生成加密指令 String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { String str = RSAUtils.encrypt(command, device.getClientPublicKey()); if (StrUtil.isEmpty(device.getIp())) { throw new ServiceException(500, "设备IP不存在,请设置"); } - String url = "http://" + device.getIp() + "/command/test"; + + String url = "http://" + device.getIp() + "/command"; DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); httpHeaderHandler.setJson(true); httpHeaderHandler.setGetError(true); Map params = new HashMap<>(); params.put("secret", str); + + params.put("flag", commandDTO.getFlag()); + params.put("deviceNo", commandDTO.getDeviceNo()); String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); - if(StrUtil.isEmpty(res)){ + + //重启时修改状态为离线 + if (StrUtil.isEmpty(res)) { throw new ServiceException(500, "调用异常,请联系管理员!"); + } else { + if ("restart".equals(commandDTO.getCommand())) { + //重启则设置设备状态为离线 + boxDeviceService.updateBoxStatus(device.getCode(), "0"); + } else if ("stream".equals(commandDTO.getCommand())) { + //发起开流指令 则更新状态 + //boxDeviceRelationService.updateRecognitionStreamFlag(); + } } } catch (Exception e) { - throw new ServiceException(500, "加密异常,请联系管理员!"); + throw new ServiceException(500, "盒子访问异常,请联系管理员!"); } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java index 4ef41a4..788b599 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.constant.AnalysisConstants; +import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.RiskPointInfoMapper; import com.casic.missiles.modular.device.dto.RiskPointDTO; import com.casic.missiles.modular.device.dto.analysis.*; @@ -23,6 +26,9 @@ import com.casic.missiles.modular.device.service.IHazardClassificationInfoService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; import com.casic.missiles.modular.device.service.IRiskRelDeviceService; +import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; +import com.casic.missiles.modular.device.util.StayPermissionUtil; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; @@ -34,6 +40,8 @@ import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.modular.data.constants.DataConstants.NODE_TYPE_DEPT; + /** *

@@ -66,6 +74,8 @@ @Transactional(rollbackFor = Exception.class) @Override public List selectRiskPointInfoPage(Page page, QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List riskPointInfos = this.baseMapper.selectRiskPointInfoPage(page, query); riskPointInfos.forEach(this::wrapInfo); return riskPointInfos; @@ -113,6 +123,9 @@ } result.setDeviceList(deviceList); } + if (StrUtil.isEmpty(result.getSecretLevel())) { + result.setSecretLevel("0"); + } importDTOS.add(result); index++; @@ -146,6 +159,26 @@ return riskPointDTOS; } + private void wrapInfo(RiskPointInfo riskPointInfo) { + if (riskPointInfo.getDeptId() != null) { + riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); + + QueryWrapper query = new QueryWrapper<>(); + query.eq("risk_id", riskPointInfo.getId()); + List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); + riskPointInfo.setDeviceList(deviceList); + } + if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { + riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { + riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { + riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); + } + } + public void wrapperDTOS(List riskPointDTOS) { for (RiskPointDTO riskPointDTO : riskPointDTOS) { @@ -164,8 +197,8 @@ //重大危险源 case 2: riskPointDTO.setPlaceName(riskPointDTO.getRiskName()); - String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); - riskPointDTO.setGrade(hazardLevel); +// String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); + riskPointDTO.setGrade(riskPointDTO.getHazardLevel()); break; //危险化学品场所 case 3: @@ -185,6 +218,30 @@ } } + private String getRiskName(RiskPointInfo riskPointInfo) { + String riskName = riskPointInfo.getRiskName(); + switch (riskPointInfo.getRiskType()) { + //危险点 + case 1: + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskName = riskPointInfo.getHazardousChemicalSite(); + break; + //危险作业 + case 4: + riskName = riskPointInfo.getHazardousWork(); + break; + //危险作业工序 + case 5: + riskName = riskPointInfo.getWorkProcedure(); + break; + } + return riskName; + } + @Override public List deptDangerDTOPage(LambdaQueryWrapper query, Page page) { List riskPointInfos = baseMapper.deptDangerPage(query, page); @@ -203,8 +260,12 @@ areaDangerDTO.setYData(chartValueList); if (CollectionUtil.isNotEmpty(areaAnalysisDTOS)) { for (AreaAnalysisDTO areaAnalysisDTO : areaAnalysisDTOS) { - LambdaQueryWrapper dictQuery = new LambdaQueryWrapper<>(); - dictQuery.eq(isDept ? RiskPointInfo::getDeptId : RiskPointInfo::getArea, areaAnalysisDTO.getAreaId()); + QueryWrapper dictQuery = new QueryWrapper<>(); + dictQuery.eq(isDept ? "a.dept_id" : "a.area", areaAnalysisDTO.getAreaId()); + + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(dictQuery, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + List dictAnalysisList = isDept ? baseMapper.riskNumByDept(dictQuery) : baseMapper.riskNumByArea(dictQuery); Map map = dictAnalysisList.stream().collect(Collectors.toMap(AreaAnalysisDTO::getArea, AreaAnalysisDTO::getNum)); @@ -228,7 +289,7 @@ @Transactional @Override - public AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query) { + public AreaDangerDTO deptDangerDTO(QueryWrapper query) { //迭代获取各风险类型数量 List areaAnalysisDTOS = baseMapper.deptDangerDTOList(query); @@ -237,33 +298,129 @@ } @Override - public AreaDangerDTO areaDangerList(LambdaQueryWrapper query) { + public List tree(String groupType) { + //查询可见组织 + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + Integer type = Convert.toInt(groupType); + if (type == null) { + throw new ServiceException(500, "检索条件异常"); + } + + deptQuery.inSql(Dept::getId, "select dept_id from risk_point_info where risk_type = " + type); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + //迭代根组织 + List rootIds = new ArrayList<>(); + List deptDTOS = new ArrayList<>(); + Set normalIds = new HashSet<>(); + + //检索识别信息 + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setPid(dept.getPid()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + normalIds.add(dept.getId()); + deptDTO.setType(NODE_TYPE_DEPT); + + //挂载设备信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("dept_id", deptDTO.getId()); + + //判定只可查看以下密级 安全管理员除外 + if (!user.getRoleTips().contains(adminRole)) { + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + //类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序) + deviceQuery.eq("risk_type", groupType); + deviceQuery.orderByAsc("id"); + //校验分组授权 + StayPermissionUtil.riskQuery(deviceQuery, "id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + + List pointInfos = this.list(deviceQuery); + List deptDTOList = new ArrayList<>(); + for (RiskPointInfo pointInfo : pointInfos) { + RiskGroupDeptDTO deptDto = this.createDeptDTO(pointInfo); + deptDTOList.add(deptDto); + } + + deptDTO.setChildrenNodes(deptDTOList); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点 + DeptDefaultTreeBuildFactory abstractTreeBuildFactory = new DeptDefaultTreeBuildFactory(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + List newTree = new ArrayList<>(); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + /** + * 创建节点 + * + * @param pointInfo 风险点信息 + * @return + */ + public RiskGroupDeptDTO createDeptDTO(RiskPointInfo pointInfo) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(pointInfo.getId()); + deptDTO.setType(DataConstants.NODE_TYPE_RISK); + deptDTO.setPid(pointInfo.getDeptId()); + deptDTO.setRiskPointInfo(pointInfo); + deptDTO.setName(getRiskName(pointInfo)); + deptDTO.setFullName(getRiskName(pointInfo)); + return deptDTO; + } + + @Override + public AreaDangerDTO areaDangerList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.areaDangerList(query); return convertAreaAnalysisDTO(areaAnalysisDTOS, false); } + @Override + public AreaDangerDTO areaDangerScopeList(QueryWrapper query) { + + List areaAnalysisDTOS = baseMapper.areaDangerScopeList(query); + return convertAreaAnalysisDTO(areaAnalysisDTOS, false); + } + @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalRole, sysType); } @Override - public DangerCategoryDTO dangerCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerCategory(QueryWrapper query) { List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -280,11 +437,13 @@ } @Override - public DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerScopeCategory(QueryWrapper query) { DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -358,8 +517,8 @@ } //设置检索日期 - query.ge("alarm_time",begin); - query.le("alarm_time",end); + query.ge("alarm_time", begin); + query.le("alarm_time", end); List analysisDTOS = this.baseMapper.deptAlarmDate(query); long dateNum = DateUtil.betweenDay(begin, end, true); for (int i = 0; i <= dateNum; i++) { @@ -414,23 +573,5 @@ } } - private void wrapInfo(RiskPointInfo riskPointInfo) { - if (riskPointInfo.getDeptId() != null) { - riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); - QueryWrapper query = new QueryWrapper<>(); - query.eq("risk_id", riskPointInfo.getId()); - List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); - riskPointInfo.setDeviceList(deviceList); - } - if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { - riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { - riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { - riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); - } - } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java index 8ac9dac..39a7c5c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java @@ -50,7 +50,7 @@ @Override public boolean save(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setCreateTime(new Date()); entity.setUpdateTime(new Date()); @@ -60,7 +60,7 @@ @Override public boolean updateById(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setUpdateTime(new Date()); return super.updateById(entity); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java index 48c9d89..88dc382 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java @@ -29,10 +29,7 @@ //设备状态更新 log.info("box online task start"); if (open) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.set("device_status",0); - updateWrapper.le("update_time",DateUtil.offsetMinute(new Date(),-5)); - boxDeviceService.update(updateWrapper); + boxDeviceService.updateStatus(); } log.info("box online task end"); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java deleted file mode 100644 index 8067843..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.casic.missiles.modular.device.util; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.core.datascope.ScopeEnums; - -import java.util.Set; - -public class StayPermissionUtil { - - /** - * 分组授权权限查询 - * - * @return - */ - public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); - } - - /** - * 数据权限查询 - * - * @param query - * @param columnId - * @param dataScope - * @param - * @return - */ - public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in(columnId, dataScope.getDeptIds()); - } - return query; - } - -} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 204e65a..4a3e0e0 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -116,6 +116,11 @@ com.casic + casic-admin-audit + ${admin.version} + + + com.casic casic-admin-support ${admin.version} @@ -140,6 +145,12 @@ oscarJDBC8 8.0 + + com.casic + casic-admin-tenant + ${admin.version} + + org.springframework.boot @@ -279,8 +290,7 @@ src/main/resources - - + /config/*/* /config/*-*.yml diff --git a/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java b/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java index 0028188..5ae5588 100644 --- a/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java +++ b/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java @@ -19,9 +19,9 @@ System.out.println("随机生成的公钥为:" + keyMap.get(RSAPublicKey)); System.out.println("随机生成的私钥为:" + keyMap.get(RSAPrivateKey)); - String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB"; - System.out.println( - encrypt(message,publicKey)); +// String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB"; +// System.out.println( +// encrypt(message,publicKey)); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 6e91b47..99fc058 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +127,31 @@ } } + @Override + public void updateStatus() { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", 0); + updateWrapper.le("update_time", DateUtil.offsetMinute(new Date(), -5)); + this.update(updateWrapper); + } + @Override + public void updateBoxStatus(String code, String status) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", status); + this.update(updateWrapper); + } + + @Override + public void reloadStatus(String code, String version) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); + this.update(updateWrapper); + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java index 3490cc2..a8f0c45 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.util.RSAUtils; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.ResponseData; @@ -10,15 +9,16 @@ import com.casic.missiles.modular.auth.util.JwtUtil; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.service.IBoxDeviceService; import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; import com.casic.missiles.modular.system.utils.HttpUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.servlet.http.HttpSession; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -27,9 +27,12 @@ @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; + private final IBoxDeviceRelationService boxDeviceRelationService; private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); - public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService, @Lazy IBoxDeviceRelationService boxDeviceRelationService) { this.boxDeviceService = boxDeviceService; + this.boxDeviceRelationService = boxDeviceRelationService; } /** @@ -77,45 +80,57 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code,String version) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("code", code); - updateWrapper.set("device_status", 1); - updateWrapper.set("update_time", new Date()); - updateWrapper.set("version", version); - boxDeviceService.update(updateWrapper); + public void reloadStatus(String code, String version) { + boxDeviceService.reloadStatus(code, version); } @Override public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); - if (device == null || 0 == device.getDeviceStatus()) { - throw new ServiceException(500, "设备不存在或已离线!"); - } +// if (device == null || 0 == device.getDeviceStatus()) { +// throw new ServiceException(500, "设备不存在或已离线!"); +// } if (StrUtil.isEmpty(device.getClientPublicKey())) { throw new ServiceException(500, "无秘钥,请联系管理员!"); } //生成加密指令 String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { String str = RSAUtils.encrypt(command, device.getClientPublicKey()); if (StrUtil.isEmpty(device.getIp())) { throw new ServiceException(500, "设备IP不存在,请设置"); } - String url = "http://" + device.getIp() + "/command/test"; + + String url = "http://" + device.getIp() + "/command"; DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); httpHeaderHandler.setJson(true); httpHeaderHandler.setGetError(true); Map params = new HashMap<>(); params.put("secret", str); + + params.put("flag", commandDTO.getFlag()); + params.put("deviceNo", commandDTO.getDeviceNo()); String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); - if(StrUtil.isEmpty(res)){ + + //重启时修改状态为离线 + if (StrUtil.isEmpty(res)) { throw new ServiceException(500, "调用异常,请联系管理员!"); + } else { + if ("restart".equals(commandDTO.getCommand())) { + //重启则设置设备状态为离线 + boxDeviceService.updateBoxStatus(device.getCode(), "0"); + } else if ("stream".equals(commandDTO.getCommand())) { + //发起开流指令 则更新状态 + //boxDeviceRelationService.updateRecognitionStreamFlag(); + } } } catch (Exception e) { - throw new ServiceException(500, "加密异常,请联系管理员!"); + throw new ServiceException(500, "盒子访问异常,请联系管理员!"); } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java index 4ef41a4..788b599 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.constant.AnalysisConstants; +import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.RiskPointInfoMapper; import com.casic.missiles.modular.device.dto.RiskPointDTO; import com.casic.missiles.modular.device.dto.analysis.*; @@ -23,6 +26,9 @@ import com.casic.missiles.modular.device.service.IHazardClassificationInfoService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; import com.casic.missiles.modular.device.service.IRiskRelDeviceService; +import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; +import com.casic.missiles.modular.device.util.StayPermissionUtil; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; @@ -34,6 +40,8 @@ import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.modular.data.constants.DataConstants.NODE_TYPE_DEPT; + /** *

@@ -66,6 +74,8 @@ @Transactional(rollbackFor = Exception.class) @Override public List selectRiskPointInfoPage(Page page, QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List riskPointInfos = this.baseMapper.selectRiskPointInfoPage(page, query); riskPointInfos.forEach(this::wrapInfo); return riskPointInfos; @@ -113,6 +123,9 @@ } result.setDeviceList(deviceList); } + if (StrUtil.isEmpty(result.getSecretLevel())) { + result.setSecretLevel("0"); + } importDTOS.add(result); index++; @@ -146,6 +159,26 @@ return riskPointDTOS; } + private void wrapInfo(RiskPointInfo riskPointInfo) { + if (riskPointInfo.getDeptId() != null) { + riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); + + QueryWrapper query = new QueryWrapper<>(); + query.eq("risk_id", riskPointInfo.getId()); + List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); + riskPointInfo.setDeviceList(deviceList); + } + if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { + riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { + riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { + riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); + } + } + public void wrapperDTOS(List riskPointDTOS) { for (RiskPointDTO riskPointDTO : riskPointDTOS) { @@ -164,8 +197,8 @@ //重大危险源 case 2: riskPointDTO.setPlaceName(riskPointDTO.getRiskName()); - String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); - riskPointDTO.setGrade(hazardLevel); +// String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); + riskPointDTO.setGrade(riskPointDTO.getHazardLevel()); break; //危险化学品场所 case 3: @@ -185,6 +218,30 @@ } } + private String getRiskName(RiskPointInfo riskPointInfo) { + String riskName = riskPointInfo.getRiskName(); + switch (riskPointInfo.getRiskType()) { + //危险点 + case 1: + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskName = riskPointInfo.getHazardousChemicalSite(); + break; + //危险作业 + case 4: + riskName = riskPointInfo.getHazardousWork(); + break; + //危险作业工序 + case 5: + riskName = riskPointInfo.getWorkProcedure(); + break; + } + return riskName; + } + @Override public List deptDangerDTOPage(LambdaQueryWrapper query, Page page) { List riskPointInfos = baseMapper.deptDangerPage(query, page); @@ -203,8 +260,12 @@ areaDangerDTO.setYData(chartValueList); if (CollectionUtil.isNotEmpty(areaAnalysisDTOS)) { for (AreaAnalysisDTO areaAnalysisDTO : areaAnalysisDTOS) { - LambdaQueryWrapper dictQuery = new LambdaQueryWrapper<>(); - dictQuery.eq(isDept ? RiskPointInfo::getDeptId : RiskPointInfo::getArea, areaAnalysisDTO.getAreaId()); + QueryWrapper dictQuery = new QueryWrapper<>(); + dictQuery.eq(isDept ? "a.dept_id" : "a.area", areaAnalysisDTO.getAreaId()); + + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(dictQuery, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + List dictAnalysisList = isDept ? baseMapper.riskNumByDept(dictQuery) : baseMapper.riskNumByArea(dictQuery); Map map = dictAnalysisList.stream().collect(Collectors.toMap(AreaAnalysisDTO::getArea, AreaAnalysisDTO::getNum)); @@ -228,7 +289,7 @@ @Transactional @Override - public AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query) { + public AreaDangerDTO deptDangerDTO(QueryWrapper query) { //迭代获取各风险类型数量 List areaAnalysisDTOS = baseMapper.deptDangerDTOList(query); @@ -237,33 +298,129 @@ } @Override - public AreaDangerDTO areaDangerList(LambdaQueryWrapper query) { + public List tree(String groupType) { + //查询可见组织 + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + Integer type = Convert.toInt(groupType); + if (type == null) { + throw new ServiceException(500, "检索条件异常"); + } + + deptQuery.inSql(Dept::getId, "select dept_id from risk_point_info where risk_type = " + type); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + //迭代根组织 + List rootIds = new ArrayList<>(); + List deptDTOS = new ArrayList<>(); + Set normalIds = new HashSet<>(); + + //检索识别信息 + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setPid(dept.getPid()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + normalIds.add(dept.getId()); + deptDTO.setType(NODE_TYPE_DEPT); + + //挂载设备信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("dept_id", deptDTO.getId()); + + //判定只可查看以下密级 安全管理员除外 + if (!user.getRoleTips().contains(adminRole)) { + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + //类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序) + deviceQuery.eq("risk_type", groupType); + deviceQuery.orderByAsc("id"); + //校验分组授权 + StayPermissionUtil.riskQuery(deviceQuery, "id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + + List pointInfos = this.list(deviceQuery); + List deptDTOList = new ArrayList<>(); + for (RiskPointInfo pointInfo : pointInfos) { + RiskGroupDeptDTO deptDto = this.createDeptDTO(pointInfo); + deptDTOList.add(deptDto); + } + + deptDTO.setChildrenNodes(deptDTOList); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点 + DeptDefaultTreeBuildFactory abstractTreeBuildFactory = new DeptDefaultTreeBuildFactory(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + List newTree = new ArrayList<>(); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + /** + * 创建节点 + * + * @param pointInfo 风险点信息 + * @return + */ + public RiskGroupDeptDTO createDeptDTO(RiskPointInfo pointInfo) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(pointInfo.getId()); + deptDTO.setType(DataConstants.NODE_TYPE_RISK); + deptDTO.setPid(pointInfo.getDeptId()); + deptDTO.setRiskPointInfo(pointInfo); + deptDTO.setName(getRiskName(pointInfo)); + deptDTO.setFullName(getRiskName(pointInfo)); + return deptDTO; + } + + @Override + public AreaDangerDTO areaDangerList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.areaDangerList(query); return convertAreaAnalysisDTO(areaAnalysisDTOS, false); } + @Override + public AreaDangerDTO areaDangerScopeList(QueryWrapper query) { + + List areaAnalysisDTOS = baseMapper.areaDangerScopeList(query); + return convertAreaAnalysisDTO(areaAnalysisDTOS, false); + } + @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalRole, sysType); } @Override - public DangerCategoryDTO dangerCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerCategory(QueryWrapper query) { List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -280,11 +437,13 @@ } @Override - public DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerScopeCategory(QueryWrapper query) { DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -358,8 +517,8 @@ } //设置检索日期 - query.ge("alarm_time",begin); - query.le("alarm_time",end); + query.ge("alarm_time", begin); + query.le("alarm_time", end); List analysisDTOS = this.baseMapper.deptAlarmDate(query); long dateNum = DateUtil.betweenDay(begin, end, true); for (int i = 0; i <= dateNum; i++) { @@ -414,23 +573,5 @@ } } - private void wrapInfo(RiskPointInfo riskPointInfo) { - if (riskPointInfo.getDeptId() != null) { - riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); - QueryWrapper query = new QueryWrapper<>(); - query.eq("risk_id", riskPointInfo.getId()); - List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); - riskPointInfo.setDeviceList(deviceList); - } - if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { - riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { - riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { - riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); - } - } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java index 8ac9dac..39a7c5c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java @@ -50,7 +50,7 @@ @Override public boolean save(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setCreateTime(new Date()); entity.setUpdateTime(new Date()); @@ -60,7 +60,7 @@ @Override public boolean updateById(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setUpdateTime(new Date()); return super.updateById(entity); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java index 48c9d89..88dc382 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java @@ -29,10 +29,7 @@ //设备状态更新 log.info("box online task start"); if (open) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.set("device_status",0); - updateWrapper.le("update_time",DateUtil.offsetMinute(new Date(),-5)); - boxDeviceService.update(updateWrapper); + boxDeviceService.updateStatus(); } log.info("box online task end"); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java deleted file mode 100644 index 8067843..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.casic.missiles.modular.device.util; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.core.datascope.ScopeEnums; - -import java.util.Set; - -public class StayPermissionUtil { - - /** - * 分组授权权限查询 - * - * @return - */ - public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); - } - - /** - * 数据权限查询 - * - * @param query - * @param columnId - * @param dataScope - * @param - * @return - */ - public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in(columnId, dataScope.getDeptIds()); - } - return query; - } - -} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 204e65a..4a3e0e0 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -116,6 +116,11 @@ com.casic + casic-admin-audit + ${admin.version} + + + com.casic casic-admin-support ${admin.version} @@ -140,6 +145,12 @@ oscarJDBC8 8.0 + + com.casic + casic-admin-tenant + ${admin.version} + + org.springframework.boot @@ -279,8 +290,7 @@ src/main/resources - - + /config/*/* /config/*-*.yml diff --git a/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java b/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java index 0028188..5ae5588 100644 --- a/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java +++ b/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java @@ -19,9 +19,9 @@ System.out.println("随机生成的公钥为:" + keyMap.get(RSAPublicKey)); System.out.println("随机生成的私钥为:" + keyMap.get(RSAPrivateKey)); - String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB"; - System.out.println( - encrypt(message,publicKey)); +// String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB"; +// System.out.println( +// encrypt(message,publicKey)); } } diff --git a/casic-web/src/main/java/com/casic/missiles/test/Test.java b/casic-web/src/main/java/com/casic/missiles/test/Test.java index 8ada97d..a7fe4f6 100644 --- a/casic-web/src/main/java/com/casic/missiles/test/Test.java +++ b/casic-web/src/main/java/com/casic/missiles/test/Test.java @@ -32,6 +32,9 @@ String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB"; String sec = RSAUtils.encrypt(str, pubKey); System.out.println(sec); + String priKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g="; + String s = RSAUtils.decrypt(sec,priKey); + System.out.println(s); } public static String calculateMD5(String filePath) { try { diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 6e91b47..99fc058 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +127,31 @@ } } + @Override + public void updateStatus() { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", 0); + updateWrapper.le("update_time", DateUtil.offsetMinute(new Date(), -5)); + this.update(updateWrapper); + } + @Override + public void updateBoxStatus(String code, String status) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", status); + this.update(updateWrapper); + } + + @Override + public void reloadStatus(String code, String version) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); + this.update(updateWrapper); + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java index 3490cc2..a8f0c45 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.util.RSAUtils; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.ResponseData; @@ -10,15 +9,16 @@ import com.casic.missiles.modular.auth.util.JwtUtil; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.service.IBoxDeviceService; import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; import com.casic.missiles.modular.system.utils.HttpUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.servlet.http.HttpSession; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -27,9 +27,12 @@ @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; + private final IBoxDeviceRelationService boxDeviceRelationService; private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); - public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService, @Lazy IBoxDeviceRelationService boxDeviceRelationService) { this.boxDeviceService = boxDeviceService; + this.boxDeviceRelationService = boxDeviceRelationService; } /** @@ -77,45 +80,57 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code,String version) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("code", code); - updateWrapper.set("device_status", 1); - updateWrapper.set("update_time", new Date()); - updateWrapper.set("version", version); - boxDeviceService.update(updateWrapper); + public void reloadStatus(String code, String version) { + boxDeviceService.reloadStatus(code, version); } @Override public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); - if (device == null || 0 == device.getDeviceStatus()) { - throw new ServiceException(500, "设备不存在或已离线!"); - } +// if (device == null || 0 == device.getDeviceStatus()) { +// throw new ServiceException(500, "设备不存在或已离线!"); +// } if (StrUtil.isEmpty(device.getClientPublicKey())) { throw new ServiceException(500, "无秘钥,请联系管理员!"); } //生成加密指令 String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { String str = RSAUtils.encrypt(command, device.getClientPublicKey()); if (StrUtil.isEmpty(device.getIp())) { throw new ServiceException(500, "设备IP不存在,请设置"); } - String url = "http://" + device.getIp() + "/command/test"; + + String url = "http://" + device.getIp() + "/command"; DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); httpHeaderHandler.setJson(true); httpHeaderHandler.setGetError(true); Map params = new HashMap<>(); params.put("secret", str); + + params.put("flag", commandDTO.getFlag()); + params.put("deviceNo", commandDTO.getDeviceNo()); String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); - if(StrUtil.isEmpty(res)){ + + //重启时修改状态为离线 + if (StrUtil.isEmpty(res)) { throw new ServiceException(500, "调用异常,请联系管理员!"); + } else { + if ("restart".equals(commandDTO.getCommand())) { + //重启则设置设备状态为离线 + boxDeviceService.updateBoxStatus(device.getCode(), "0"); + } else if ("stream".equals(commandDTO.getCommand())) { + //发起开流指令 则更新状态 + //boxDeviceRelationService.updateRecognitionStreamFlag(); + } } } catch (Exception e) { - throw new ServiceException(500, "加密异常,请联系管理员!"); + throw new ServiceException(500, "盒子访问异常,请联系管理员!"); } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java index 4ef41a4..788b599 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.constant.AnalysisConstants; +import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.RiskPointInfoMapper; import com.casic.missiles.modular.device.dto.RiskPointDTO; import com.casic.missiles.modular.device.dto.analysis.*; @@ -23,6 +26,9 @@ import com.casic.missiles.modular.device.service.IHazardClassificationInfoService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; import com.casic.missiles.modular.device.service.IRiskRelDeviceService; +import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; +import com.casic.missiles.modular.device.util.StayPermissionUtil; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; @@ -34,6 +40,8 @@ import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.modular.data.constants.DataConstants.NODE_TYPE_DEPT; + /** *

@@ -66,6 +74,8 @@ @Transactional(rollbackFor = Exception.class) @Override public List selectRiskPointInfoPage(Page page, QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List riskPointInfos = this.baseMapper.selectRiskPointInfoPage(page, query); riskPointInfos.forEach(this::wrapInfo); return riskPointInfos; @@ -113,6 +123,9 @@ } result.setDeviceList(deviceList); } + if (StrUtil.isEmpty(result.getSecretLevel())) { + result.setSecretLevel("0"); + } importDTOS.add(result); index++; @@ -146,6 +159,26 @@ return riskPointDTOS; } + private void wrapInfo(RiskPointInfo riskPointInfo) { + if (riskPointInfo.getDeptId() != null) { + riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); + + QueryWrapper query = new QueryWrapper<>(); + query.eq("risk_id", riskPointInfo.getId()); + List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); + riskPointInfo.setDeviceList(deviceList); + } + if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { + riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { + riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { + riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); + } + } + public void wrapperDTOS(List riskPointDTOS) { for (RiskPointDTO riskPointDTO : riskPointDTOS) { @@ -164,8 +197,8 @@ //重大危险源 case 2: riskPointDTO.setPlaceName(riskPointDTO.getRiskName()); - String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); - riskPointDTO.setGrade(hazardLevel); +// String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); + riskPointDTO.setGrade(riskPointDTO.getHazardLevel()); break; //危险化学品场所 case 3: @@ -185,6 +218,30 @@ } } + private String getRiskName(RiskPointInfo riskPointInfo) { + String riskName = riskPointInfo.getRiskName(); + switch (riskPointInfo.getRiskType()) { + //危险点 + case 1: + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskName = riskPointInfo.getHazardousChemicalSite(); + break; + //危险作业 + case 4: + riskName = riskPointInfo.getHazardousWork(); + break; + //危险作业工序 + case 5: + riskName = riskPointInfo.getWorkProcedure(); + break; + } + return riskName; + } + @Override public List deptDangerDTOPage(LambdaQueryWrapper query, Page page) { List riskPointInfos = baseMapper.deptDangerPage(query, page); @@ -203,8 +260,12 @@ areaDangerDTO.setYData(chartValueList); if (CollectionUtil.isNotEmpty(areaAnalysisDTOS)) { for (AreaAnalysisDTO areaAnalysisDTO : areaAnalysisDTOS) { - LambdaQueryWrapper dictQuery = new LambdaQueryWrapper<>(); - dictQuery.eq(isDept ? RiskPointInfo::getDeptId : RiskPointInfo::getArea, areaAnalysisDTO.getAreaId()); + QueryWrapper dictQuery = new QueryWrapper<>(); + dictQuery.eq(isDept ? "a.dept_id" : "a.area", areaAnalysisDTO.getAreaId()); + + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(dictQuery, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + List dictAnalysisList = isDept ? baseMapper.riskNumByDept(dictQuery) : baseMapper.riskNumByArea(dictQuery); Map map = dictAnalysisList.stream().collect(Collectors.toMap(AreaAnalysisDTO::getArea, AreaAnalysisDTO::getNum)); @@ -228,7 +289,7 @@ @Transactional @Override - public AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query) { + public AreaDangerDTO deptDangerDTO(QueryWrapper query) { //迭代获取各风险类型数量 List areaAnalysisDTOS = baseMapper.deptDangerDTOList(query); @@ -237,33 +298,129 @@ } @Override - public AreaDangerDTO areaDangerList(LambdaQueryWrapper query) { + public List tree(String groupType) { + //查询可见组织 + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + Integer type = Convert.toInt(groupType); + if (type == null) { + throw new ServiceException(500, "检索条件异常"); + } + + deptQuery.inSql(Dept::getId, "select dept_id from risk_point_info where risk_type = " + type); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + //迭代根组织 + List rootIds = new ArrayList<>(); + List deptDTOS = new ArrayList<>(); + Set normalIds = new HashSet<>(); + + //检索识别信息 + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setPid(dept.getPid()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + normalIds.add(dept.getId()); + deptDTO.setType(NODE_TYPE_DEPT); + + //挂载设备信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("dept_id", deptDTO.getId()); + + //判定只可查看以下密级 安全管理员除外 + if (!user.getRoleTips().contains(adminRole)) { + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + //类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序) + deviceQuery.eq("risk_type", groupType); + deviceQuery.orderByAsc("id"); + //校验分组授权 + StayPermissionUtil.riskQuery(deviceQuery, "id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + + List pointInfos = this.list(deviceQuery); + List deptDTOList = new ArrayList<>(); + for (RiskPointInfo pointInfo : pointInfos) { + RiskGroupDeptDTO deptDto = this.createDeptDTO(pointInfo); + deptDTOList.add(deptDto); + } + + deptDTO.setChildrenNodes(deptDTOList); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点 + DeptDefaultTreeBuildFactory abstractTreeBuildFactory = new DeptDefaultTreeBuildFactory(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + List newTree = new ArrayList<>(); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + /** + * 创建节点 + * + * @param pointInfo 风险点信息 + * @return + */ + public RiskGroupDeptDTO createDeptDTO(RiskPointInfo pointInfo) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(pointInfo.getId()); + deptDTO.setType(DataConstants.NODE_TYPE_RISK); + deptDTO.setPid(pointInfo.getDeptId()); + deptDTO.setRiskPointInfo(pointInfo); + deptDTO.setName(getRiskName(pointInfo)); + deptDTO.setFullName(getRiskName(pointInfo)); + return deptDTO; + } + + @Override + public AreaDangerDTO areaDangerList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.areaDangerList(query); return convertAreaAnalysisDTO(areaAnalysisDTOS, false); } + @Override + public AreaDangerDTO areaDangerScopeList(QueryWrapper query) { + + List areaAnalysisDTOS = baseMapper.areaDangerScopeList(query); + return convertAreaAnalysisDTO(areaAnalysisDTOS, false); + } + @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalRole, sysType); } @Override - public DangerCategoryDTO dangerCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerCategory(QueryWrapper query) { List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -280,11 +437,13 @@ } @Override - public DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerScopeCategory(QueryWrapper query) { DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -358,8 +517,8 @@ } //设置检索日期 - query.ge("alarm_time",begin); - query.le("alarm_time",end); + query.ge("alarm_time", begin); + query.le("alarm_time", end); List analysisDTOS = this.baseMapper.deptAlarmDate(query); long dateNum = DateUtil.betweenDay(begin, end, true); for (int i = 0; i <= dateNum; i++) { @@ -414,23 +573,5 @@ } } - private void wrapInfo(RiskPointInfo riskPointInfo) { - if (riskPointInfo.getDeptId() != null) { - riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); - QueryWrapper query = new QueryWrapper<>(); - query.eq("risk_id", riskPointInfo.getId()); - List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); - riskPointInfo.setDeviceList(deviceList); - } - if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { - riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { - riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { - riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); - } - } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java index 8ac9dac..39a7c5c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java @@ -50,7 +50,7 @@ @Override public boolean save(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setCreateTime(new Date()); entity.setUpdateTime(new Date()); @@ -60,7 +60,7 @@ @Override public boolean updateById(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setUpdateTime(new Date()); return super.updateById(entity); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java index 48c9d89..88dc382 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java @@ -29,10 +29,7 @@ //设备状态更新 log.info("box online task start"); if (open) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.set("device_status",0); - updateWrapper.le("update_time",DateUtil.offsetMinute(new Date(),-5)); - boxDeviceService.update(updateWrapper); + boxDeviceService.updateStatus(); } log.info("box online task end"); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java deleted file mode 100644 index 8067843..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.casic.missiles.modular.device.util; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.core.datascope.ScopeEnums; - -import java.util.Set; - -public class StayPermissionUtil { - - /** - * 分组授权权限查询 - * - * @return - */ - public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); - } - - /** - * 数据权限查询 - * - * @param query - * @param columnId - * @param dataScope - * @param - * @return - */ - public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in(columnId, dataScope.getDeptIds()); - } - return query; - } - -} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 204e65a..4a3e0e0 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -116,6 +116,11 @@ com.casic + casic-admin-audit + ${admin.version} + + + com.casic casic-admin-support ${admin.version} @@ -140,6 +145,12 @@ oscarJDBC8 8.0 + + com.casic + casic-admin-tenant + ${admin.version} + + org.springframework.boot @@ -279,8 +290,7 @@ src/main/resources - - + /config/*/* /config/*-*.yml diff --git a/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java b/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java index 0028188..5ae5588 100644 --- a/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java +++ b/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java @@ -19,9 +19,9 @@ System.out.println("随机生成的公钥为:" + keyMap.get(RSAPublicKey)); System.out.println("随机生成的私钥为:" + keyMap.get(RSAPrivateKey)); - String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB"; - System.out.println( - encrypt(message,publicKey)); +// String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB"; +// System.out.println( +// encrypt(message,publicKey)); } } diff --git a/casic-web/src/main/java/com/casic/missiles/test/Test.java b/casic-web/src/main/java/com/casic/missiles/test/Test.java index 8ada97d..a7fe4f6 100644 --- a/casic-web/src/main/java/com/casic/missiles/test/Test.java +++ b/casic-web/src/main/java/com/casic/missiles/test/Test.java @@ -32,6 +32,9 @@ String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB"; String sec = RSAUtils.encrypt(str, pubKey); System.out.println(sec); + String priKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g="; + String s = RSAUtils.decrypt(sec,priKey); + System.out.println(s); } public static String calculateMD5(String filePath) { try { diff --git a/casic-web/src/main/resources/config/application-test42.yml b/casic-web/src/main/resources/config/application-test42.yml index de21991..39b99ab 100644 --- a/casic-web/src/main/resources/config/application-test42.yml +++ b/casic-web/src/main/resources/config/application-test42.yml @@ -5,7 +5,7 @@ datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.83.42:3306/casic-production-safety?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true -# url: mysql +# url: mysql casic203 username: root password: casic203 druid: @@ -13,7 +13,7 @@ min-idle: 20 web: resources: - static-locations: /opt/stay/data/tmp/ + static-locations: D://tmp// jms: pub-sub-domain: true # session: @@ -25,8 +25,12 @@ # serializer: org.springframework.data.redis.serializer.StringRedisSerializer # redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: + sysType: sm + box: #视频盒子定时清理离线配置信息 + open: true + deviceCorn: 0 */5 * * * * #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/webjars/**,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/ws/*,/gate/login,/sync/org,/sync/user,/sync/device/** + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/webjars/**,/ws/*,/gate/login,/sync/org,/sync/user,/sync/device/**,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/record/upload db: init: enable: false diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java index e1a6658..60d1e60 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvDataStateEnum.java @@ -8,8 +8,8 @@ */ public enum AvDataStateEnum { - TYPE0(0, "有效",0), - DEL(1, "无效",1); + TYPE0(0, "无效",0), + TYPE1(1, "有效",1); Integer code; String message; diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java index ddccd52..9f417c3 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/enums/AvStatusTypeEnum.java @@ -44,18 +44,7 @@ this.type = type; } - public static String valueOfs(Integer value) { - if (value == null) { - return ""; - } else { - for (AvStatusTypeEnum ms : AvStatusTypeEnum.values()) { - if (ms.getCode().equals(value)) { - return ms.getMessage(); - } - } - return ""; - } - } + public static AvStatusTypeEnum valueOfType(Integer value) { if (value == 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 ebc43a8..6757460 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 @@ -1,6 +1,7 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.application.service.AbstractUserService; @@ -8,10 +9,7 @@ import com.casic.missiles.modular.device.dto.DeviceRelationshipDTO; import com.casic.missiles.modular.device.dto.page.AvPageRequest; import com.casic.missiles.modular.device.dto.stream.StreamRequestDTO; -import com.casic.missiles.modular.device.enums.AvDataStateEnum; -import com.casic.missiles.modular.device.enums.AvPtzTypeEnum; -import com.casic.missiles.modular.device.enums.AvSecretLevelEnum; -import com.casic.missiles.modular.device.enums.AvStatusTypeEnum; +import com.casic.missiles.modular.device.enums.*; import com.casic.missiles.modular.device.model.BusDeviceInfo; import com.casic.missiles.modular.device.service.IAvSyncService; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; @@ -30,6 +28,7 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; + @Slf4j @Service public class AvSyncServiceImpl implements IAvSyncService { @@ -37,6 +36,8 @@ private String avUrl; @Value("${casic.video.av.token:-1}") private String avToken; + @Value("${casic.video.av.autoDept:false}") + private Boolean autoDept; @Resource private IBusDeviceInfoService deviceInfoService; @Resource @@ -52,32 +53,49 @@ AvPageRequest avPageRequest = new AvPageRequest(); avPageRequest.setPage(1); avPageRequest.setPaging(1); - try{ + try { //全量查询设备信息 List deviceDTOS = AvUtil.selectDevices(avUrl, token, avPageRequest); if (CollectionUtil.isNotEmpty(deviceDTOS)) { + //No.2 设备类型转换 for (AvDeviceDTO dcDeviceDTO : deviceDTOS) { BusDeviceInfo busDeviceInfo = this.convertDevice(dcDeviceDTO); - + //根据国标号读取设备组织信息 + if (autoDept) { + Long deptId = getDeptBySn(dcDeviceDTO.getSn()); + if (deptId != null) { + busDeviceInfo.setDeptId(deptId); + } + } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(BusDeviceInfo::getCameraIndexCode, dcDeviceDTO.getSn()); this.deviceInfoService.saveOrUpdate(busDeviceInfo, query); } + List deviceAllSns = deviceDTOS.stream().map(AvDeviceDTO::getSn).collect(Collectors.toList()); + List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.TYPE0.getCode().equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); - List deviceSns = deviceDTOS.stream().filter(dto -> AvDataStateEnum.DEL.equals(dto.getState())).map(AvDeviceDTO::getSn).collect(Collectors.toList()); + //删除不在全量同步接口中的设备信息 + LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); + delQuery.notIn(BusDeviceInfo::getCameraIndexCode, deviceAllSns); + if (CollectionUtil.isNotEmpty(deviceAllSns)) { + this.deviceInfoService.remove(delQuery); + } + //删除失效设备数据 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(BusDeviceInfo::getCameraIndexCode, deviceSns); if (CollectionUtil.isNotEmpty(deviceSns)) { + log.debug("执行无效数据处理:{}", deviceSns); this.deviceInfoService.remove(query); } - }else{ + } else { + log.error("device sync error"); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); this.deviceInfoService.update(updateWrapper); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.set("device_status", "0"); @@ -87,6 +105,21 @@ } /** + * 设备总数 + * + * @param sn + * @return + */ + private Long getDeptBySn(String sn) { + //11010881001110070000 + if (StrUtil.isNotEmpty(sn)) { + String result = sn.substring(2, 6); // 从索引2开始到索引5(包含) + return AvDeptEnum.valueOfCode(result).getDeptId(); + } + return null; + } + + /** * 流地址请求 * * @param streamRequestDTO @@ -121,7 +154,7 @@ query.eq(User::getSyncId, relationshipDTO.getUser_id()); List users = abstractUserService.list(query); - if (users != null&&users.size() > 0) { + if (users != null && users.size() > 0) { User user = users.get(0); //创建用户组 LambdaQueryWrapper groupQuery = new LambdaQueryWrapper<>(); @@ -145,7 +178,7 @@ sysGroupDeviceService.batchIncremental(sysUserGroup.getId(), list); } - }else{ + } else { log.error("loadUserDeviceRelationships is empty: {}", relationshipDTO.getUser_id()); } } diff --git a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java index 9575627..24ce510 100644 --- a/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java +++ b/casic-device-sync/casic-device-aview/src/main/java/com/casic/missiles/modular/device/util/AvUtil.java @@ -41,7 +41,7 @@ param.put("limit", "100000"); param.put("token", token); String res = AvHttpUtils.sendGet(baseUrl + AvUrlEnums.DEVICE.getUrl(), param, token, dcDefaultHttpHeaderHandler); - logger.info("selectDevices:{}", res); + logger.error("selectDevices:{}", res); if (StrUtil.isEmpty(res)) { logger.error("av device sync error!"); } diff --git a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java index 649127c..74f84d6 100644 --- a/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java +++ b/casic-device-sync/casic-device-wvp/src/main/java/com/casic/missiles/modular/util/WvpUtil.java @@ -77,10 +77,12 @@ //读取设备信息 for (WvpDeviceDTO wvpDeviceDTO : devices.getData().getList()) { //读取通道信息 - String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, "token", new WvpDefaultHttpHeaderHandler()); - MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { - }); - wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + String channelRes = HttpUtils.sendGet(baseUrl + String.format(channelUrl, wvpDeviceDTO.getDeviceId()), param, token, new WvpDefaultHttpHeaderHandler()); + if (StrUtil.isNotEmpty(channelRes)) { + MvpResponseDTO>> channels = JSON.parseObject(channelRes, new TypeReference>>>() { + }); + wvpDeviceDTO.setChannelDTOS(channels.getData().getList()); + } } return devices.getData().getList(); } @@ -97,7 +99,8 @@ WvpDefaultHttpHeaderHandler wvpDefaultHttpHeaderHandler = new WvpDefaultHttpHeaderHandler(); wvpDefaultHttpHeaderHandler.setJson(true); String res = HttpUtils.sendGet(baseUrl + uri, new HashMap<>(), token, wvpDefaultHttpHeaderHandler); - MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() {}); + MvpResponseDTO mvpRes = JSON.parseObject(res, new TypeReference>() { + }); return mvpRes; } diff --git a/casic-server-sync/pom.xml b/casic-server-sync/pom.xml index 7ea82c7..15450dc 100644 --- a/casic-server-sync/pom.xml +++ b/casic-server-sync/pom.xml @@ -24,6 +24,11 @@ provided + cn.hutool + hutool-all + ${hutool.version} + + com.casic casic-admin-core ${admin.version} @@ -93,6 +98,17 @@ ${export.version} + com.casic + casic-admin-support + ${admin.version} + + + com.casic + casic-server + ${pro.version} + + + org.springframework.boot spring-boot-starter-web ${boot.version} diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java index c178e36..3db42c4 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/GateController.java @@ -39,24 +39,24 @@ * @return 结果集 */ @GetMapping("/login") - public void resourceCode(HttpServletRequest request,String x, HttpServletResponse response) throws IOException { + public void resourceCode(HttpServletRequest request, String x, HttpServletResponse response) throws IOException { String noPage = getBaseWeb(); try { super.getSession().setAttribute(PermissionConstants.IS_APP, false); String dnName = request.getHeader("dnname"); log.info("dnName:{}", dnName); - String clientip = request.getHeader("clientip"); - if(StrUtil.isEmpty(dnName)){ - log.info("dnName:{}",dnName); + String clientIp = request.getHeader("clientip"); + if (StrUtil.isEmpty(dnName)) { + log.info("dnName:{}", dnName); response.sendRedirect(noPage); return; } String dn = new String(request.getHeader("dnname").getBytes("ISO8859-1"), "UTF-8"); - log.info("dn:{}",dn); + log.info("dn:{}", dn); String account = getValueByDn(dn, key1); - log.info("account:{}",account); + log.info("account:{}", account); //String account = x; //token自定义 CasicCustomToken token = new CasicCustomToken(account, "password"); @@ -75,11 +75,13 @@ AuthUser shiroUser = ShiroKit.getUser(); super.getSession().setAttribute("shiroUser", shiroUser); super.getSession().setAttribute("username", shiroUser.getAccount()); + //更新用户真是IP + shiroUser.setIpAddr(clientIp); super.getSession().setAttribute(PermissionConstants.SESSION_KEY, shiroUser.getId()); - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientip, shiroUser.getRoleTips())); + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), clientIp, shiroUser.getRoleTips())); ShiroKit.getSession().setAttribute("sessionFlag", true); String sid = ShiroKit.getSession().getId().toString(); - response.sendRedirect(webUrl+"?token=" + sid); + response.sendRedirect(webUrl + "?token=" + sid); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); @@ -87,11 +89,11 @@ } } - private String getBaseWeb(){ + private String getBaseWeb() { String[] parts = webUrl.split("#", 2); // 限制分割后的数组长度为2,避免将#号之后的内容也分割 if (parts.length > 0) { String beforeHash = parts[0]; // 获取#号之前的部分 - return beforeHash+"#/noPage"; + return beforeHash + "#/noPage"; } return ""; } @@ -102,9 +104,9 @@ int end = dn.indexOf(",", start); String tValue = dn.substring(start, end); return tValue; - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); - log.error("dnname error:{}",e.getMessage()); + log.error("dnname error:{}", e.getMessage()); return dn; } } diff --git a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java index b185f61..91bf511 100644 --- a/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java +++ b/casic-server-sync/src/main/java/com/casic/missiles/modular/device/controller/SyncController.java @@ -1,8 +1,6 @@ package com.casic.missiles.modular.device.controller; import com.casic.missiles.model.response.dto.ResponseDataDTO; -import com.casic.missiles.modular.device.model.MdmOrgDTO; -import com.casic.missiles.modular.device.model.MdmPerson; import com.casic.missiles.modular.device.model.base.UumBaseList; import com.casic.missiles.modular.device.service.ISyncService; import io.swagger.annotations.Api; @@ -11,8 +9,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; @Api(tags = "同步测试接口") @RestController diff --git a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java index 200ccae..05176ba 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/data/constants/DataConstants.java @@ -8,8 +8,12 @@ public static final String DICT_DEVICE_STATUS = "status"; public static final String DICT_DEVICE_TYPE = "deviceType"; public static final String DICT_SECRET_LEVEL_TYPE = "secretLevel"; + /** + * 危险源类型 + */ + public static final String dangerAssessmentType = "dangerAssessmentType"; - - public static final String NODE_TYPE_DEPT="1"; - public static final String NODE_TYPE_DEVICE="2"; + public static final String NODE_TYPE_DEPT = "1"; + public static final String NODE_TYPE_DEVICE = "2"; + public static final String NODE_TYPE_RISK = "2"; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java index a0f167f..1203d50 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/BusDeviceInfoController.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceDict; +import com.casic.missiles.modular.device.dictmap.DeviceQueryDict; import com.casic.missiles.modular.device.dto.BusDeviceImportDTO; import com.casic.missiles.modular.device.dto.BusGmDeviceExportDTO; import com.casic.missiles.modular.device.dto.IdDTO; @@ -104,7 +107,7 @@ return ResponseDataDTO.success(busDeviceInfoService.list(query)); } - @BussinessLog(value = "设备导入") + @BussinessLog(value = "设备数据导入") @ApiOperation(value = "设备导入") @PostMapping(value = "/import") public ResponseDataDTO importDevice(@RequestParam("file") MultipartFile file) throws IOException { @@ -125,18 +128,18 @@ @Value("${casic.sysType:sm}") private String sysType; - @BussinessLog(value = "设备导出") + @BussinessLog(value = "设备数据导出") @ApiOperation(value = "列表查询") @GetMapping(value = "/export") public void export(BusDeviceInfoVO busDeviceInfoVO) throws IOException { QueryWrapper query = busDeviceInfoVO.genQuery(); - DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); - AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in("dept_id", dataScope.getDeptIds()); - } - List infos = busDeviceInfoService.list(query); +// DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); +// AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); +// query.le("secret_level", user.getSecretLevel()); +// if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { +// query.in("dept_id", dataScope.getDeptIds()); +// } + List infos = busDeviceInfoService.selectBusDeviceInfoList(query); if (SysEnum.gm.getCode().equals(sysType)) { List dtos = BeanUtil.copyToList(infos, BusGmDeviceExportDTO.class); super.exportExcel(BusGmDeviceExportDTO.class, dtos, "设备列表导出"); @@ -145,18 +148,17 @@ } } - @BussinessLog(value = "设备分页查询", key = "busDeviceInfoVO") + @BussinessLog(value = "设备分页查询", key = "keyword,devType,deptName",dict = DeviceQueryDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(BusDeviceInfoVO busDeviceInfoVO) { Page page = PageFactory.defaultPage(); QueryWrapper query = busDeviceInfoVO.genQuery(); - page = busDeviceInfoService.page(page, query); - + List busDeviceInfoList = busDeviceInfoService.selectBusDeviceInfoPage(page, query); + page.setRecords(busDeviceInfoList); return ResponseDataDTO.success(super.packForBT(page)); } - - @BussinessLog(value = "设备新增操作") + @BussinessLog(value = "添加设备操作", key = "simpleName", dict = DeviceDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BusDeviceInfo busDeviceInfo) { @@ -167,18 +169,17 @@ busDeviceInfoService.save(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备修改操作") + @BussinessLog(value = "修改设备操作", key = "cameraIndexCode", dict = DeviceDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody BusDeviceInfo busDeviceInfo) { busDeviceInfo.setUpdateTime(new Date()); AesUtil.encryptDevice(busDeviceInfo); + LogObjectHolder.me().set(busDeviceInfoService.getById(busDeviceInfo.getId())); busDeviceInfoService.updateById(busDeviceInfo); return ResponseDataDTO.success(); } - - @BussinessLog(value = "设备删除操作") + @BussinessLog(value = "设备删除操作",key="id", dict = DeviceDict.class) @ApiOperation(value = "删除接口") @PostMapping(value = "/delete") public ResponseDataDTO delete(@RequestBody IdDTO delDTO) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java index 77ecc4f..ba9083f 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/controller/DeviceGroupInfoController.java @@ -6,11 +6,14 @@ import com.casic.missiles.core.common.annotion.BussinessLog; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; +import com.casic.missiles.model.log.LogObjectHolder; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dictmap.DeviceGroupDict; import com.casic.missiles.modular.device.dto.IdDTO; import com.casic.missiles.modular.device.dto.SysUserGroupDTO; import com.casic.missiles.modular.device.model.DeviceGroupInfo; import com.casic.missiles.modular.device.service.IDeviceGroupInfoService; +import com.casic.missiles.modular.system.service.ISysUserGroupService; import com.casic.missiles.modular.system.vo.SysUserGroupVO; import io.swagger.annotations.Api; @@ -35,8 +38,9 @@ private final IDeviceGroupInfoService deviceGroupInfoService; - public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService) { + public DeviceGroupInfoController(IDeviceGroupInfoService deviceGroupInfoService, ISysUserGroupService groupService) { this.deviceGroupInfoService = deviceGroupInfoService; + this.groupService = groupService; } public static Map tokenMap = new ConcurrentHashMap<>(); @@ -50,7 +54,7 @@ @Value("${casic.video.dc.pwd:-1}") private String dcPwd; - @BussinessLog(value = "设备分组管理分页查询") + @BussinessLog(value = "设备分组分页查询",key="groupName,startTime,endTime",dict= DeviceGroupDict.class) @ApiOperation(value = "分页查询") @GetMapping(value = "/listPage") public ResponseDataDTO> listPage(SysUserGroupVO deviceGroupInfoVO) { @@ -61,7 +65,7 @@ return ResponseDataDTO.success(super.packForBT(page)); } - @BussinessLog(value = "设备分组新增") + @BussinessLog(value = "添加设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -79,8 +83,8 @@ deviceGroupInfo.setCameraNum(0); } } - - @BussinessLog(value = "设备分组修改") + private final ISysUserGroupService groupService; + @BussinessLog(value = "修改设备分组",key="groupName,cameraIds,personIds",dict = DeviceGroupDict.class) @ApiOperation(value = "修改接口") @PostMapping(value = "/update") public ResponseDataDTO update(@RequestBody DeviceGroupInfo deviceGroupInfo) { @@ -90,7 +94,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组删除") + @BussinessLog(value = "设备分组删除",key="id",dict = DeviceGroupDict.class) @ApiOperation(value = "删除接口") @GetMapping(value = "/delete") public ResponseDataDTO delete(String id) { @@ -98,7 +102,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "设备分组批量删除") + @BussinessLog(value = "设备分组批量删除",key="id",dict = DeviceGroupDict.class) @ApiOperation("批量删除") @PostMapping("/batchDelete") public ResponseDataDTO batchDelete(@RequestBody IdForms ids) { 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 a7baa99..4b158e3 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 @@ -40,4 +40,6 @@ Integer selectAlarmNum(@Param("ew")QueryWrapper alarmQuery); List selectWarnObject(@Param("ew")QueryWrapper warnQuery); + + List selectBusDeviceInfoList(@Param("ew") QueryWrapper query); } 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 cebd58d..4c70e28 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 @@ -94,17 +94,29 @@ as bfFlag , a.create_time as createTime , - a.update_time as updateTime + a.update_time as updateTime,a.area,a.play_url as playUrl,a.camera_index_code as cameraIndexCode,a.location,a.nvr_manufacture as nvrManufacture,a.device_manufacture as deviceManufacture,a.nvr_index_code as nvrIndexCode - select - from bus_device_info a + from bus_device_info a left join sys_dept b on a.dept_id =b.id ${ew.sqlSegment} + ORDER BY a.create_time DESC + + + + diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java index c2425a8..313e62e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dictmap/DeviceDict.java @@ -11,14 +11,14 @@ put("keyword", "设备名称"); - put("name", "名字"); - put("birthday", "生日"); - put("sex", "性别"); - put("email", "电子邮件"); - put("phone", "电话"); - put("roleid", "角色名称"); - put("deptid", "部门名称"); - put("roleIds", "角色名称集合"); + put("cameraIndexCode", "设备国标号"); + put("monitorName", "设备名称"); + put("deviceIp", "设备IP"); + put("deviceStatus", "设备状态"); + put("secretLevel", "设备密级"); + put("deptId", "所属组织"); + put("area", "所属区域"); + put("description","备注"); } @Override diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java index f2ffaca..d3f99d6 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/dto/DeviceRecognitionDTO.java @@ -12,4 +12,8 @@ * 识别地址 */ private String recognitionUrl; + + private String mediaServerId; + private String recognitionGb; + private Long boxId; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java index df389e8..9041d79 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/BusDeviceInfo.java @@ -157,9 +157,12 @@ @TableField("play_url") private String playUrl; + @ExcelProperty("摄像头编码") @ApiModelProperty(value = "通道标识", dataType = "String") @TableField("camera_index_code") private String cameraIndexCode; + + @ExcelProperty("nvr设备编码") @ApiModelProperty(value = "nvr设备编码", dataType = "String") @TableField("nvr_index_code") private String nvrIndexCode; @@ -180,6 +183,18 @@ @TableField(exist = false) private String recognitionUrl; + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField(exist = false) + private String recognitionGb; + @ApiModelProperty(value = "mediaServerId", dataType = "String") + @TableField(exist = false) + private String mediaServerId; + @ApiModelProperty(value = "盒子ID", dataType = "String") + @TableField(exist = false) + private Long boxId; + + + @ApiModelProperty(value = "识别边界地址列表", dataType = "String") @TableField(exist = false) private List deviceBoundaryDTOS; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java index f93af25..37132c0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/model/SysGroupDevice.java @@ -37,6 +37,9 @@ @TableField("device_id") private Long deviceId; + @ApiModelProperty(value = "租户ID", dataType = "Long") + @TableField("tenant_id") + private String tenantId; @Override public String toString() { 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 b0baf9f..15bed60 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 @@ -30,7 +30,7 @@ * 设备 分页检索 */ List selectBusDeviceInfoPage(Page page, QueryWrapper query); - + List selectBusDeviceInfoList( QueryWrapper query); /** * 设备 数量检索 */ @@ -91,4 +91,10 @@ * @return */ List focusVideos(LambdaQueryWrapper query); + + /** + * 用户可见设备集合查询 + * @return + */ + List selectDeviceIds(); } 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 c9effed..b80a757 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 @@ -15,6 +15,7 @@ import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.data.dto.AreaDataDTO; import com.casic.missiles.modular.data.dto.TotalDataDTO; @@ -22,9 +23,12 @@ 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.model.SysGroupDevice; import com.casic.missiles.modular.device.service.IBusDeviceInfoService; +import com.casic.missiles.modular.device.service.ISysGroupDeviceService; import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; import com.casic.missiles.modular.device.util.AesUtil; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import com.casic.missiles.modular.enums.SysEnum; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; @@ -32,9 +36,11 @@ import com.casic.missiles.modular.system.service.IAreaService; import com.casic.missiles.modular.video.dto.DeviceDTO; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; @@ -61,7 +67,7 @@ @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") - private String normalRole; + private String normalAdminRole; @Value("${casic.sysType:sm}") private String sysType; @@ -83,7 +89,7 @@ QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("secret_level", user.getSecretLevel()); + pageQuery.le("secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); @@ -91,29 +97,89 @@ pageQuery.in("dept_id", dataScope.getDeptIds()); } + IPage infoIPage = super.page(page, pageQuery); infoIPage.getRecords().forEach(this::wrapInfo); return (E) infoIPage; } - private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; + /** + * 检索用户授权设备信息 + * + * @return + */ + @Override + public List selectDeviceIds() { + QueryWrapper query = new QueryWrapper<>(); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper newQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + List deviceInfos = this.baseMapper.selectList(newQuery); + if (CollectionUtil.isNotEmpty(deviceInfos)) { + return deviceInfos.stream().map(BusDeviceInfo::getId).collect(Collectors.toList()); } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return Collections.emptyList(); + } + + private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole, sysType); +// +// //指定管理角色可以看全部设备信息 +// if (SysEnum.sm.getCode().equals(sysType)) { +// if (roleTips.contains(adminRole) || roleTips.contains(normalAdminRole)) { +// return query; +// } +// } else { +// if (roleTips.contains(adminRole) && isRootTenant()) { +// return query; +// } +// } +// return query.inSql(column, "SELECT\n" + +// "device_id\n" + +// "FROM\n" + +// "\tsys_user_group a\n" + +// "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + +// "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + +// "\tWHERE b.user_id = " + userId + "\n" + +// "\tGROUP BY c.device_id"); } @Override public List selectBusDeviceInfoPage(Page page, QueryWrapper query) { - return this.baseMapper.selectBusDeviceInfoPage(page, query); + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoPage(page, query); + infoIPage.forEach(this::wrapInfo); + return infoIPage; + } + + @Override + public List selectBusDeviceInfoList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + QueryWrapper pageQuery = query((QueryWrapper) query, "a.id", user.getId(), user.getRoleTips()); + DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + pageQuery.in("a.dept_id", dataScope.getDeptIds()); + } + + if (!user.getRoleTips().contains(adminRole)) { + pageQuery.le("a.secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + List infoIPage = this.baseMapper.selectBusDeviceInfoList(query); + for (BusDeviceInfo busDeviceInfo : infoIPage) { + wrapInfo(busDeviceInfo); + } + return infoIPage; } @Override @@ -153,7 +219,7 @@ @Override public TotalDataDTO total(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { @@ -217,7 +283,7 @@ 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 "); + deptQuery.inSql(Dept::getId, "select dept_id from bus_device_info "); deptQuery.orderByAsc(Dept::getNum); List deptList = abstractPermissionContext.getDeptService().list(deptQuery); @@ -268,7 +334,7 @@ //判定只可查看以下密级 安全管理员除外 if (!user.getRoleTips().contains(adminRole)) { - deviceQuery.le("secret_level", user.getSecretLevel()); + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } deviceQuery.orderByAsc("monitor_name"); List deviceInfos = this.list(deviceQuery); @@ -313,15 +379,20 @@ deptDTO.setName(deviceInfo.getMonitorName()); deptDTO.setFullName(deviceInfo.getMonitorName()); try { - //检索识别流 + //检索识别流 配置信息 if (recognitionMap.containsKey(deviceInfo.getId())) { - deviceInfo.setRecognitionUrl(recognitionMap.get(deviceInfo.getId()).getRecognitionUrl()); + DeviceRecognitionDTO recognitionDTO = recognitionMap.get(deviceInfo.getId()); + deviceInfo.setRecognitionUrl(recognitionDTO.getRecognitionUrl()); + deviceInfo.setMediaServerId(recognitionDTO.getMediaServerId()); + deviceInfo.setRecognitionGb(recognitionDTO.getRecognitionGb()); + deviceInfo.setBoxId(recognitionDTO.getBoxId()); } //检索危险点设定框 // List deviceBoundaryDTOS = this.selectDeviceBoundaryList(deviceInfo.getId()); if (deviceBoundaryDTOMap.containsKey(deviceInfo.getId())) { deviceInfo.setDeviceBoundaryDTOS(deviceBoundaryDTOMap.get(deviceInfo.getId())); } + } catch (Exception e) { e.printStackTrace(); } @@ -329,20 +400,84 @@ } @Override + public boolean save(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.save(entity); + } + + @Lazy + @Resource + private ISysGroupDeviceService groupDeviceService; + + @Override + public boolean removeById(Serializable id) { + + List ids = new ArrayList<>(); + ids.add(id); + removeGroupDevice(ids); + + return super.removeById(id); + } + + private void removeGroupDevice(Collection idList) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysGroupDevice::getDeviceId, idList); + groupDeviceService.remove(query); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean removeByIds(Collection idList) { + removeGroupDevice(idList); + return super.removeByIds(idList); + } + + @Override + public boolean updateById(BusDeviceInfo entity) { + if (checkOne(entity)) { + throw new ServiceException(500, "设备国标号不可重复"); + } + return super.updateById(entity); + } + + private Boolean checkOne(BusDeviceInfo entity) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(BusDeviceInfo::getCameraIndexCode, entity.getCameraIndexCode()); + if (entity.getId() != null) { + query.ne(BusDeviceInfo::getId, entity.getId()); + } + Integer count = baseMapper.selectCount(query); + return count > 0; + } + + @Override public List addDeviceBatch(List results) { List dictList = dictService.findInDictByCode(DataConstants.DICT_DEVICE_TYPE); List secretLevels = dictService.findInDictByCode(DataConstants.DICT_SECRET_LEVEL_TYPE); Map secretTypes = secretLevels.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); + List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); Map dictTypes = dictList.stream().collect(Collectors.toMap(Dict::getName, (dict -> dict))); - List deptList = abstractPermissionContext.getDeptService().list(new QueryWrapper<>()); - Map deptMap = deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + //查询组织信息 + Map deptMap = new HashMap<>(); +// deptList.stream().collect(Collectors.toMap(Dept::getSimpleName, (dept -> dept))); + for (Dept dept : deptList) { + deptMap.put(dept.getSimpleName(), dept); + } List areaList = areaService.list(); Map areaMap = areaList.stream().collect(Collectors.toMap(Area::getId, area -> area)); Integer index = 1; List importDTOS = new ArrayList<>(); List errors = new ArrayList<>(); + //校验导入编码是否重复 + checkCameraIndexCode(results); + for (BusDeviceImportDTO result : results) { if (StrUtil.isNotEmpty(result.getMonitorName())) { if (!dictTypes.containsKey(result.getDeviceType())) { @@ -389,6 +524,7 @@ if (StrUtil.isEmpty(result.getCameraIndexCode())) { errors.add("第" + index + "行设备国标号不能为空!"); } + //校验设备国标号是否已存在 importDTOS.add(result); index++; } @@ -415,6 +551,20 @@ return errors; } + private void checkCameraIndexCode(List results) { + Set cameraIndexCodes = new HashSet<>(); + + for (int i = 0; i < results.size(); i++) { + BusDeviceImportDTO result = results.get(i); + String cameraIndexCode = result.getCameraIndexCode(); + if (StrUtil.isNotEmpty(cameraIndexCode)) { + if (!cameraIndexCodes.add(cameraIndexCode)) { + throw new ServiceException(500, "设备国标号不可重复(" + cameraIndexCode + ")"); + } + } + } + } + /** * 商米设备校验 @@ -452,7 +602,7 @@ query.in("dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); return this.baseMapper.searchStatusByArea(query); @@ -498,7 +648,7 @@ //2.检索启用预警对象 QueryWrapper warnQuery = new QueryWrapper<>(); warnQuery.eq("a.device_id", deviceInfo.getId()); - warnQuery.eq("a.is_use","1"); + warnQuery.eq("a.is_use", "1"); List warnObjectDTOS = this.baseMapper.selectWarnObject(warnQuery); String attention = ""; if (CollectionUtil.isNotEmpty(warnObjectDTOS)) { @@ -543,6 +693,7 @@ return videoDTOS; } + private List> getAreaData(QueryWrapper query) { DataScope dataScope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); //根据数据权限读取组织下用户信息 @@ -551,7 +702,7 @@ } query.select("AREA", "count(1) as TOTALNUM", "sum(case device_status when 1 then 1 else 0 end) as ONLINENUM"); AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("secret_level", user.getSecretLevel()); + query.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); query(query, "id", user.getId(), user.getRoleTips()); query.groupBy("AREA"); diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java index b2b70f4..92319ef 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceOnlineLogServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.modular.device.dao.DeviceOnlineLogMapper; import com.casic.missiles.modular.device.model.DeviceOnlineLog; import com.casic.missiles.modular.device.service.IDeviceOnlineLogService; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -30,7 +31,10 @@ private final AbstractPermissionContext abstractPermissionContext; @Value("${casic.video.admin.role:security_admin}") private String adminRole; - + @Value("${casic.video.normal.role:normalAdmin}") + private String normalAdminRole; + @Value("${casic.sysType:sm}") + private String sysType; public DeviceOnlineLogServiceImpl(AbstractPermissionContext abstractPermissionContext) { this.abstractPermissionContext = abstractPermissionContext; } @@ -49,23 +53,13 @@ query.in("b.dept_id", dataScope.getDeptIds()); } AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - query.le("b.secret_level", user.getSecretLevel()); + query.le("b.secret_level", StayPermissionUtil.getSecretLevel(user.getSecretLevel())); query(query, "b.id", user.getId(), user.getRoleTips()); return this.baseMapper.selectDeviceLog(query); } private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - if (roleTips.contains(adminRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalAdminRole,sysType); } } \ No newline at end of file diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java new file mode 100644 index 0000000..efe5d49 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java @@ -0,0 +1,96 @@ +package com.casic.missiles.modular.device.util; + +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.casic.missiles.core.application.context.factory.PermissionContextFactory; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.modular.enums.SysEnum; + +import java.util.Set; + +public class StayPermissionUtil { + + public static String getSecretLevel(String secretLevel) { + return (Convert.toInt(secretLevel)+1)+""; + } + + private static Boolean isRootTenant() { + AuthUser user = PermissionContextFactory.me().getAuthService().getLoginUser(); + if ("1".equals(user.getCurrTenantId()) || "1".equals(user.getTenantId())) { + return true; + } + return false; + } + + /** + * 分组授权权限查询 + * + * @return + */ + public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT device_id\n" + + "FROM\n" + + "\tsys_user_group a\n" + + "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.device_id"); + } + + + /** + * 风险点分组授权权限查询 + * + * @return + */ + public static QueryWrapper riskQuery(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole, String sysType) { + //指定管理角色可以看全部设备信息 + + if (SysEnum.sm.getCode().equals(sysType)) { + if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { + return query; + } + } else { + if (roleTips.contains(adminRole) && isRootTenant()) { + return query; + } + } + return query.inSql(column, "SELECT target_id\n" + + "FROM\n" + + "\tsys_user_risk_group a\n" + + "\tINNER JOIN sys_risk_group_rel_user b ON a.id = b.group_id\n" + + "\tINNER JOIN sys_risk_group_point c on a.id = c.group_id\n" + + "\tWHERE b.user_id = " + userId + "\n" + + "\tGROUP BY c.target_id"); + } + + /** + * 数据权限查询 + * + * @param query + * @param columnId + * @param dataScope + * @param + * @return + */ + public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { + query.in(columnId, dataScope.getDeptIds()); + } + return query; + } + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java index 826269c..f35c1cd 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/device/vo/BusDeviceInfoVO.java @@ -1,12 +1,6 @@ package com.casic.missiles.modular.device.vo; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.write.style.ColumnWidth; -import com.alibaba.excel.annotation.write.style.ContentRowHeight; -import com.alibaba.excel.annotation.write.style.ContentStyle; -import com.alibaba.excel.annotation.write.style.HeadRowHeight; -import com.alibaba.excel.enums.poi.BorderStyleEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.casic.missiles.modular.device.model.BusDeviceInfo; import io.swagger.annotations.ApiModelProperty; @@ -28,14 +22,25 @@ @ApiModelProperty(value = "设备类型", dataType = "String") private String devType; + @ApiModelProperty(value = "组织名称", dataType = "String") + private String deptName; + public QueryWrapper genQuery() { QueryWrapper query = new QueryWrapper<>(); + if (StrUtil.isNotEmpty(keyword)) { - query.like("monitor_name", keyword); + query.like("a.monitor_name", keyword); } + if (StrUtil.isNotEmpty(devType)) { - query.eq("device_type", devType); + query.eq("a.device_type", devType); } + + if (StrUtil.isNotEmpty(deptName)) { + query.like("b.simple_name", deptName); + } + +// query.orderByDesc("a.create_time"); return query; } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java index 7190068..9a05b0b 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AlarmRecordController.java @@ -62,13 +62,7 @@ return ResponseDataDTO.success(); } - @BussinessLog(value = "告警记录上报接口") - @ApiOperation(value = "告警记录上报接口") - @PostMapping(value = "/upload") - public ResponseDataDTO upload(@RequestBody AlarmRecordDTO alarmRecord) { - alarmRecordService.upload(alarmRecord); - return ResponseDataDTO.success(); - } + @BussinessLog(value = "告警记录修改") @ApiOperation(value = "修改接口", hidden = true) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java index 08017e7..ae91799 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/AnalysisStatisticsController.java @@ -60,7 +60,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerScopeCategory(query); return ResponseDataDTO.success(dangerCategory); } @@ -69,10 +69,10 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); @@ -82,10 +82,10 @@ @ApiOperation(value = "单位隐患分布") @GetMapping(value = "/deptDanger") public ResponseDataDTO list() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.a.dept_id", scope.getDeptIds()); } AreaDangerDTO areaDangerDTO = riskPointInfoService.deptDangerDTO(query); return ResponseDataDTO.success(areaDangerDTO); @@ -96,14 +96,18 @@ @GetMapping(value = "/dept/record") public ResponseDataDTO deptRecord() { QueryWrapper query = new QueryWrapper(); + //计算近一个月 Date lastMonth = DateUtil.offsetMonth(new Date(), -1); query.ge("a.alarm_time", lastMonth); + DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in("dept_id", scope.getDeptIds()); } + List areaNumDTOS = alarmRecordService.deptRecord(query); + return ResponseDataDTO.success(areaNumDTOS); } @@ -114,7 +118,7 @@ QueryWrapper query = new QueryWrapper(); // DataScope scope = authService.getLoginUserDataScope(); -// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { +// if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { // query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); // } DeptVideoNumDTO videoNumDTO = riskPointInfoService.deptAlarmDate(query,beginDate,endDate); @@ -127,7 +131,7 @@ public ResponseDataDTO videoPoint() { LambdaQueryWrapper query = new LambdaQueryWrapper(); DataScope scope = authService.getLoginUserDataScope(); - if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums())) { + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); } List areaNumDTOS = riskPointInfoService.videoPoint(query); 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 8027fca..e352abb 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,6 +2,7 @@ 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; @@ -85,7 +86,7 @@ @ApiOperation(value = "隐患分类查询") @GetMapping(value = "/dangerCategory") public ResponseDataDTO dangerCategory() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); DangerCategoryDTO dangerCategory = riskPointInfoService.dangerCategory(query); return ResponseDataDTO.success(dangerCategory); @@ -140,7 +141,7 @@ @ApiOperation(value = "区域隐患分布") @GetMapping(value = "/areaDanger") public ResponseDataDTO areaDanger() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + QueryWrapper query = new QueryWrapper(); //List riskPointInfos = riskPointInfoService.deptDangerList(query); AreaDangerDTO areaDangerDTO = riskPointInfoService.areaDangerList(query); return ResponseDataDTO.success(areaDangerDTO); 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 04e22d0..665e94a 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 @@ -1,5 +1,6 @@ package com.casic.missiles.modular.device.controller; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.controller.BaseController; @@ -14,7 +15,9 @@ 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.ApiModelProperty; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -73,13 +76,27 @@ page.setRecords(list); return ResponseDataDTO.success(super.packForBT(page)); } + @Value("${casic.box.serverPublicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB}") + private String serverPublicKey; + @Value("${casic.box.serverPrivateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g=}") + private String serverPrivateKey; + @Value("${casic.box.clientPublicKey:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB}") + private String clientPublicKey; + @Value("${casic.box.clientPrivateKey:1dRFhDCG1Mstd7AMnJxT4fUNbjU9Lkslc6Jl1tiK3QlmtwJA2TYjWy1SIt/Ges579bBxU0jxQQKBgQCkqY5iliRaR5K1BEL3msWu4iFCyE5MmbTJgCcpU7I4KBrDbQnefpxkBzuitFUIE+htVE+VucJSbnXNfn/lrFP7E/kdUL2X2pYRCZX6B9RFhZc0xQKlW0zy9feX4oPDfKO8qB3JY6wuYE9eoHHozEf51auDxs2LBjm6tAVePw8lbQKBgDmIf6UHGgtx12WIs7qSwfe8K+zNvgQgelzCoraZtkmOdE8LyKoC+SySL1NinJMnQQ8g0rD1U78bGoAKk0LUxB0z6nrbKq6WuYZglrD86AdyP4NgFqFAq9cTZs7UQB+MuluInLsA+MDBq/l1xtYwqgD05n+jAuhKWvivRZO+hGmBAoGBAK+NAcgWbQn+wKsAWb21oS6XkaI4hOax9vCmEE4Z+d5BBBgDPrHrEWh6BhzvPO6I3yXTbZ8agsJm2gNKgHma1hC4RpZgnnMfln91c5ZBfY4M7OD4p+7vSzTq26JQrex8+kfymBB/lYYhmUCyQzAWxsnus3CiV0biWJAR2T68H0oR}") + private String clientPrivateKey; @ApiOperation(value = "新增接口") @PostMapping(value = "/add") public ResponseDataDTO add(@RequestBody BoxDevice boxDevice) { boxDevice.setUpdateTime(new Date()); boxDevice.setCreateTime(new Date()); + + boxDevice.setServerPublicKey(serverPublicKey); + boxDevice.setServerPrivateKey(serverPrivateKey); + + boxDevice.setClientPublicKey(clientPublicKey); + boxDevice.setClientPrivateKey(clientPrivateKey); boxDeviceService.save(boxDevice); return ResponseDataDTO.success(); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java index adab9dc..d2a053a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/controller/BoxDeviceRelationController.java @@ -8,6 +8,7 @@ import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.model.form.IdForms; import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; @@ -59,6 +60,14 @@ boxDeviceRelationService.save(boxDeviceRelation); return ResponseDataDTO.success(); } + @BussinessLog(value = "识别流状态更新") + @ApiOperation(value = "识别流状态更新") + @PostMapping(value = "/stream/flag/update") + public ResponseDataDTO recognitionStreamFlag(@RequestBody RecognitionStreamDTO streamDTO) { + boxDeviceRelationService.updateRecognitionStreamFlag(streamDTO); + return ResponseDataDTO.success(); + } + @BussinessLog(value = "监控点位修改") @ApiOperation(value = "修改接口") 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 b4a999e..cbe44f6 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 @@ -10,12 +10,14 @@ import com.casic.missiles.modular.auth.dto.DeviceLoginForm; import com.casic.missiles.modular.auth.util.ICacheUtil; import com.casic.missiles.modular.auth.util.JwtUtil; +import com.casic.missiles.modular.device.dto.AlarmRecordDTO; import com.casic.missiles.modular.device.model.BoxDevice; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.service.*; import com.casic.missiles.modular.device.vo.BoxDeviceRelationVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -24,8 +26,8 @@ import java.io.FileInputStream; import java.security.MessageDigest; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; +@Slf4j @Api(tags = "设备同步接口") @RestController @RequestMapping("/sync/device") @@ -53,16 +55,20 @@ public ResponseData login(@RequestBody DeviceLoginForm deviceLoginForm, HttpSession session) { return deviceAuthService.deviceLogin(deviceLoginForm, session); } - + private ResponseDataDTO createAuthError(){ + ResponseDataDTO responseDataDTO = ResponseDataDTO.error("未获取到有效登录token"); + responseDataDTO.setCode(401); + return responseDataDTO; + } @BussinessLog(value = "盒子关联信息查询") @ApiOperation(value = "盒子关联信息查询") @GetMapping(value = "/deviceList") public ResponseDataDTO> list(BoxDeviceRelationVO boxDeviceRelationVO) { - DeviceLoginForm deviceLoginForm = validToken(); + DeviceLoginForm deviceLoginForm = validToken(); boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } boxDeviceRelationVO.setCode(deviceLoginForm.getCode()); @@ -83,7 +89,7 @@ DeviceLoginForm deviceLoginForm = validToken(); if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + return createAuthError(); } if (StrUtil.isEmpty(code)) { return ResponseDataDTO.error("设备编码不能为空"); @@ -96,6 +102,7 @@ return ResponseDataDTO.success(boxDevice); } + private void clearBoxDevice(BoxDevice boxDevice) { boxDevice.setClientPrivateKey(null); boxDevice.setClientPublicKey(null); @@ -113,9 +120,10 @@ @ResponseBody public ResponseDataDTO heart(String code, String version) { DeviceLoginForm deviceLoginForm = validToken(); - if (deviceLoginForm == null) { - return ResponseDataDTO.error("未获取到有效登录token"); + if (deviceLoginForm == null) { + return createAuthError(); } + log.debug("box device heart:{}", code); deviceAuthService.reloadStatus(deviceLoginForm.getCode(), version); return ResponseDataDTO.success(); } 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 78c3034..bd1681f 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 @@ -46,14 +46,14 @@ * @param query * @return */ - List areaDangerList(@Param("ew")LambdaQueryWrapper query); - + List areaDangerList(@Param("ew") QueryWrapper query); + List areaDangerScopeList(@Param("ew") QueryWrapper query); /** * 危险源分类统计 * @param query 检索条件 * @return */ - List dangerCategory(@Param("ew")LambdaQueryWrapper query); + List dangerCategory(@Param("ew")QueryWrapper query); /** * 区域点位接入数 @@ -74,10 +74,12 @@ * @param dictQuery 检索条件 * @return */ - List riskNumByArea(@Param("ew")LambdaQueryWrapper dictQuery); + List riskNumByArea(@Param("ew")QueryWrapper dictQuery); - List deptDangerDTOList(@Param("ew")LambdaQueryWrapper query); - List riskNumByDept(@Param("ew")LambdaQueryWrapper dictQuery); + List deptDangerDTOList(@Param("ew")QueryWrapper query); + List riskNumByDept(@Param("ew")QueryWrapper 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 1d259df..29f1697 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 @@ -47,7 +47,7 @@ ,b.type_name as recognitionTypeName,c.model_name as algoModelName ,d.scene_name as sceneName,e.monitor_name as deviceName,f.area_name as areaName - ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext + ,g.SIMPLE_NAME as deptName,a.alarm_context as alarmContext,e.camera_index_code as cameraIndexCode,e.nvr_index_code as nvrIndexCode from alarm_record a inner join bus_device_info e on a.device_id = e.id inner join sys_area f on e.area = f.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml index 7e27e51..dc46f93 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/BoxDeviceRelationMapper.xml @@ -41,6 +41,7 @@ b.monitor_name as deviceName, c.id as deptId, c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode + ,a.recognition_stream_flag as recognitionStreamFlag,a.recognition_gb as recognitionGb,a.media_server_id as mediaServerId from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id @@ -58,7 +59,7 @@ b.id as deviceId, b.monitor_name as deviceName, c.id as deptId, - c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code + c.SIMPLE_NAME as deptName,b.camera_index_code as deviceNo,b.camera_index_code as cameraIndexCode,b.nvr_index_code as nvrIndexCode,d.code,a.recognition_stream_flag as recognitionStreamFlag from bus_device_info b left join box_device_relation a on b.id = a.device_id left join box_device d on a.box_id = d.id diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml index 8771127..aee107e 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dao/mapping/RiskPointInfoMapper.xml @@ -92,6 +92,7 @@ ${ew.sqlSegment} + order by a.create_time desc,id desc + + diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java index 0765b84..8a6af0a 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/dto/CommandDTO.java @@ -9,4 +9,9 @@ private String command; @ApiModelProperty(value = "盒子ID", dataType = "String",required = true) private Long boxId; + + @ApiModelProperty(value = "盒子设备流开启标识", dataType = "String",required = true) + private String flag; + @ApiModelProperty(value = "摄像头设备标识", dataType = "String",required = true) + private String deviceNo; } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java index 147c136..f3f1e91 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/AlarmRecord.java @@ -91,7 +91,10 @@ @ApiModelProperty(value = "告警图片(base64 格式)", dataType = "String") @TableField(exist = false) private String picBase64; - + @TableField(exist = false) + private String cameraIndexCode; + @TableField(exist = false) + private String nvrIndexCode; @Override public String toString() { return "AlarmRecord{" diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java index 7f9bc9b..24f5f00 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/BoxDeviceRelation.java @@ -62,6 +62,19 @@ @TableField("recognition_url") private String recognitionUrl; + @ApiModelProperty(value = "流媒体ID", dataType = "String") + @TableField("media_server_id") + private String mediaServerId; + + @ApiModelProperty(value = "识别流国标号", dataType = "String") + @TableField("recognition_gb") + private String recognitionGb; + + @ApiModelProperty(value = "识别流推流开关(0 关闭 1 开启)", dataType = "String") + @TableField("recognition_stream_flag") + private String recognitionStreamFlag; + + @ApiModelProperty(value = "识别边界", dataType = "String") @TableField("boundary") private String boundary; diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java index 80093b3..c80c1d9 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/model/RiskPointInfo.java @@ -102,7 +102,7 @@ @TableField("substances_quantities") private String substancesQuantities; - @ApiModelProperty(value = "'类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") + @ApiModelProperty(value = "类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序)", dataType = "String") @TableField("risk_type") private Integer riskType; @@ -219,7 +219,8 @@ @ApiModelProperty(value = "事故类型(危险作业工序)") @TableField("accident_type") private String accidentType; - + @TableField("secret_level") + private String secretLevel; @TableField(exist = false) private String gradeName; @TableField(exist = false) diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java index 843d1dc..c5489de 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceRelationService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import java.util.List; @@ -31,4 +32,10 @@ * @return */ List selectBoxDeviceModelRelationList(QueryWrapper query); + + /** + * 盒子关联设备视频分析流推流标志更新 + * @param streamDTO + */ + void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java index 0158766..ecba8c1 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IBoxDeviceService.java @@ -46,4 +46,14 @@ * @param ids */ void updatePath(BoxIdForms ids); + + void updateStatus(); + + /** + * 更新设备状态 + * @param code 盒子编码 + * @param status 盒子状态 0 离线 1 在线 + */ + void updateBoxStatus(String code, String status); + void reloadStatus(String code, String version); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java index 4d17226..b4604ce 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/IRiskPointInfoService.java @@ -11,6 +11,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptVideoNumDTO; import com.casic.missiles.modular.device.model.AlarmRecord; import com.casic.missiles.modular.device.model.RiskPointInfo; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import java.util.List; @@ -56,15 +57,15 @@ * @param query 检索条件 * @return */ - AreaDangerDTO areaDangerList(LambdaQueryWrapper query); - + AreaDangerDTO areaDangerList(QueryWrapper query); + AreaDangerDTO areaDangerScopeList(QueryWrapper query); /** * 危险源分类 * * @param query 检索条件 * @return */ - DangerCategoryDTO dangerCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerCategory(QueryWrapper query); List videoPoint(LambdaQueryWrapper query); @@ -82,9 +83,9 @@ * @param query 检索条件 * @return */ - DeptVideoNumDTO deptAlarmDate(QueryWrapper query,String beginDate,String endDate); + DeptVideoNumDTO deptAlarmDate(QueryWrapper query, String beginDate, String endDate); - DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query); + DangerCategoryDTO dangerScopeCategory(QueryWrapper query); /** * 单位隐患分布统计 @@ -92,7 +93,14 @@ * @param query * @return */ - AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query); + AreaDangerDTO deptDangerDTO(QueryWrapper query); + + /** + * 危险点树结构 + * groupType 类型 + * @return + */ + List tree(String groupType); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java index 970b334..b17e8e4 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/AlarmRecordServiceImpl.java @@ -16,6 +16,7 @@ import com.casic.missiles.modular.device.dto.analysis.DeptRecordDTO; import com.casic.missiles.modular.device.model.*; import com.casic.missiles.modular.device.service.*; +import com.casic.missiles.modular.device.util.StayPermissionUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -79,10 +80,6 @@ LambdaQueryWrapper modelQuery = new LambdaQueryWrapper<>(); modelQuery.eq(AlgoModel::getCode, alarmRecord.getAlgoModelCode()); algoModels = modelService.list(modelQuery); - - LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); - modelQuery.eq(AlgoModel::getCode, alarmRecord.getRecognitionTypeCode()); - modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); } List scenes = new ArrayList<>(); @@ -97,6 +94,10 @@ } if (CollectionUtil.isNotEmpty(algoModels)) { + LambdaQueryWrapper modelRecognitionQuery = new LambdaQueryWrapper<>(); + modelRecognitionQuery.eq(ModelRecognitionType::getTypeCode, alarmRecord.getRecognitionTypeCode()); + modelRecognitionQuery.eq(ModelRecognitionType::getModelId, algoModels.get(0).getId()); + modelRecognitionTypes = modelRecognitionTypeService.list(modelRecognitionQuery); if (CollectionUtil.isEmpty(modelRecognitionTypes)) { throw new ServiceException(500, "识别类型编码不能为空"); } @@ -123,9 +124,9 @@ public List deptRecord(QueryWrapper query) { AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); - QueryWrapper pageQuery = query((QueryWrapper) query, "id", user.getId(), user.getRoleTips()); + QueryWrapper pageQuery = query((QueryWrapper) query, "b.id", user.getId(), user.getRoleTips()); if (!user.getRoleTips().contains(adminRole)) { - pageQuery.le("b.secret_level", user.getSecretLevel()); + pageQuery.le("b.secret_level",StayPermissionUtil.getSecretLevel( user.getSecretLevel())); } return this.baseMapper.deptRecord(query); } @@ -133,22 +134,11 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; - + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query,column,userId,roleTips,adminRole,normalRole,sysType); } @Override diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java index fca71a6..4dc7556 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceRelationServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.context.AbstractPermissionContext; @@ -9,6 +10,7 @@ import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.BoxDeviceRelationMapper; +import com.casic.missiles.modular.device.dto.RecognitionStreamDTO; import com.casic.missiles.modular.device.model.AlgoModel; import com.casic.missiles.modular.device.model.BoxDeviceRelation; import com.casic.missiles.modular.device.model.DeviceModelRelation; @@ -50,12 +52,14 @@ private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; @Transactional @Override public List selectBoxDeviceRelationPage(Page page, QueryWrapper query) { AuthUser user = permissionContext.getAuthService().getLoginUser(); - StayPermissionUtil.query(query, "a.device_id", user.getId(), user.getRoleTips(), adminRole, normalRole); + StayPermissionUtil.query(query, "b.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); StayPermissionUtil.queryScope(query, "b.dept_id", permissionContext.getAuthService().getLoginUserDataScope()); List list = this.baseMapper.selectBoxDeviceRelationPage(page, query); list.forEach(this::wrapInfo); @@ -77,20 +81,22 @@ for (BoxDeviceRelation boxDeviceRelation : list) { List algoModels = new ArrayList<>(); - Map modelMap = new HashMap<>(); + Map modelMap = new HashMap<>(); if (CollectionUtil.isNotEmpty(boxDeviceRelation.getDeviceModelRelations())) { - //如果支持配置多个算法则需要调整 + //支持配置多个算法调整 for (DeviceModelRelation deviceModelRelation : boxDeviceRelation.getDeviceModelRelations()) { AlgoModel model = null; - if (modelMap.containsKey(deviceModelRelation.getAlgoModelId())) { - model = modelMap.get(deviceModelRelation.getAlgoModelId()); + String modelRecognitionType = deviceModelRelation.getAlgoModelId()+""; + //此处需判断 + if (modelMap.containsKey(modelRecognitionType)) { + model = modelMap.get(modelRecognitionType); model.getSubObjects().add(deviceModelRelation); } else { model = new AlgoModel(); - modelMap.put(deviceModelRelation.getAlgoModelId(), model); + modelMap.put(modelRecognitionType, model); model.setCode(deviceModelRelation.getCode()); model.setId(deviceModelRelation.getAlgoModelId()); model.setPath(deviceModelRelation.getPath()); @@ -112,6 +118,14 @@ return list; } + @Override + public void updateRecognitionStreamFlag(RecognitionStreamDTO streamDTO) { + LambdaUpdateWrapper update = new LambdaUpdateWrapper<>(); + update.set(BoxDeviceRelation::getRecognitionStreamFlag, streamDTO.getRecognitionStreamFlag()); + update.eq(BoxDeviceRelation::getId, streamDTO.getId()); + this.update(update); + } + void wrapInfo(BoxDeviceRelation boxDeviceRelation) { boxDeviceRelation.setDeviceStatusName(dictService.getDictNameByCode(DataConstants.DICT_DEVICE_STATUS, boxDeviceRelation.getDeviceStatus() + "")); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java index 6e91b47..99fc058 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/BoxDeviceServiceImpl.java @@ -1,9 +1,11 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.core.application.service.AbstractDictService; @@ -16,6 +18,7 @@ import org.springframework.stereotype.Service; import java.security.NoSuchAlgorithmException; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -124,6 +127,31 @@ } } + @Override + public void updateStatus() { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("device_status", 0); + updateWrapper.le("update_time", DateUtil.offsetMinute(new Date(), -5)); + this.update(updateWrapper); + } + @Override + public void updateBoxStatus(String code, String status) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", status); + this.update(updateWrapper); + } + + @Override + public void reloadStatus(String code, String version) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("code", code); + updateWrapper.set("device_status", 1); + updateWrapper.set("update_time", new Date()); + updateWrapper.set("version", version); + this.update(updateWrapper); + } + private boolean isValidCode(BoxDevice entity) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if (entity.getId() != null) { diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java index 3490cc2..a8f0c45 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/DeviceAuthServiceImpl.java @@ -1,7 +1,6 @@ package com.casic.missiles.modular.device.service.impl; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.casic.missiles.core.util.RSAUtils; import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.model.response.ResponseData; @@ -10,15 +9,16 @@ import com.casic.missiles.modular.auth.util.JwtUtil; import com.casic.missiles.modular.device.dto.CommandDTO; import com.casic.missiles.modular.device.model.BoxDevice; +import com.casic.missiles.modular.device.service.IBoxDeviceRelationService; import com.casic.missiles.modular.device.service.IBoxDeviceService; import com.casic.missiles.modular.device.service.IDeviceAuthService; import com.casic.missiles.modular.system.handler.DefaultHttpHeaderHandler; import com.casic.missiles.modular.system.utils.HttpUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.servlet.http.HttpSession; -import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -27,9 +27,12 @@ @Component public class DeviceAuthServiceImpl implements IDeviceAuthService { private final IBoxDeviceService boxDeviceService; + private final IBoxDeviceRelationService boxDeviceRelationService; private static ConcurrentHashMap deviceVersionMap = new ConcurrentHashMap<>(); - public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService) { + + public DeviceAuthServiceImpl(IBoxDeviceService boxDeviceService, @Lazy IBoxDeviceRelationService boxDeviceRelationService) { this.boxDeviceService = boxDeviceService; + this.boxDeviceRelationService = boxDeviceRelationService; } /** @@ -77,45 +80,57 @@ * @param code 盒子编码 */ @Override - public void reloadStatus(String code,String version) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("code", code); - updateWrapper.set("device_status", 1); - updateWrapper.set("update_time", new Date()); - updateWrapper.set("version", version); - boxDeviceService.update(updateWrapper); + public void reloadStatus(String code, String version) { + boxDeviceService.reloadStatus(code, version); } @Override public void sendCommand(CommandDTO commandDTO) { + BoxDevice device = boxDeviceService.getById(commandDTO.getBoxId()); - if (device == null || 0 == device.getDeviceStatus()) { - throw new ServiceException(500, "设备不存在或已离线!"); - } +// if (device == null || 0 == device.getDeviceStatus()) { +// throw new ServiceException(500, "设备不存在或已离线!"); +// } if (StrUtil.isEmpty(device.getClientPublicKey())) { throw new ServiceException(500, "无秘钥,请联系管理员!"); } //生成加密指令 String command = commandDTO.getCommand() + "_" + System.currentTimeMillis(); + try { String str = RSAUtils.encrypt(command, device.getClientPublicKey()); if (StrUtil.isEmpty(device.getIp())) { throw new ServiceException(500, "设备IP不存在,请设置"); } - String url = "http://" + device.getIp() + "/command/test"; + + String url = "http://" + device.getIp() + "/command"; DefaultHttpHeaderHandler httpHeaderHandler = new DefaultHttpHeaderHandler(); httpHeaderHandler.setJson(true); httpHeaderHandler.setGetError(true); Map params = new HashMap<>(); params.put("secret", str); + + params.put("flag", commandDTO.getFlag()); + params.put("deviceNo", commandDTO.getDeviceNo()); String res = HttpUtils.sendPost(url, params, "", httpHeaderHandler); + log.info(res); - if(StrUtil.isEmpty(res)){ + + //重启时修改状态为离线 + if (StrUtil.isEmpty(res)) { throw new ServiceException(500, "调用异常,请联系管理员!"); + } else { + if ("restart".equals(commandDTO.getCommand())) { + //重启则设置设备状态为离线 + boxDeviceService.updateBoxStatus(device.getCode(), "0"); + } else if ("stream".equals(commandDTO.getCommand())) { + //发起开流指令 则更新状态 + //boxDeviceRelationService.updateRecognitionStreamFlag(); + } } } catch (Exception e) { - throw new ServiceException(500, "加密异常,请联系管理员!"); + throw new ServiceException(500, "盒子访问异常,请联系管理员!"); } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java index 4ef41a4..788b599 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/RiskPointInfoServiceImpl.java @@ -14,7 +14,10 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.datascope.DataScope; import com.casic.missiles.core.datascope.ScopeEnums; +import com.casic.missiles.core.model.auth.AuthUser; +import com.casic.missiles.model.exception.ServiceException; import com.casic.missiles.modular.constant.AnalysisConstants; +import com.casic.missiles.modular.data.constants.DataConstants; import com.casic.missiles.modular.device.dao.RiskPointInfoMapper; import com.casic.missiles.modular.device.dto.RiskPointDTO; import com.casic.missiles.modular.device.dto.analysis.*; @@ -23,6 +26,9 @@ import com.casic.missiles.modular.device.service.IHazardClassificationInfoService; import com.casic.missiles.modular.device.service.IRiskPointInfoService; import com.casic.missiles.modular.device.service.IRiskRelDeviceService; +import com.casic.missiles.modular.device.tree.DeptDefaultTreeBuildFactory; +import com.casic.missiles.modular.device.util.StayPermissionUtil; +import com.casic.missiles.modular.group.vo.RiskGroupDeptDTO; import com.casic.missiles.modular.system.model.Area; import com.casic.missiles.modular.system.model.Dept; import com.casic.missiles.modular.system.model.Dict; @@ -34,6 +40,8 @@ import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.modular.data.constants.DataConstants.NODE_TYPE_DEPT; + /** *

@@ -66,6 +74,8 @@ @Transactional(rollbackFor = Exception.class) @Override public List selectRiskPointInfoPage(Page page, QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List riskPointInfos = this.baseMapper.selectRiskPointInfoPage(page, query); riskPointInfos.forEach(this::wrapInfo); return riskPointInfos; @@ -113,6 +123,9 @@ } result.setDeviceList(deviceList); } + if (StrUtil.isEmpty(result.getSecretLevel())) { + result.setSecretLevel("0"); + } importDTOS.add(result); index++; @@ -146,6 +159,26 @@ return riskPointDTOS; } + private void wrapInfo(RiskPointInfo riskPointInfo) { + if (riskPointInfo.getDeptId() != null) { + riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); + + QueryWrapper query = new QueryWrapper<>(); + query.eq("risk_id", riskPointInfo.getId()); + List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); + riskPointInfo.setDeviceList(deviceList); + } + if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { + riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { + riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); + } + if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { + riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); + } + } + public void wrapperDTOS(List riskPointDTOS) { for (RiskPointDTO riskPointDTO : riskPointDTOS) { @@ -164,8 +197,8 @@ //重大危险源 case 2: riskPointDTO.setPlaceName(riskPointDTO.getRiskName()); - String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); - riskPointDTO.setGrade(hazardLevel); +// String hazardLevel = dictService.getDictNameByCode("dangerPointGrade", riskPointDTO.getHazardLevel() + ""); + riskPointDTO.setGrade(riskPointDTO.getHazardLevel()); break; //危险化学品场所 case 3: @@ -185,6 +218,30 @@ } } + private String getRiskName(RiskPointInfo riskPointInfo) { + String riskName = riskPointInfo.getRiskName(); + switch (riskPointInfo.getRiskType()) { + //危险点 + case 1: + //重大危险源 + case 2: + break; + //危险化学品场所 + case 3: + riskName = riskPointInfo.getHazardousChemicalSite(); + break; + //危险作业 + case 4: + riskName = riskPointInfo.getHazardousWork(); + break; + //危险作业工序 + case 5: + riskName = riskPointInfo.getWorkProcedure(); + break; + } + return riskName; + } + @Override public List deptDangerDTOPage(LambdaQueryWrapper query, Page page) { List riskPointInfos = baseMapper.deptDangerPage(query, page); @@ -203,8 +260,12 @@ areaDangerDTO.setYData(chartValueList); if (CollectionUtil.isNotEmpty(areaAnalysisDTOS)) { for (AreaAnalysisDTO areaAnalysisDTO : areaAnalysisDTOS) { - LambdaQueryWrapper dictQuery = new LambdaQueryWrapper<>(); - dictQuery.eq(isDept ? RiskPointInfo::getDeptId : RiskPointInfo::getArea, areaAnalysisDTO.getAreaId()); + QueryWrapper dictQuery = new QueryWrapper<>(); + dictQuery.eq(isDept ? "a.dept_id" : "a.area", areaAnalysisDTO.getAreaId()); + + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(dictQuery, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + List dictAnalysisList = isDept ? baseMapper.riskNumByDept(dictQuery) : baseMapper.riskNumByArea(dictQuery); Map map = dictAnalysisList.stream().collect(Collectors.toMap(AreaAnalysisDTO::getArea, AreaAnalysisDTO::getNum)); @@ -228,7 +289,7 @@ @Transactional @Override - public AreaDangerDTO deptDangerDTO(LambdaQueryWrapper query) { + public AreaDangerDTO deptDangerDTO(QueryWrapper query) { //迭代获取各风险类型数量 List areaAnalysisDTOS = baseMapper.deptDangerDTOList(query); @@ -237,33 +298,129 @@ } @Override - public AreaDangerDTO areaDangerList(LambdaQueryWrapper query) { + public List tree(String groupType) { + //查询可见组织 + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); + + LambdaQueryWrapper deptQuery = new LambdaQueryWrapper<>(); + Integer type = Convert.toInt(groupType); + if (type == null) { + throw new ServiceException(500, "检索条件异常"); + } + + deptQuery.inSql(Dept::getId, "select dept_id from risk_point_info where risk_type = " + type); + if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { + deptQuery.in(Dept::getId, scope.getDeptIds()); + } + + deptQuery.orderByAsc(Dept::getNum); + + List deptList = abstractPermissionContext.getDeptService().list(deptQuery); + //迭代根组织 + List rootIds = new ArrayList<>(); + List deptDTOS = new ArrayList<>(); + Set normalIds = new HashSet<>(); + + //检索识别信息 + for (Dept dept : deptList) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(dept.getId()); + deptDTO.setPid(dept.getPid()); + deptDTO.setFullName(dept.getFullName()); + deptDTO.setName(dept.getSimpleName()); + deptDTOS.add(deptDTO); + normalIds.add(dept.getId()); + deptDTO.setType(NODE_TYPE_DEPT); + + //挂载设备信息 + QueryWrapper deviceQuery = new QueryWrapper<>(); + deviceQuery.eq("dept_id", deptDTO.getId()); + + //判定只可查看以下密级 安全管理员除外 + if (!user.getRoleTips().contains(adminRole)) { + deviceQuery.le("secret_level", StayPermissionUtil.getSecretLevel( user.getSecretLevel())); + } + + //类型(1 危险点 2重大危险源 3 危险化学品场所 4 危险作业 5危险作业工序) + deviceQuery.eq("risk_type", groupType); + deviceQuery.orderByAsc("id"); + //校验分组授权 + StayPermissionUtil.riskQuery(deviceQuery, "id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); + + List pointInfos = this.list(deviceQuery); + List deptDTOList = new ArrayList<>(); + for (RiskPointInfo pointInfo : pointInfos) { + RiskGroupDeptDTO deptDto = this.createDeptDTO(pointInfo); + deptDTOList.add(deptDto); + } + + deptDTO.setChildrenNodes(deptDTOList); + } + + for (RiskGroupDeptDTO deptDTO : deptDTOS) { + if (!normalIds.contains(deptDTO.getPid())) { + rootIds.add(deptDTO.getPid()); + } + } + + //过滤根节点 + DeptDefaultTreeBuildFactory abstractTreeBuildFactory = new DeptDefaultTreeBuildFactory(); + rootIds = rootIds.stream().distinct().collect(Collectors.toList()); + List newTree = new ArrayList<>(); + for (Long rootId : rootIds) { + abstractTreeBuildFactory.setRootId(rootId + ""); + newTree.addAll(abstractTreeBuildFactory.doTreeBuild(deptDTOS)); + } + + return newTree; + } + + /** + * 创建节点 + * + * @param pointInfo 风险点信息 + * @return + */ + public RiskGroupDeptDTO createDeptDTO(RiskPointInfo pointInfo) { + RiskGroupDeptDTO deptDTO = new RiskGroupDeptDTO(); + deptDTO.setId(pointInfo.getId()); + deptDTO.setType(DataConstants.NODE_TYPE_RISK); + deptDTO.setPid(pointInfo.getDeptId()); + deptDTO.setRiskPointInfo(pointInfo); + deptDTO.setName(getRiskName(pointInfo)); + deptDTO.setFullName(getRiskName(pointInfo)); + return deptDTO; + } + + @Override + public AreaDangerDTO areaDangerList(QueryWrapper query) { + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.areaDangerList(query); return convertAreaAnalysisDTO(areaAnalysisDTOS, false); } + @Override + public AreaDangerDTO areaDangerScopeList(QueryWrapper query) { + + List areaAnalysisDTOS = baseMapper.areaDangerScopeList(query); + return convertAreaAnalysisDTO(areaAnalysisDTOS, false); + } + @Value("${casic.video.admin.role:security_admin}") private String adminRole; @Value("${casic.video.normal.role:normalAdmin}") private String normalRole; + @Value("${casic.sysType:sm}") + private String sysType; private QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT\n" + - "device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); + return StayPermissionUtil.query(query, column, userId, roleTips, adminRole, normalRole, sysType); } @Override - public DangerCategoryDTO dangerCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerCategory(QueryWrapper query) { List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -280,11 +437,13 @@ } @Override - public DangerCategoryDTO dangerScopeCategory(LambdaQueryWrapper query) { + public DangerCategoryDTO dangerScopeCategory(QueryWrapper query) { DataScope scope = abstractPermissionContext.getAuthService().getLoginUserDataScope(); if (!ScopeEnums.ALL_TYPE.getCode().equals(scope.getScopeEnums().getCode())) { - query.in(RiskPointInfo::getDeptId, scope.getDeptIds()); + query.in("a.dept_id", scope.getDeptIds()); } + AuthUser user = abstractPermissionContext.getAuthService().getLoginUser(); + StayPermissionUtil.riskQuery(query, "a.id", user.getId(), user.getRoleTips(), adminRole, normalRole, sysType); List areaAnalysisDTOS = baseMapper.dangerCategory(query); return convertDangerCategoryDTO(areaAnalysisDTOS); } @@ -358,8 +517,8 @@ } //设置检索日期 - query.ge("alarm_time",begin); - query.le("alarm_time",end); + query.ge("alarm_time", begin); + query.le("alarm_time", end); List analysisDTOS = this.baseMapper.deptAlarmDate(query); long dateNum = DateUtil.betweenDay(begin, end, true); for (int i = 0; i <= dateNum; i++) { @@ -414,23 +573,5 @@ } } - private void wrapInfo(RiskPointInfo riskPointInfo) { - if (riskPointInfo.getDeptId() != null) { - riskPointInfo.setDeptName(abstractPermissionContext.getDeptService().getDeptName(riskPointInfo.getDeptId())); - QueryWrapper query = new QueryWrapper<>(); - query.eq("risk_id", riskPointInfo.getId()); - List deviceList = riskRelDeviceService.selectRiskRelDeviceList(query); - riskPointInfo.setDeviceList(deviceList); - } - if (StrUtil.isNotEmpty(riskPointInfo.getGrade())) { - riskPointInfo.setGradeName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getGrade())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getWorkLevel())) { - riskPointInfo.setWorkLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getWorkLevel())); - } - if (StrUtil.isNotEmpty(riskPointInfo.getHazardLevel())) { - riskPointInfo.setHazardLevelName(dictService.getDictNameByCode("dangerPointGrade", riskPointInfo.getHazardLevel())); - } - } } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java index 8ac9dac..39a7c5c 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/service/impl/SceneServiceImpl.java @@ -50,7 +50,7 @@ @Override public boolean save(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setCreateTime(new Date()); entity.setUpdateTime(new Date()); @@ -60,7 +60,7 @@ @Override public boolean updateById(Scene entity) { if (isValidCode(entity.getId(), entity.getSceneCode())) { - throw new ServiceException(500, "场景编码重复!"); + throw new ServiceException(500, "场景ID重复!"); } entity.setUpdateTime(new Date()); return super.updateById(entity); diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java index 48c9d89..88dc382 100644 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java +++ b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/task/BoxTask.java @@ -29,10 +29,7 @@ //设备状态更新 log.info("box online task start"); if (open) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.set("device_status",0); - updateWrapper.le("update_time",DateUtil.offsetMinute(new Date(),-5)); - boxDeviceService.update(updateWrapper); + boxDeviceService.updateStatus(); } log.info("box online task end"); } diff --git a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java b/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java deleted file mode 100644 index 8067843..0000000 --- a/casic-warning-analysis/src/main/java/com/casic/missiles/modular/device/util/StayPermissionUtil.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.casic.missiles.modular.device.util; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.casic.missiles.core.datascope.DataScope; -import com.casic.missiles.core.datascope.ScopeEnums; - -import java.util.Set; - -public class StayPermissionUtil { - - /** - * 分组授权权限查询 - * - * @return - */ - public static QueryWrapper query(QueryWrapper query, String column, Long userId, Set roleTips, String adminRole, String normalRole) { - //指定管理角色可以看全部设备信息 - if (roleTips.contains(adminRole) || roleTips.contains(normalRole)) { - return query; - } - return query.inSql(column, "SELECT device_id\n" + - "FROM\n" + - "\tsys_user_group a\n" + - "\tINNER JOIN sys_group_rel_user b ON a.id = b.group_id\n" + - "\tINNER JOIN sys_group_device c on a.id = c.group_id\n" + - "\tWHERE b.user_id = " + userId + "\n" + - "\tGROUP BY c.device_id"); - } - - /** - * 数据权限查询 - * - * @param query - * @param columnId - * @param dataScope - * @param - * @return - */ - public static QueryWrapper queryScope(QueryWrapper query, String columnId, DataScope dataScope) { - if (!ScopeEnums.ALL_TYPE.getCode().equals(dataScope.getScopeEnums().getCode())) { - query.in(columnId, dataScope.getDeptIds()); - } - return query; - } - -} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 204e65a..4a3e0e0 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -116,6 +116,11 @@ com.casic + casic-admin-audit + ${admin.version} + + + com.casic casic-admin-support ${admin.version} @@ -140,6 +145,12 @@ oscarJDBC8 8.0 + + com.casic + casic-admin-tenant + ${admin.version} + + org.springframework.boot @@ -279,8 +290,7 @@ src/main/resources - - + /config/*/* /config/*-*.yml diff --git a/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java b/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java index 0028188..5ae5588 100644 --- a/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java +++ b/casic-web/src/main/java/com/casic/missiles/test/CasicRsaUtil.java @@ -19,9 +19,9 @@ System.out.println("随机生成的公钥为:" + keyMap.get(RSAPublicKey)); System.out.println("随机生成的私钥为:" + keyMap.get(RSAPrivateKey)); - String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB"; - System.out.println( - encrypt(message,publicKey)); +// String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuS3W6uMVXhokIf7Pt+rPmOLlwuDFstTdPZ75ObpOizxsBDxQ+D0tqUscCEfpwqRsFQQmiwe7btMlWuyxz3g691DRPtst3OvBWArK1uOHsfsXI3EA0AgIMqxRMJkPcgYEtiyZYKbnNb/GFce7y5DY1gAyak7r9UiD9sv9epW5RxO3vOS8Gq/PqlreEsPFItL8NhUq8OC22P0ZDmvxbZ7KlX7X6hYufb3rIMJ/1zWQ9aHP/E6jUEDJ2Fit5HCYo7a3qV0EYkxx4//zexPE2GflFzoggbTGh2Y/HpR9vEAyejeosiwgXzrH3z0a0QC77smdGuQyraDOym0TN1i/8iAdlwIDAQAB"; +// System.out.println( +// encrypt(message,publicKey)); } } diff --git a/casic-web/src/main/java/com/casic/missiles/test/Test.java b/casic-web/src/main/java/com/casic/missiles/test/Test.java index 8ada97d..a7fe4f6 100644 --- a/casic-web/src/main/java/com/casic/missiles/test/Test.java +++ b/casic-web/src/main/java/com/casic/missiles/test/Test.java @@ -32,6 +32,9 @@ String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDf6PjdpgdZMt/KBnhQBphZDM4/RB+LFe6JbI7BmD4ivUwWS1dmEAziNp2ZOznccyUmXzd6C8OZVHRlxakYoGFWVDfu0hiOdK+qLvBeJwUrbXDUd6n7M6yi3RwRj9oKQkYbdn6vQk+f+4jmtcGUyaXndPTXUQtOIczXxtgwymUz3QIDAQAB"; String sec = RSAUtils.encrypt(str, pubKey); System.out.println(sec); + String priKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN/o+N2mB1ky38oGeFAGmFkMzj9EH4sV7olsjsGYPiK9TBZLV2YQDOI2nZk7OdxzJSZfN3oLw5lUdGXFqRigYVZUN+7SGI50r6ou8F4nBSttcNR3qfszrKLdHBGP2gpCRht2fq9CT5/7iOa1wZTJped09NdRC04hzNfG2DDKZTPdAgMBAAECgYB8oBIsZCXA6wUOUC2U9SbEodEF+6fG5U0gZjDK5i7nbQ81dXfO0e4p1pY/XGynG9u4kNSy9GtJI22p26tzjoi91oL5acx3W+GWmdV4FcoFF3DjP7JyUnRI4Qsyq+mbELJ/DdIrBD7vsxptXs/VLd0Pp3dBbQG8ZJLB8eHnTLRQ7QJBAPX2sKLNq4P6QQ53YfUgnGoWvMORQudEvWSXfQiGAa7RQ29ePHrC+XDeWhqmtB6N9Xjf2UYaiAyv0G2LsxYZxmcCQQDpC+mo+wazwbIs7eTAp5mfCsTZuQx7RMLlryk/tNWoS9pOduJ6HJ7kQjbrgpsCM2WBnAH6YjY8pTnKY83P1iEbAkEA1spx4Ao5QIx26XopihXLYf2vJB2jTjDCL6j24E2eBJrsB8JEkHPZvs394442dwRDHCZnKAgdTO7v1eoMHz2s+wJBANIjmstzp2R5mUdoL+gEeMJvfHdypC2XIELqAkDet/Xsh+pOywMfQatDhbAxccK3Q6VuXl4/Jvbiacz018W8KNcCQGCJXbF10YjWtIXsZCnrfYCdn1rlTwDfdYfs85NaZaeb4aMhImSwdMqBgwSZfGofR8h2ZexN2Z3A6LEBbvUR49g="; + String s = RSAUtils.decrypt(sec,priKey); + System.out.println(s); } public static String calculateMD5(String filePath) { try { diff --git a/casic-web/src/main/resources/config/application-test42.yml b/casic-web/src/main/resources/config/application-test42.yml index de21991..39b99ab 100644 --- a/casic-web/src/main/resources/config/application-test42.yml +++ b/casic-web/src/main/resources/config/application-test42.yml @@ -5,7 +5,7 @@ datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.83.42:3306/casic-production-safety?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true -# url: mysql +# url: mysql casic203 username: root password: casic203 druid: @@ -13,7 +13,7 @@ min-idle: 20 web: resources: - static-locations: /opt/stay/data/tmp/ + static-locations: D://tmp// jms: pub-sub-domain: true # session: @@ -25,8 +25,12 @@ # serializer: org.springframework.data.redis.serializer.StringRedisSerializer # redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: + sysType: sm + box: #视频盒子定时清理离线配置信息 + open: true + deviceCorn: 0 */5 * * * * #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/webjars/**,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/ws/*,/gate/login,/sync/org,/sync/user,/sync/device/** + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/websocket/*,/webjars/**,/ws/*,/gate/login,/sync/org,/sync/user,/sync/device/**,/v2/api-docs,/v2/api-docs-ext,/doc.html,/v2/api-docs/swagger-ui.html,/swagger-resources,/record/upload db: init: enable: false diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml index 01a3187..74f4855 100644 --- a/casic-web/src/main/resources/config/application.yml +++ b/casic-web/src/main/resources/config/application.yml @@ -26,11 +26,16 @@ ################### mybatis-plus配置 ################### ################### guns配置 ################### casic: + tenant: + enable: true + excludes: bus_device_info,device_online_log,box_device,algo_model,scene,risk_point_info,risk_rel_device,device_scene_relation,hazard_classification_info,alarm_record, + model_recognition_type,device_model_relation,box_device_relation + ,sys_resource,sys_config,sys_dept_detail,sys_dict,sys_tenant,sys_dept,sys_operation_application web: url: http://localhost/alarm/#/realTime/page #前端地址 swagger-open: true knife4j: - groups: 系统管理:com.casic.missiles.modular.system,安全生产业务包:com.casic.missiles.modular.device,视频会议:com.casic.missiles.modular.meeting; + groups: 系统管理:com.casic.missiles.modular.system,安全生产业务包:com.casic.missiles.modular.device;com.casic.missiles.modular.group,视频会议:com.casic.missiles.modular.meeting kaptcha-open: false #是否开启登录时验证码 (true/false) muti-datasource-open: false #是否开启多数据源(true/false) spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) @@ -61,7 +66,7 @@ corn: 0 */60 * * * * video: admin: - role: administrator #安全管理员角色标识 安全管理员可看未定密数据 + role: security_admin #安全管理员角色标识 安全管理员可看未定密数据 dc: corn: refreshToken: 0 */5 * * * * @@ -81,6 +86,7 @@ open: true deviceCorn: 0 */5 * * * * av: + autoDept: true open: false url: http://localhost:6909 token: 6bcffcdb-42fe-df6c-e704-e6034dd8a5a0 @@ -89,9 +95,9 @@ proxyUrl: 192.168.83.42:80 wvp: #wvp视频平台配置信息 open: true - url: http://192.168.83.42:80 + url: http://192.168.83.65:8099 userName: admin - pwd: 21232f297a57a5a743894a0e4a801fc3 + pwd: 06571e44bc1615bc284ae829916a866e server: servlet: context-path: /safe-server