报警统计相关接口

master
aosodo_4812 2026-09-03 11:00:26 +08:00
parent 2e8c7daea6
commit af9ab0aa0d
16 changed files with 39 additions and 306 deletions

View File

@ -1,124 +0,0 @@
# 区域管理接口REGION-0105
## 公共约定
- 内部接口前缀:`/edgeguard/regions`
- 企业来自公共服务,`edgeguard_region` 只保存真实区域及 `corp_id`
- 所有接口先按公共企业服务返回的当前调用人可访问企业校验数据范围。
- `nodeType=CORP` 表示企业虚拟根;`nodeType=REGION` 表示本地真实区域。
- 菜单权限编码尚未分配,因此 Controller 暂不填写 `@PreAuthorize`;菜单资源确定后必须补齐。
## REGION-01 区域树
```http
GET /edgeguard/regions/tree?corpId=1001
```
`corpId` 可省略。返回企业虚拟根,即使企业尚无区域也返回空 `children`
```json
{
"success": true,
"data": [{
"nodeId": "C-1001",
"nodeType": "CORP",
"id": 1001,
"corpId": 1001,
"nodeName": "示例企业",
"treeLevel": 0,
"children": [{
"nodeId": "R-10",
"nodeType": "REGION",
"id": 10,
"corpId": 1001,
"parentId": 0,
"nodeName": "一号厂区",
"regionCode": "8f06f25cd7f84a1682ed86cdfa3da417",
"treeLevel": 1,
"sortNo": 0,
"regionStatus": "ENABLED",
"children": []
}]
}]
}
```
## REGION-02 区域详情
```http
GET /edgeguard/regions/10
```
详情返回企业名称、负责人名称、有序围栏点和用于修改的 `version`
## REGION-03 新增区域
```http
POST /edgeguard/regions
Content-Type: application/json
{
"corpId": 1001,
"parentId": 0,
"regionName": "一号厂区",
"leaderUserId": 2001,
"coordinateSystem": "GCJ02",
"fencePoints": [
{"seq": 1, "longitude": 113.1, "latitude": 23.1},
{"seq": 2, "longitude": 113.2, "latitude": 23.1},
{"seq": 3, "longitude": 113.2, "latitude": 23.2},
{"seq": 4, "longitude": 113.1, "latitude": 23.2}
],
"sortNo": 0,
"remarks": "示例"
}
```
服务端生成 `regionCode`、`treePath`、`treeLevel`,初始状态为 `ENABLED`
## REGION-04 修改区域
```http
PUT /edgeguard/regions/10
Content-Type: application/json
{
"regionName": "一号厂区东区",
"leaderUserId": 2001,
"coordinateSystem": "GCJ02",
"fencePoints": [
{"seq": 1, "longitude": 113.1, "latitude": 23.1},
{"seq": 2, "longitude": 113.2, "latitude": 23.1},
{"seq": 3, "longitude": 113.2, "latitude": 23.2},
{"seq": 4, "longitude": 113.1, "latitude": 23.2}
],
"sortNo": 10,
"regionStatus": "ENABLED",
"version": 1,
"remarks": "修改示例"
}
```
一期不接受 `parentId`、`corpId`、`regionCode`、`treePath` 或 `treeLevel` 修改。
## REGION-05 删除区域
```http
DELETE /edgeguard/regions/10
```
仅执行逻辑删除。存在子区域或 `BOUND` 摄像头绑定时拒绝删除。
## 当前业务异常
| 场景 | 信息 |
| --- | --- |
| 企业越权 | 无权访问该企业数据 |
| 区域不存在 | 区域不存在 / 父区域不存在 |
| 同级重名 | 同级区域名称已存在 |
| 负责人无效 | 区域负责人不存在或已停用 |
| 负责人跨企业 | 区域负责人不属于当前企业 |
| 围栏无效 | 点数、序号、范围、重复点、自相交或零面积对应提示 |
| 并发修改 | 区域已被其他用户修改,请刷新后重试 |
| 删除受限 | 区域存在下级区域,不能删除 / 区域仍绑定有效摄像头,不能删除 |

View File

