28 KiB
口门信息管理 - 后端需求文档
一、模块概述
1.1 模块名称
口门信息管理(后端)
1.2 所属模块
监管端 → 一级口门管理
1.3 功能描述
管理口门的基础信息,包括口门的增删改查、口门属性配置,以及口门关联的通道、闸机、摄像头设备的管理功能。
1.4 用户角色
- 监管端超级管理员
- 监管端系统管理员
1.5 数据表
| 表名 | 说明 |
|---|---|
mkmj |
门口信息管理表(主表) |
mkmj_passage |
口门门禁通道表 |
mkmj_gate |
门口闸机表 |
video |
摄像头表 |
二、数据字典(前端静态配置)
以下数据字典由前端静态配置,无需后端提供接口:
2.1 口门级别 (mkmj_level)
| 值 | 名称 |
|---|---|
| 1 | 一级 |
| 2 | 二级 |
2.2 口门类型 (mkmj_type)
| 值 | 名称 |
|---|---|
| 1 | 人行 |
| 2 | 车行 |
| 3 | 综合 |
2.3 口门状态 (mkmj_status)
| 值 | 名称 |
|---|---|
| 1 | 停用 |
| 2 | 正常 |
| 3 | 暂时管理 |
2.4 所属港区 (hg_auth_area)
| 值 | 名称 |
|---|---|
| qianwan | 前湾港区 |
| dongjiakou | 董家口港区 |
| huangdao | 黄岛港区 |
| other | 其他港区 |
2.5 闸机状态 (gate_status)
| 值 | 名称 |
|---|---|
| 1 | 停用 |
| 2 | 正常 |
2.6 通道类型 (passage_type)
| 值 | 名称 |
|---|---|
| 1 | 人行 |
| 2 | 车行 |
| 3 | 综合 |
2.7 通道状态 (passage_status)
| 值 | 名称 |
|---|---|
| 1 | 停用 |
| 2 | 正常 |
2.8 摄像头类型 (video_type)
| 值 | 名称 |
|---|---|
| 1 | 移动 |
| 2 | 平台 |
2.9 设备类型 (device_type)
| 值 | 名称 |
|---|---|
| 1 | 口门 |
| 2 | 闸机 |
三、口门管理接口
3.1 查询口门列表
接口: GET /api/mkmj/list
描述: 分页查询口门列表,支持条件筛选
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | int | 是 | 页码,默认 1 |
| pageSize | int | 是 | 每页条数,默认 20,最大 100 |
| mkmjName | String | 否 | 口门名称,模糊查询 |
| hgAuthArea | String | 否 | 所属港区编码 |
| mkmjStatus | Integer | 否 | 口门状态 |
| mkmjLevel | Integer | 否 | 口门级别 |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"list": [
{
"id": 101,
"mkmjName": "一号口门",
"hgAuthArea": "qianwan",
"hgAuthAreaName": "前湾港区",
"mkmjLevel": 1,
"mkmjType": "3",
"mkmjTypeName": "综合",
"mkmjStatus": 2,
"mkmjStatusName": "正常",
"longitude": "120.123456",
"latitude": "36.123456",
"passageCount": 5,
"gateCount": 10,
"videoCount": 8
}
],
"total": 50,
"page": 1,
"pageSize": 20
}
}
实现逻辑:
- 根据条件动态构建查询语句
hgAuthAreaName、mkmjTypeName、mkmjStatusName根据数据字典转换- 仅查询
delete_enum = 'FALSE'的记录 - passageCount、gateCount、videoCount 是统计的相关联的表统计出来的。
3.2 获取口门详情
接口: GET /api/mkmj/detail/{id}
描述: 获取口门详细信息及关联设备统计
路径参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | Long | 口门 ID |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"id": 101,
"mkmjName": "一号口门",
"hgAuthArea": "qianwan",
"hgAuthAreaName": "前湾港区",
"mkmjLevel": 1,
"mkmjLevelName": "一级",
"mkmjType": "3",
"mkmjTypeName": "综合",
"mkmjStatus": 2,
"mkmjStatusName": "正常",
"inDirectionArea": null,
"inDirectionAreaName": null,
"outDirectionArea": null,
"outDirectionAreaName": null,
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "备注信息",
"createName": "管理员",
"createTime": "2026-03-01 10:00:00",
"updateName": "管理员",
"updateTime": "2026-03-05 14:30:00"
}
}
实现逻辑:
- 查询口门基本信息
- 统计关联的通道、闸机、摄像头数量(
delete_enum = 'FALSE') - 数据字典字段转换名称
3.3 新增口门
接口: POST /api/mkmj/add
描述: 新增口门信息
请求参数:
{
"mkmjName": "一号口门",
"hgAuthArea": "qianwan",
"hgAuthAreaName": "前湾港区",
"mkmjLevel": 1,
"mkmjType": "3",
"mkmjStatus": 2,
"inDirectionArea": null,
"inDirectionAreaName": null,
"outDirectionArea": null,
"outDirectionAreaName": null,
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "备注信息"
}
请求参数说明:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mkmjName | String | 是 | 口门名称,2-50 字符 |
| hgAuthArea | String | 是 | 所属港区编码 |
| hgAuthAreaName | String | 是 | 所属港区名称 |
| mkmjLevel | Integer | 是 | 口门级别:1-一级,2-二级 |
| mkmjType | String | 是 | 口门类型:1-人行,2-车行,3-综合 |
| mkmjStatus | Integer | 是 | 口门状态:1-停用,2-正常,3-暂时管理 |
| inDirectionArea | Long | 否 | 入方向区域 ID |
| inDirectionAreaName | String | 否 | 入方向区域名称 |
| outDirectionArea | Long | 否 | 出方向区域 ID |
| outDirectionAreaName | String | 否 | 出方向区域名称 |
| longitude | String | 是 | 经度,-180~180 |
| latitude | String | 是 | 纬度,-90~90 |
| remarks | String | 否 | 备注,≤255 字符 |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"id": 101
}
}
实现逻辑:
- 校验必填参数
3.4 编辑口门
接口: PUT /api/mkmj/update
描述: 编辑口门信息
请求参数:
{
"id": 101,
"mkmjName": "一号口门",
"hgAuthArea": "qianwan",
"hgAuthAreaName": "前湾港区",
"mkmjLevel": 1,
"mkmjType": "3",
"mkmjStatus": 2,
"inDirectionArea": null,
"inDirectionAreaName": null,
"outDirectionArea": null,
"outDirectionAreaName": null,
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "更新备注"
}
响应数据:
{
"code": 200,
"message": "success"
}
实现逻辑:
- 校验 ID 存在性
- 校验口门名称唯一性(排除当前记录)
- 校验经度、纬度范围
- 填充更新字段:
update_time= 当前时间update_id= 当前用户 IDupdate_name= 当前用户姓名
- 更新数据库
3.5 删除口门
接口: DELETE /api/mkmj/delete/{id}
描述: 删除口门(软删除),同步停用关联设备
路径参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | Long | 口门 ID |
响应数据:
{
"code": 200,
"message": "success"
}
实现逻辑:
- 校验 ID 存在性
- 检查关联数据:
- 查询关联通道数量(
mkmj_passage,mkmj_id = id,delete_enum = 'FALSE') - 查询关联闸机数量(
mkmj_gate,mkmj_id = id,delete_enum = 'FALSE') - 查询关联摄像头数量(
video,foreign_id = id,device_type = 1,delete_enum = 'FALSE') - 查询关联审批人数量(
mkmj_approval_user,mkmj_id = id,delete_enum = 'FALSE')
- 查询关联通道数量(
- 如存在关联数据,返回错误码
2002及关联详情 - 执行软删除:
update mkmj set delete_enum = 'TRUE' where id = ? - 同步停用关联的通道、闸机、摄像头(更新
delete_enum = 'TRUE') - 记录操作日志
错误响应(有关联数据时):
{
"code": 2002,
"message": "该口门下有关联数据,无法删除",
"data": {
"passageCount": 5,
"gateCount": 10,
"videoCount": 8,
"approvalUserCount": 3
}
}
3.6 口门名称唯一性校验
接口: GET /api/mkmj/check-name
描述: 校验口门名称是否重复
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mkmjName | String | 是 | 口门名称 |
| id | Long | 否 | 当前口门 ID(编辑时传) |
响应数据:
{
"code": 200,
"data": {
"available": true
}
}
实现逻辑:
- 查询
mkmj表,条件:mkmjName = ?ANDdelete_enum = 'FALSE' - 如传入
id,则排除该记录:AND id != ? - 查询结果为空则
available = true,否则available = false
四、通道管理接口
4.1 查询通道列表
接口: GET /api/mkmj/passage/list
描述: 分页查询通道列表,支持按口门筛选
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | int | 是 | 页码,默认 1 |
| pageSize | int | 是 | 每页条数,默认 20 |
| mkmjId | Long | 否 | 口门 ID |
| passageName | String | 否 | 通道名称,模糊查询 |
| passageType | Integer | 否 | 通道类型 |
| passageStatus | Integer | 否 | 通道状态 |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"list": [
{
"id": 1001,
"mkmjId": 101,
"mkmjName": "一号口门",
"passageName": "A 通道",
"passageType": 1,
"passageTypeName": "人行",
"passageStatus": 2,
"passageStatusName": "正常",
"longitude": "120.123456",
"latitude": "36.123456",
"createName": "管理员",
"createTime": "2026-03-01 10:00:00"
}
],
"total": 50,
"page": 1,
"pageSize": 20
}
}
4.2 获取通道详情
接口: GET /api/mkmj/passage/detail/{id}
描述: 获取通道详细信息
路径参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | Long | 通道 ID |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"id": 1001,
"mkmjId": 101,
"mkmjName": "一号口门",
"passageName": "A 通道",
"passageType": 1,
"passageTypeName": "人行",
"passageStatus": 2,
"passageStatusName": "正常",
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "备注信息",
"createName": "管理员",
"createTime": "2026-03-01 10:00:00",
"updateName": "管理员",
"updateTime": "2026-03-05 14:30:00"
}
}
4.3 新增通道
接口: POST /api/mkmj/passage/add
描述: 新增通道信息
请求参数:
{
"mkmjId": 101,
"passageName": "A 通道",
"passageType": 1,
"passageStatus": 2,
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "备注信息"
}
请求参数说明:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mkmjId | Long | 是 | 所属口门 ID |
| passageName | String | 是 | 通道名称,2-50 字符 |
| passageType | Integer | 是 | 通道类型:1-人行,2-车行,3-综合 |
| passageStatus | Integer | 是 | 通道状态:1-停用,2-正常 |
| longitude | String | 否 | 经度 |
| latitude | String | 否 | 纬度 |
| remarks | String | 否 | 备注,≤255 字符 |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"id": 1001
}
}
实现逻辑:
- 校验必填参数
- 校验口门 ID 存在性(
mkmj表,delete_enum = 'FALSE') - 校验通道名称在同一口门下唯一
- 填充公共字段
- 插入数据库
4.4 编辑通道
接口: PUT /api/mkmj/passage/update
描述: 编辑通道信息
请求参数:
{
"id": 1001,
"mkmjId": 101,
"passageName": "A 通道",
"passageType": 1,
"passageStatus": 2,
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "更新备注"
}
响应数据:
{
"code": 200,
"message": "success"
}
4.5 删除通道
接口: DELETE /api/mkmj/passage/delete/{id}
描述: 删除通道(软删除),同步停用关联闸机
路径参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | Long | 通道 ID |
响应数据:
{
"code": 200,
"message": "success"
}
实现逻辑:
- 校验 ID 存在性
- 检查关联的闸机数量(
mkmj_gate,passage_id = id,delete_enum = 'FALSE') - 如存在关联闸机,返回错误
- 执行软删除
- 同步停用关联的闸机
4.6 按口门查询通道列表(简化版)
接口: GET /api/mkmj/passage/by-mkmj/{mkmjId}
描述: 获取指定口门下的所有通道(用于下拉选择)
路径参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| mkmjId | Long | 口门 ID |
响应数据:
{
"code": 200,
"message": "success",
"data": [
{
"id": 1001,
"passageName": "A 通道",
"passageType": 1,
"passageTypeName": "人行"
},
{
"id": 1002,
"passageName": "B 通道",
"passageType": 2,
"passageTypeName": "车行"
}
]
}
五、闸机管理接口
5.1 查询闸机列表
接口: GET /api/mkmj/gate/list
描述: 分页查询闸机列表,支持按口门、通道筛选
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | int | 是 | 页码,默认 1 |
| pageSize | int | 是 | 每页条数,默认 20 |
| mkmjId | Long | 否 | 口门 ID |
| passageId | String | 否 | 通道 ID |
| gateName | String | 否 | 闸机名称,模糊查询 |
| gateType | String | 否 | 闸机类型 |
| gateStatus | Integer | 否 | 闸机状态 |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"list": [
{
"id": 2001,
"mkmjId": 101,
"mkmjName": "一号口门",
"passageId": "1001",
"passageName": "A 通道",
"gateNumber": "GATE-001",
"gateName": "1 号闸机",
"gateType": "1",
"gateTypeName": "人行闸机",
"gateStatus": 2,
"gateStatusName": "正常",
"gateCategory": "tripod",
"gateCategoryName": "三辊闸",
"gateModel": "ZK-100",
"gatePosition": "入口处",
"longitude": "120.123456",
"latitude": "36.123456",
"createName": "管理员",
"createTime": "2026-03-01 10:00:00"
}
],
"total": 100,
"page": 1,
"pageSize": 20
}
}
5.2 获取闸机详情
接口: GET /api/mkmj/gate/detail/{id}
描述: 获取闸机详细信息
路径参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | Long | 闸机 ID |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"id": 2001,
"mkmjId": 101,
"mkmjName": "一号口门",
"passageId": "1001",
"passageName": "A 通道",
"gateNumber": "GATE-001",
"gateName": "1 号闸机",
"gateType": "1",
"gateTypeName": "人行闸机",
"gateStatus": 2,
"gateStatusName": "正常",
"gateCategory": "tripod",
"gateCategoryName": "三辊闸",
"gateModel": "ZK-100",
"gatePosition": "入口处",
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "备注信息",
"createName": "管理员",
"createTime": "2026-03-01 10:00:00",
"updateName": "管理员",
"updateTime": "2026-03-05 14:30:00"
}
}
5.3 新增闸机
接口: POST /api/mkmj/gate/add
描述: 新增闸机信息
请求参数:
{
"mkmjId": 101,
"passageId": "1001",
"gateNumber": "GATE-001",
"gateName": "1 号闸机",
"gateType": "1",
"gateStatus": 2,
"gateCategory": "tripod",
"gateCategoryName": "三辊闸",
"gateModel": "ZK-100",
"gatePosition": "入口处",
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "备注信息"
}
请求参数说明:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mkmjId | Long | 是 | 所属口门 ID |
| passageId | String | 是 | 所属通道 ID |
| gateNumber | String | 是 | 闸机标识,唯一 |
| gateName | String | 是 | 闸机名称,2-50 字符 |
| gateType | String | 是 | 闸机类型 |
| gateStatus | Integer | 是 | 闸机状态:1-停用,2-正常 |
| gateCategory | String | 否 | 闸机类别编码 |
| gateCategoryName | String | 否 | 闸机类别名称 |
| gateModel | String | 否 | 闸机型号,≤255 字符 |
| gatePosition | String | 否 | 闸机位置,≤255 字符 |
| longitude | String | 否 | 经度 |
| latitude | String | 否 | 纬度 |
| remarks | String | 否 | 备注,≤255 字符 |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"id": 2001
}
}
实现逻辑:
- 校验必填参数
- 校验口门 ID 存在性
- 校验通道 ID 存在性(且属于该口门)
- 校验闸机标识唯一性(
gateNumber) - 填充公共字段
- 插入数据库
5.4 编辑闸机
接口: PUT /api/mkmj/gate/update
描述: 编辑闸机信息
请求参数:
{
"id": 2001,
"mkmjId": 101,
"passageId": "1001",
"gateNumber": "GATE-001",
"gateName": "1 号闸机",
"gateType": "1",
"gateStatus": 2,
"gateCategory": "tripod",
"gateCategoryName": "三辊闸",
"gateModel": "ZK-100",
"gatePosition": "入口处",
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "更新备注"
}
响应数据:
{
"code": 200,
"message": "success"
}
5.5 删除闸机
接口: DELETE /api/mkmj/gate/delete/{id}
描述: 删除闸机(软删除),同步停用关联摄像头
路径参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | Long | 闸机 ID |
响应数据:
{
"code": 200,
"message": "success"
}
实现逻辑:
- 校验 ID 存在性
- 检查关联的摄像头数量(
video,foreign_id = id,device_type = 2,delete_enum = 'FALSE') - 如存在关联摄像头,返回错误
- 执行软删除
- 同步停用关联的摄像头
5.6 闸机标识唯一性校验
接口: GET /api/mkmj/gate/check-number
描述: 校验闸机标识是否重复
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| gateNumber | String | 是 | 闸机标识 |
| id | Long | 否 | 当前闸机 ID(编辑时传) |
响应数据:
{
"code": 200,
"data": {
"available": true
}
}
5.7 按口门/通道查询闸机列表(简化版)
接口: GET /api/mkmj/gate/by-passage
描述: 获取指定通道下的所有闸机(用于下拉选择)
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| passageId | String | 是 | 通道 ID |
响应数据:
{
"code": 200,
"message": "success",
"data": [
{
"id": 2001,
"gateNumber": "GATE-001",
"gateName": "1 号闸机",
"gateType": "1",
"gateTypeName": "人行闸机"
},
{
"id": 2002,
"gateNumber": "GATE-002",
"gateName": "2 号闸机",
"gateType": "1",
"gateTypeName": "人行闸机"
}
]
}
六、摄像头管理接口
6.1 查询摄像头列表
接口: GET /api/mkmj/video/list
描述: 分页查询摄像头列表,支持按口门、闸机筛选
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | int | 是 | 页码,默认 1 |
| pageSize | int | 是 | 每页条数,默认 20 |
| foreignId | Long | 否 | 关联 ID(口门 ID 或闸机 ID) |
| deviceType | Integer | 否 | 设备类型:1-口门,2-闸机 |
| videoResourceName | String | 否 | 摄像头名称,模糊查询 |
| videoType | Integer | 否 | 摄像头类型 |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"list": [
{
"id": 3001,
"foreignId": 101,
"deviceType": 1,
"deviceTypeName": "口门",
"videoResourceId": "CAM-001",
"videoResourceName": "1 号口门摄像头",
"videoType": 2,
"videoTypeName": "平台",
"longitude": "120.123456",
"latitude": "36.123456",
"createName": "管理员",
"createTime": "2026-03-01 10:00:00"
}
],
"total": 200,
"page": 1,
"pageSize": 20
}
}
6.2 获取摄像头详情
接口: GET /api/mkmj/video/detail/{id}
描述: 获取摄像头详细信息
路径参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | Long | 摄像头 ID |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"id": 3001,
"foreignId": 101,
"deviceType": 1,
"deviceTypeName": "口门",
"mkmjName": "一号口门",
"gateName": null,
"videoResourceId": "CAM-001",
"videoResourceName": "1 号口门摄像头",
"videoType": 2,
"videoTypeName": "平台",
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "备注信息",
"createName": "管理员",
"createTime": "2026-03-01 10:00:00",
"updateName": "管理员",
"updateTime": "2026-03-05 14:30:00"
}
}
6.3 新增摄像头
接口: POST /api/mkmj/video/add
描述: 新增摄像头信息
请求参数:
{
"foreignId": 101,
"deviceType": 1,
"videoResourceId": "CAM-001",
"videoResourceName": "1 号口门摄像头",
"videoType": 2,
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "备注信息"
}
请求参数说明:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| foreignId | Long | 是 | 关联 ID(口门 ID 或闸机 ID) |
| deviceType | Integer | 是 | 设备类型:1-口门,2-闸机 |
| videoResourceId | String | 是 | 摄像头 ID,唯一 |
| videoResourceName | String | 是 | 摄像头名称,2-50 字符 |
| videoType | Integer | 是 | 摄像头类型:1-移动,2-平台 |
| longitude | String | 否 | 经度 |
| latitude | String | 否 | 纬度 |
| remarks | String | 否 | 备注,≤255 字符 |
响应数据:
{
"code": 200,
"message": "success",
"data": {
"id": 3001
}
}
实现逻辑:
- 校验必填参数
- 校验关联 ID 存在性(根据
deviceType查询mkmj或mkmj_gate表) - 校验摄像头 ID 唯一性(
videoResourceId) - 填充公共字段
- 插入数据库
6.4 编辑摄像头
接口: PUT /api/mkmj/video/update
描述: 编辑摄像头信息
请求参数:
{
"id": 3001,
"foreignId": 101,
"deviceType": 1,
"videoResourceId": "CAM-001",
"videoResourceName": "1 号口门摄像头",
"videoType": 2,
"longitude": "120.123456",
"latitude": "36.123456",
"remarks": "更新备注"
}
响应数据:
{
"code": 200,
"message": "success"
}
6.5 删除摄像头
接口: DELETE /api/mkmj/video/delete/{id}
描述: 删除摄像头(软删除)
路径参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | Long | 摄像头 ID |
响应数据:
{
"code": 200,
"message": "success"
}
实现逻辑:
- 校验 ID 存在性
- 执行软删除:
update video set delete_enum = 'TRUE' where id = ?
6.6 摄像头 ID 唯一性校验
接口: GET /api/mkmj/video/check-id
描述: 校验摄像头 ID 是否重复
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| videoResourceId | String | 是 | 摄像头 ID |
| id | Long | 否 | 当前摄像头 ID(编辑时传) |
响应数据:
{
"code": 200,
"data": {
"available": true
}
}
6.7 按设备查询摄像头列表(简化版)
接口: GET /api/mkmj/video/by-device
描述: 获取指定设备下的所有摄像头(用于展示或下拉选择)
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| foreignId | Long | 是 | 关联 ID(口门 ID 或闸机 ID) |
| deviceType | Integer | 是 | 设备类型:1-口门,2-闸机 |
响应数据:
{
"code": 200,
"message": "success",
"data": [
{
"id": 3001,
"videoResourceId": "CAM-001",
"videoResourceName": "1 号摄像头",
"videoType": 2,
"videoTypeName": "平台"
},
{
"id": 3002,
"videoResourceId": "CAM-002",
"videoResourceName": "2 号摄像头",
"videoType": 2,
"videoTypeName": "平台"
}
]
}
七、数据校验规则
7.1 通用校验
| 字段 | 规则 | 错误码 | 错误提示 |
|---|---|---|---|
| 名称类字段 | 必填,2-50 字符 | 400 | 名称长度为 2-50 个字符 |
| 备注 | ≤255 字符 | 400 | 备注长度不能超过 255 字符 |
| 经度 | -180~180,支持小数 | 400 | 请输入有效的经度(-180~180) |
| 纬度 | -90~90,支持小数 | 400 | 请输入有效的纬度(-90~90) |
7.2 口门校验
| 字段 | 规则 | 错误码 | 错误提示 |
|---|---|---|---|
| mkmjName | 唯一性 | 2001 | 该口门名称已存在 |
| mkmjLevel | 固定值校验 | 400 | 口门级别无效 |
| hgAuthArea | 有效性 | 400 | 所属港区无效 |
7.3 通道校验
| 字段 | 规则 | 错误码 | 错误提示 |
|---|---|---|---|
| mkmjId | 存在性 | 2003 | 所属口门不存在 |
| passageName | 同口门下唯一 | 2004 | 该口门下通道名称已存在 |
7.4 闸机校验
| 字段 | 规则 | 错误码 | 错误提示 |
|---|---|---|---|
| mkmjId | 存在性 | 2003 | 所属口门不存在 |
| passageId | 存在性且属于该口门 | 2005 | 所属通道不存在或不属于该口门 |
| gateNumber | 唯一性 | 2006 | 该闸机标识已存在 |
7.5 摄像头校验
| 字段 | 规则 | 错误码 | 错误提示 |
|---|---|---|---|
| foreignId | 存在性(根据 deviceType) | 2007 | 关联设备不存在 |
| videoResourceId | 唯一性 | 2008 | 该摄像头 ID 已存在 |
八、删除关联检查逻辑
8.1 删除口门检查
-- 检查关联通道
SELECT COUNT(*) FROM mkmj_passage WHERE mkmj_id = ? AND delete_enum = 'FALSE';
-- 检查关联闸机
SELECT COUNT(*) FROM mkmj_gate WHERE mkmj_id = ? AND delete_enum = 'FALSE';
-- 检查关联摄像头(口门类)
SELECT COUNT(*) FROM video WHERE foreign_id = ? AND device_type = 1 AND delete_enum = 'FALSE';
-- 检查关联审批人
SELECT COUNT(*) FROM mkmj_approval_user WHERE mkmj_id = ? AND delete_enum = 'FALSE';
8.2 删除通道检查
-- 检查关联闸机
SELECT COUNT(*) FROM mkmj_gate WHERE passage_id = ? AND delete_enum = 'FALSE';
8.3 删除闸机检查
-- 检查关联摄像头(闸机类)
SELECT COUNT(*) FROM video WHERE foreign_id = ? AND device_type = 2 AND delete_enum = 'FALSE';
九、错误码定义
十、公共字段处理
10.1 查询条件
所有列表查询必须附加条件:delete_enum = 'FALSE'
十一、实现注意事项
11.1 事务处理
- 新增、编辑、删除操作需使用事务
- 删除口门时,同步停用关联数据需在同一事务中完成
11.2 级联删除
- 删除口门 → 停用通道、闸机、摄像头、审批人
- 删除通道 → 停用闸机
- 删除闸机 → 停用摄像头
11.4 性能优化
- 列表查询使用分页
11.5 日志记录
- 关键操作(新增、编辑、删除)记录操作日志
- 日志内容:操作人、操作时间、操作类型、操作对象 ID、变更内容
十二、附录
12.1 相关文档
12.2 表结构参考
mkmj- 门口信息管理表mkmj_passage- 口门门禁通道表mkmj_gate- 门口闸机表video- 摄像头表
文档版本: V1.0
最后更新: 2026-03-09