@ -4,7 +4,6 @@ import com.alibaba.cola.exception.BizException;
import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.gbs.edgeguard.domain.gateway.AlarmDisposalGateway; import com.zcloud.gbs.edgeguard.domain.gateway.AlarmDisposalGateway;
import com.zcloud.gbs.edgeguard.domain.gateway.AlarmGateway; import com.zcloud.gbs.edgeguard.domain.gateway.AlarmGateway;
import com.zcloud.gbs.edgeguard.domain.gateway.HiddenGateway;
import com.zcloud.gbs.edgeguard.domain.model.AlarmDisposalE; import com.zcloud.gbs.edgeguard.domain.model.AlarmDisposalE;
import com.zcloud.gbs.edgeguard.domain.model.AlarmE; import com.zcloud.gbs.edgeguard.domain.model.AlarmE;
import com.zcloud.gbs.edgeguard.dto.AlarmDisposeCmd; import com.zcloud.gbs.edgeguard.dto.AlarmDisposeCmd;
@ -19,7 +18,6 @@ import java.util.Date;
public class AlarmDisposeExe { public class AlarmDisposeExe {
private final AlarmGateway alarmGateway; private final AlarmGateway alarmGateway;
private final AlarmDisposalGateway disposalGateway; private final AlarmDisposalGateway disposalGateway;
private final HiddenGateway hiddenGateway;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void execute(Long alarmId, AlarmDisposeCmd cmd) { public void execute(Long alarmId, AlarmDisposeCmd cmd) {
@ -33,15 +31,7 @@ public class AlarmDisposeExe {
validate(cmd); validate(cmd);
Long handlerUserId = AuthContext.getUserId(); Long handlerUserId = AuthContext.getUserId();
String handlerName = AuthContext.getCurrentUser().getName(); String hiddenId = Integer.valueOf(1).equals(cmd.getIsHiddenHazard()) ? cmd.getHiddenId().trim() : null;
String hiddenId = null;
if (Integer.valueOf(1).equals(cmd.getIsHiddenHazard())) {
try {
hiddenId = hiddenGateway.createFromAlarm(alarm, handlerUserId, handlerName);
} catch (Exception exception) {
throw new BizException("创建隐患失败: " + exception.getMessage());
}
}
AlarmDisposalE disposal = new AlarmDisposalE(); AlarmDisposalE disposal = new AlarmDisposalE();
disposal.setAlarmId(alarmId); disposal.setAlarmId(alarmId);
@ -73,6 +63,10 @@ public class AlarmDisposeExe {
if (falseAlarm == 0 && cmd.getIsHiddenHazard() == null) { if (falseAlarm == 0 && cmd.getIsHiddenHazard() == null) {
throw new BizException("非误报时必须选择是否隐患"); throw new BizException("非误报时必须选择是否隐患");
} }
if (Integer.valueOf(1).equals(cmd.getIsHiddenHazard())
&& (cmd.getHiddenId() == null || cmd.getHiddenId().trim().isEmpty())) {
throw new BizException("判定为隐患时隐患ID不能为空");
}
if (falseAlarm == 0 && Integer.valueOf(0).equals(cmd.getIsHiddenHazard()) if (falseAlarm == 0 && Integer.valueOf(0).equals(cmd.getIsHiddenHazard())
&& (cmd.getDisposalResultCode() == null || cmd.getDisposalResultCode().trim().isEmpty())) { && (cmd.getDisposalResultCode() == null || cmd.getDisposalResultCode().trim().isEmpty())) {
throw new BizException("非隐患必须填写处置结果"); throw new BizException("非隐患必须填写处置结果");

View File

@ -17,7 +17,7 @@ import java.util.Set;
@Component @Component
@RequiredArgsConstructor @RequiredArgsConstructor
public class RegionCameraBindExe { public class RegionCameraBindExe {
private static final String CAMERA_SOURCE = "VIDEOPATROL"; private static final String CAMERA_SOURCE = "HIKVISION";
private final RegionAccessService accessService; private final RegionAccessService accessService;
private final RegionCameraBindTransaction transaction; private final RegionCameraBindTransaction transaction;
@ -27,10 +27,7 @@ public class RegionCameraBindExe {
List<RegionCameraE> snapshots = new ArrayList<>(); List<RegionCameraE> snapshots = new ArrayList<>();
Set<String> identities = new HashSet<>(); Set<String> identities = new HashSet<>();
for (CameraSelectionCmd camera : cmd.getCameras()) { for (CameraSelectionCmd camera : cmd.getCameras()) {
if (!region.getCorpId().equals(camera.getCorpinfoId())) { String cameraId = camera.getIndexCode().trim();
throw new BizException("摄像头所属单位与区域所属企业不一致:" + camera.getVideoName());
}
String cameraId = camera.getFixedCameraId().trim();
CameraKeyE key = new CameraKeyE(CAMERA_SOURCE, cameraId); CameraKeyE key = new CameraKeyE(CAMERA_SOURCE, cameraId);
if (!identities.add(key.identity())) { if (!identities.add(key.identity())) {
throw new BizException("摄像头选择结果存在重复项"); throw new BizException("摄像头选择结果存在重复项");
@ -44,22 +41,9 @@ public class RegionCameraBindExe {
private RegionCameraE toSnapshot(CameraSelectionCmd camera) { private RegionCameraE toSnapshot(CameraSelectionCmd camera) {
RegionCameraE snapshot = new RegionCameraE(); RegionCameraE snapshot = new RegionCameraE();
snapshot.setCameraSource(CAMERA_SOURCE); snapshot.setCameraSource(CAMERA_SOURCE);
snapshot.setCameraId(camera.getFixedCameraId().trim()); snapshot.setCameraId(camera.getIndexCode().trim());
snapshot.setCameraName(camera.getVideoName().trim()); snapshot.setCameraName(camera.getName().trim());
snapshot.setVideoType(camera.getVideoType()); snapshot.setCameraRegionName(camera.getRegionName());
snapshot.setCameraUnitId(camera.getCorpinfoId());
snapshot.setCameraUnitName(camera.getCorpinfoName());
snapshot.setCameraDeptId(camera.getDepartmentId());
snapshot.setCameraDeptName(camera.getDepartmentName());
snapshot.setVideoLevel(camera.getVideoLevel());
snapshot.setVideoAddress(camera.getVideoAddress());
snapshot.setIsOnline(camera.getIsOnline());
snapshot.setDeviceModel(camera.getDeviceModel());
snapshot.setDeviceGbNumber(camera.getDeviceGbNumber());
snapshot.setCameraNumber(camera.getCameraNumber());
snapshot.setLongitude(camera.getLongitude());
snapshot.setLatitude(camera.getLatitude());
snapshot.setRemarks(camera.getRemarks());
return snapshot; return snapshot;
} }
} }

View File

@ -32,9 +32,9 @@ public class RegionCameraQueryExe {
int pageIndex = safePageIndex(qry.getPageIndex()); int pageIndex = safePageIndex(qry.getPageIndex());
int pageSize = safePageSize(qry.getPageSize()); int pageSize = safePageSize(qry.getPageSize());
List<RegionCameraE> rows = cameraGateway.pageBound( List<RegionCameraE> rows = cameraGateway.pageBound(
region.getId(), qry.getName(), qry.getVideoLevel(), qry.getIsOnline(), pageIndex, pageSize); region.getId(), qry.getName(), pageIndex, pageSize);
long total = cameraGateway.countBound( long total = cameraGateway.countBound(
region.getId(), qry.getName(), qry.getVideoLevel(), qry.getIsOnline()); region.getId(), qry.getName());
Set<Long> leaderIds = new HashSet<>(); Set<Long> leaderIds = new HashSet<>();
for (RegionCameraE row : rows) { for (RegionCameraE row : rows) {
@ -48,12 +48,6 @@ public class RegionCameraQueryExe {
for (RegionCameraE row : rows) { for (RegionCameraE row : rows) {
RegionCameraCo co = new RegionCameraCo(); RegionCameraCo co = new RegionCameraCo();
BeanUtils.copyProperties(row, co); BeanUtils.copyProperties(row, co);
co.setFixedCameraId(row.getCameraId());
co.setVideoName(row.getCameraName());
co.setCorpinfoId(row.getCameraUnitId());
co.setCorpinfoName(row.getCameraUnitName());
co.setDepartmentId(row.getCameraDeptId());
co.setDepartmentName(row.getCameraDeptName());
co.setRegionName(region.getRegionName()); co.setRegionName(region.getRegionName());
co.setLeaderUserName(leaderNames.get(row.getLeaderUserId())); co.setLeaderUserName(leaderNames.get(row.getLeaderUserId()));
result.add(co); result.add(co);

View File

@ -72,8 +72,8 @@ public class RegionCameraBindTransactionTest {
@Override public Boolean deleteById(Long id) { return false; } @Override public Boolean deleteById(Long id) { return false; }
@Override public RegionCameraE getById(Long id) { return null; } @Override public RegionCameraE getById(Long id) { return null; }
@Override public boolean existsBoundByRegionId(Long regionId) { return false; } @Override public boolean existsBoundByRegionId(Long regionId) { return false; }
@Override public List<RegionCameraE> pageBound(Long regionId, String name, String level, Integer online, int index, int size) { return Collections.emptyList(); } @Override public List<RegionCameraE> pageBound(Long regionId, String name, int index, int size) { return Collections.emptyList(); }
@Override public long countBound(Long regionId, String name, String level, Integer online) { return 0; } @Override public long countBound(Long regionId, String name) { return 0; }
@Override public List<RegionCameraE> listBoundByRegionId(Long regionId) { @Override public List<RegionCameraE> listBoundByRegionId(Long regionId) {
List<RegionCameraE> result = new ArrayList<>(); List<RegionCameraE> result = new ArrayList<>();
for (RegionCameraE row : rows) if (regionId.equals(row.getRegionId()) && "BOUND".equals(row.getBindStatus())) result.add(row); for (RegionCameraE row : rows) if (regionId.equals(row.getRegionId()) && "BOUND".equals(row.getBindStatus())) result.add(row);

View File

@ -12,6 +12,8 @@ public class AlarmDisposeCmd extends Command {
@NotNull(message = "是否误报不能为空") @NotNull(message = "是否误报不能为空")
private Integer isFalseAlarm; private Integer isFalseAlarm;
private Integer isHiddenHazard; private Integer isHiddenHazard;
/** 前端创建隐患成功后返回的隐患ID。 */
private String hiddenId;
private String disposalResultCode; private String disposalResultCode;
private String disposalResultName; private String disposalResultName;
private String disposalDescription; private String disposalDescription;

View File

@ -3,28 +3,14 @@ package com.zcloud.gbs.edgeguard.dto;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
@Data @Data
public class CameraSelectionCmd implements Serializable { public class CameraSelectionCmd implements Serializable {
@NotBlank(message = "固定摄像头业务ID不能为空") @NotBlank(message = "摄像头编码不能为空")
private String fixedCameraId; private String indexCode;
@NotBlank(message = "视频名称不能为空") @NotBlank(message = "摄像头名称不能为空")
private String videoName; private String name;
private String videoType; /** 海康平台中的所属区域名称,仅作为摄像头快照。 */
@NotNull(message = "所属单位ID不能为空") private String regionName;
private Long corpinfoId;
private String corpinfoName;
private Long departmentId;
private String departmentName;
private String videoLevel;
private String videoAddress;
private Integer isOnline;
private String deviceModel;
private String deviceGbNumber;
private String cameraNumber;
private String longitude;
private String latitude;
private String remarks;
} }

View File

@ -14,6 +14,4 @@ public class RegionCameraPageQry extends PageQuery {
@ApiModelProperty(value = "区域ID", required = true) @ApiModelProperty(value = "区域ID", required = true)
private Long regionId; private Long regionId;
private String name; private String name;
private String videoLevel;
private Integer isOnline;
} }

View File

@ -10,21 +10,11 @@ public class RegionCameraCo extends ClientObject {
private Long id; private Long id;
private Long regionId; private Long regionId;
private String regionName; private String regionName;
private String fixedCameraId; private Long corpId;
private String videoName; private String cameraSource;
private String videoType; private String cameraId;
private Long corpinfoId; private String cameraName;
private String corpinfoName; private String cameraRegionName;
private Long departmentId;
private String departmentName;
private String videoLevel;
private String videoAddress;
private Integer isOnline;
private String deviceModel;
private String deviceGbNumber;
private String cameraNumber;
private String longitude;
private String latitude;
private Long leaderUserId; private Long leaderUserId;
private String leaderUserName; private String leaderUserName;
private String bindStatus; private String bindStatus;

View File

@ -1,9 +1,5 @@
package com.zcloud.gbs.edgeguard.domain.gateway; package com.zcloud.gbs.edgeguard.domain.gateway;
import com.zcloud.gbs.edgeguard.domain.model.AlarmE;
public interface HiddenGateway { public interface HiddenGateway {
String createFromAlarm(AlarmE alarm, Long handlerUserId, String handlerName);
Integer queryStatus(String hiddenId, String alarmNo); Integer queryStatus(String hiddenId, String alarmNo);
} }

View File

@ -12,9 +12,8 @@ public interface RegionCameraGateway {
Boolean deleteById(Long id); Boolean deleteById(Long id);
RegionCameraE getById(Long id); RegionCameraE getById(Long id);
boolean existsBoundByRegionId(Long regionId); boolean existsBoundByRegionId(Long regionId);
List<RegionCameraE> pageBound(Long regionId, String cameraName, String videoLevel, List<RegionCameraE> pageBound(Long regionId, String cameraName, int pageIndex, int pageSize);
Integer isOnline, int pageIndex, int pageSize); long countBound(Long regionId, String cameraName);
long countBound(Long regionId, String cameraName, String videoLevel, Integer isOnline);
List<RegionCameraE> listBoundByRegionId(Long regionId); List<RegionCameraE> listBoundByRegionId(Long regionId);
List<RegionCameraE> listByKeys(Long corpId, Collection<CameraKeyE> cameraKeys); List<RegionCameraE> listByKeys(Long corpId, Collection<CameraKeyE> cameraKeys);
} }

View File

@ -18,19 +18,7 @@ public class RegionCameraE extends BaseE {
private String cameraSource; private String cameraSource;
private String cameraId; private String cameraId;
private String cameraName; private String cameraName;
private String videoType; private String cameraRegionName;
private Long cameraUnitId;
private String cameraUnitName;
private Long cameraDeptId;
private String cameraDeptName;
private String videoLevel;
private String videoAddress;
private Integer isOnline;
private String deviceModel;
private String deviceGbNumber;
private String cameraNumber;
private String longitude;
private String latitude;
private Long leaderUserId; private Long leaderUserId;
private String bindStatus; private String bindStatus;
private Date boundTime; private Date boundTime;

View File

@ -1,64 +1,18 @@
package com.zcloud.gbs.edgeguard.gatewayimpl; package com.zcloud.gbs.edgeguard.gatewayimpl;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.gbscommon.zcloudhidden.face.ZcloudHiddenFacade; import com.zcloud.gbscommon.zcloudhidden.face.ZcloudHiddenFacade;
import com.zcloud.gbscommon.zcloudhidden.request.HiddenAddCmd;
import com.zcloud.gbscommon.zcloudhidden.request.HiddenImgAddCmd;
import com.zcloud.gbscommon.zcloudhidden.request.HiddenStatisticsListQry; import com.zcloud.gbscommon.zcloudhidden.request.HiddenStatisticsListQry;
import com.zcloud.gbscommon.zcloudhidden.response.HiddenListCO; import com.zcloud.gbscommon.zcloudhidden.response.HiddenListCO;
import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.PageResponse;
import com.zcloud.gbs.edgeguard.domain.gateway.HiddenGateway; import com.zcloud.gbs.edgeguard.domain.gateway.HiddenGateway;
import com.zcloud.gbs.edgeguard.domain.model.AlarmE;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.UUID;
import java.util.Collections;
@Component @Component
public class HiddenGatewayImpl implements HiddenGateway { public class HiddenGatewayImpl implements HiddenGateway {
@DubboReference(check = false) @DubboReference(check = false)
private ZcloudHiddenFacade hiddenFacade; private ZcloudHiddenFacade hiddenFacade;
@Override
public String createFromAlarm(AlarmE alarm, Long handlerUserId, String handlerName) {
HiddenAddCmd cmd = new HiddenAddCmd();
cmd.setHiddenId(UUID.randomUUID().toString());
cmd.setSource(1);
cmd.setForeignKey(alarm.getAlarmNo());
cmd.setHiddenDesc("边缘人脸识别区域报警");
cmd.setHiddenPart(alarm.getAlarmAddress());
cmd.setHiddenLevel("hiddenLevel1004");
cmd.setHiddenLevelName("一般隐患");
cmd.setHiddenType("alarm");
cmd.setHiddenTypeName("报警隐患");
cmd.setPositionDesc(alarm.getRegionPathSnapshot());
cmd.setHiddenFindWay("1");
cmd.setIsAi(0);
cmd.setCorpId(alarm.getCorpId());
cmd.setCorpName(alarm.getCorpNameSnapshot());
cmd.setCreatorId(handlerUserId);
cmd.setCreatorName(handlerName);
cmd.setConfirmUserId(handlerUserId);
cmd.setConfirmUserName(handlerName);
cmd.setHiddenFindTime(new Date());
cmd.setRectificationType(2);
cmd.setHiddenJson("{\"confirm\":\"1\",\"rectificationType\":2}");
if (alarm.getAlarmImageUrl() != null && !alarm.getAlarmImageUrl().trim().isEmpty()) {
HiddenImgAddCmd image = new HiddenImgAddCmd();
image.setCorpId(alarm.getCorpId());
image.setHiddenId(cmd.getHiddenId());
image.setUrl(alarm.getAlarmImageUrl());
cmd.setHiddenImgAddCmds(Collections.singletonList(image));
}
SingleResponse<?> response = hiddenFacade.addHidden(cmd);
if (response == null || !response.isSuccess()) {
throw new IllegalStateException(response == null ? "创建隐患失败" : response.getErrMessage());
}
return cmd.getHiddenId();
}
@Override @Override
public Integer queryStatus(String hiddenId, String alarmNo) { public Integer queryStatus(String hiddenId, String alarmNo) {
HiddenStatisticsListQry qry = new HiddenStatisticsListQry(); HiddenStatisticsListQry qry = new HiddenStatisticsListQry();

View File

@ -50,17 +50,16 @@ public class RegionCameraGatewayImpl implements RegionCameraGateway {
} }
@Override @Override
public List<RegionCameraE> pageBound(Long regionId, String cameraName, String videoLevel, public List<RegionCameraE> pageBound(Long regionId, String cameraName, int pageIndex, int pageSize) {
Integer isOnline, int pageIndex, int pageSize) { LambdaQueryWrapper<RegionCameraDO> wrapper = boundWrapper(regionId, cameraName)
LambdaQueryWrapper<RegionCameraDO> wrapper = boundWrapper(regionId, cameraName, videoLevel, isOnline)
.orderByDesc(RegionCameraDO::getBoundTime).orderByDesc(RegionCameraDO::getId); .orderByDesc(RegionCameraDO::getBoundTime).orderByDesc(RegionCameraDO::getId);
Page<RegionCameraDO> page = repository.page(new Page<>(pageIndex, pageSize), wrapper); Page<RegionCameraDO> page = repository.page(new Page<>(pageIndex, pageSize), wrapper);
return toEntities(page.getRecords()); return toEntities(page.getRecords());
} }
@Override @Override
public long countBound(Long regionId, String cameraName, String videoLevel, Integer isOnline) { public long countBound(Long regionId, String cameraName) {
return repository.count(boundWrapper(regionId, cameraName, videoLevel, isOnline)); return repository.count(boundWrapper(regionId, cameraName));
} }
@Override @Override
@ -94,14 +93,11 @@ public class RegionCameraGatewayImpl implements RegionCameraGateway {
return toEntities(repository.list(wrapper)); return toEntities(repository.list(wrapper));
} }
private LambdaQueryWrapper<RegionCameraDO> boundWrapper(Long regionId, String cameraName, private LambdaQueryWrapper<RegionCameraDO> boundWrapper(Long regionId, String cameraName) {
String videoLevel, Integer isOnline) {
return new LambdaQueryWrapper<RegionCameraDO>() return new LambdaQueryWrapper<RegionCameraDO>()
.eq(RegionCameraDO::getRegionId, regionId) .eq(RegionCameraDO::getRegionId, regionId)
.eq(RegionCameraDO::getBindStatus, "BOUND") .eq(RegionCameraDO::getBindStatus, "BOUND")
.like(cameraName != null && !cameraName.trim().isEmpty(), RegionCameraDO::getCameraName, cameraName) .like(cameraName != null && !cameraName.trim().isEmpty(), RegionCameraDO::getCameraName, cameraName);
.eq(videoLevel != null && !videoLevel.trim().isEmpty(), RegionCameraDO::getVideoLevel, videoLevel)
.eq(isOnline != null, RegionCameraDO::getIsOnline, isOnline);
} }
private List<RegionCameraE> toEntities(List<RegionCameraDO> rows) { private List<RegionCameraE> toEntities(List<RegionCameraDO> rows) {

View File

@ -16,19 +16,7 @@ public class RegionCameraDO extends BaseDO {
private String cameraSource; private String cameraSource;
private String cameraId; private String cameraId;
private String cameraName; private String cameraName;
private String videoType; private String cameraRegionName;
private Long cameraUnitId;
private String cameraUnitName;
private Long cameraDeptId;
private String cameraDeptName;
private String videoLevel;
private String videoAddress;
private Integer isOnline;
private String deviceModel;
private String deviceGbNumber;
private String cameraNumber;
private String longitude;
private String latitude;
private Long leaderUserId; private Long leaderUserId;
private String bindStatus; private String bindStatus;
private Date boundTime; private Date boundTime;

View File

@ -42,19 +42,7 @@ CREATE TABLE `edgeguard_region_camera` (
`camera_source` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '摄像头来源系统编码', `camera_source` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '摄像头来源系统编码',
`camera_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '第三方摄像头唯一标识', `camera_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '第三方摄像头唯一标识',
`camera_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '摄像头名称缓存,第三方为权威数据源', `camera_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '摄像头名称缓存,第三方为权威数据源',
`video_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '视频类型快照', `camera_region_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '海康平台所属区域名称快照',
`camera_unit_id` bigint DEFAULT NULL COMMENT '所属单位ID快照',
`camera_unit_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '所属单位名称快照',
`camera_dept_id` bigint DEFAULT NULL COMMENT '主管部门ID快照',
`camera_dept_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '主管部门名称快照',
`video_level` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '视频等级快照',
`video_address` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '视频地址快照',
`is_online` int DEFAULT NULL COMMENT '在线状态0离线1在线',
`device_model` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '规格型号快照',
`device_gb_number` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '设备国标编号快照',
`camera_number` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '摄像头编号快照',
`longitude` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '经度快照',
`latitude` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '纬度快照',
`leader_user_id` bigint DEFAULT NULL COMMENT '摄像头负责人用户id', `leader_user_id` bigint DEFAULT NULL COMMENT '摄像头负责人用户id',
`bind_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'BOUND' COMMENT '绑定状态BOUND/UNBOUND', `bind_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'BOUND' COMMENT '绑定状态BOUND/UNBOUND',
`bound_time` datetime NOT NULL COMMENT '最近绑定时间', `bound_time` datetime NOT NULL COMMENT '最近绑定时间',
@ -75,7 +63,7 @@ CREATE TABLE `edgeguard_region_camera` (
UNIQUE KEY `uk_camera_source_id` (`tenant_id`, `camera_source`, `camera_id`), UNIQUE KEY `uk_camera_source_id` (`tenant_id`, `camera_source`, `camera_id`),
KEY `idx_region_camera` (`tenant_id`, `region_id`, `bind_status`, `delete_enum`), KEY `idx_region_camera` (`tenant_id`, `region_id`, `bind_status`, `delete_enum`),
KEY `idx_camera_corp` (`tenant_id`, `corp_id`, `delete_enum`), KEY `idx_camera_corp` (`tenant_id`, `corp_id`, `delete_enum`),
KEY `idx_camera_filter` (`tenant_id`, `region_id`, `bind_status`, `video_level`, `is_online`, `delete_enum`), KEY `idx_camera_filter` (`tenant_id`, `region_id`, `bind_status`, `delete_enum`),
KEY `idx_camera_name` (`camera_name`), KEY `idx_camera_name` (`camera_name`),
KEY `idx_camera_leader` (`leader_user_id`) KEY `idx_camera_leader` (`leader_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='区域与第三方摄像头绑定表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='区域与第三方摄像头绑定表';