Initial commit: reorganized source tree

- backend/: 13 Maven modules (cw-elevator-application, cloudwalk-cloud, intelligent-cwoscomponent, ninca-crk, etc.)
- frontend/: 4 Vue projects (elevator-front, cwos-portal, alarm-front, front_acs) + decompiled + scripts
- scripts/: build, test-env, tools (Docker Compose, service templates, API parity)
- docs/: AGENTS.md, superpowers specs, architecture docs
- .gitignore: standard Java/Maven exclusions

Moved from legacy maven-*/ root layout to backend/ organized structure.
This commit is contained in:
hpd840321
2026-05-09 09:00:12 +08:00
commit 7b2bd307f1
7260 changed files with 612980 additions and 0 deletions
@@ -0,0 +1,170 @@
# 组织服务组件编译方案评估
**日期**2026-05-05
**来源**ninca-common-component-organization-V2.9.2_20210730.jar
---
## 1. 原始依赖环境
| 项目 | 值 |
|------|-----|
| Spring Boot | 1.5.17.RELEASE |
| Spring Cloud | Edgware.SR3 |
| Spring Framework | 4.3.29.RELEASE |
| JDK | 1.8 |
| Servlet | 3.1.0 (javax) |
---
## 2. 反编译模块结构
```
maven-ninca-common-component-organization/
├── cwos-component-organization-interface-v2.9.2_xinghewan/ # 接口 + DTO (无外部依赖)
├── cwos-component-organization-data-v2.9.2_xinghewan/ # DAO + Entity (依赖 interface)
├── cwos-component-organization-service-v2.9.2_xinghewan/ # 业务逻辑 (依赖 data + interface)
└── cwos-component-organization-web-v2.9.2_xinghewan/ # Controller (依赖 service)
```
**依赖链**web → service → data → interface
---
## 3. 外部依赖分析
### 3.1 可直接复用的 V2 Maven 模块
| 依赖 | 来源模块 | 状态 |
|------|---------|------|
| cloudwalk-common-result | maven-cloudwalk-legacy-public | ✅ 已有 |
| cloudwalk-common-serial | maven-cloudwalk-legacy-public | ✅ 已有 |
| cloudwalk-common-service | maven-cloudwalk-legacy-public | ✅ 已有 |
| cloudwalk-common-data | **无对应模块** | ❌ 需新建 |
| cloudwalk-device-manager-common | maven-cloudwalk-device-manager | ✅ 已有 |
| cloudwalk-device-manager-interface | maven-cloudwalk-device-manager | ✅ 已有 |
| cloudwalk-device-sdk-interface | maven-cloudwalk-device-sdk | ✅ 已有 |
| cloudwalk-device-sdk-protocol-entity | maven-cloudwalk-device-sdk | ✅ 已有 |
| cwos-common-aks-interface | maven-cwos-common-aks | ✅ 已有 |
| cwos-device-authentication-interface | maven-cwos-device-authentication | ✅ 已有 |
| cwos-component-resource-* | maven-cwos-resource | ✅ 已有 |
| davinci-manager-* | maven-cloudwalk-intelligent-davinci-manager | ✅ 已有 |
| cwos-sdk-event | maven-cloudwalk-legacy-public | ✅ 已有 |
| cloudwalk-common-result/web/serial | maven-cloudwalk-legacy-public | ✅ 已有 |
### 3.2 缺失的 CloudWalk 内部依赖
这些 JAR 存在于原始 fat JAR 的 `BOOT-INF/lib/` 中,但本地没有对应的 Maven 模块:
| 依赖 | 说明 | 数量 |
|------|------|------|
| cn.cloudwalk.client.aggregate.* | 聚合服务接口 (cwos-core-aggregate-interface) | ~30 个类 |
| cn.cloudwalk.client.account.* | 账户服务接口 (cwos-component-account-interface) | ~15 个类 |
| cn.cloudwalk.client.resource.* | 资源服务接口 (cwos-component-resource-interface) | ~20 个类 |
| cn.cloudwalk.client.device.mgn.* | 设备管理原子接口 (cwos-core-device-mgn-atomic-interface) | ~10 个类 |
| cn.cloudwalk.client.device.processor.* | 设备处理器接口 (cwos-device-processor-interface) | ~5 个类 |
| cn.cloudwalk.rest.* | REST 客户端 (cwos-component-*-rest) | ~20 个类 |
| cn.cloudwalk.task.* | 任务引擎 (ai-cloud-task-*) | ~10 个类 |
| ninca-common-message-center | 消息中心接口 | ~5 个类 |
| 其他 | pineappine, aliyun, opencv 等 | ~10 个类 |
**合计缺失约 125 个外部类引用。**
### 3.3 移植可行性判断
| 依赖组 | 能否从已有 JAR 提取 | 工作量 |
|--------|-------------------|--------|
| cn.cloudwalk.client.aggregate.* | ✅ JAR 在 lib/ 中,可反编译安装 | 中 |
| cn.cloudwalk.client.account.* | ✅ JAR 在 lib/ 中,可反编译安装 | 中 |
| cn.cloudwalk.client.resource.* | ✅ JAR 在 lib/ 中,可反编译安装 | 中 |
| cn.cloudwalk.rest.* | ✅ JAR 在 lib/ 中,可反编译安装 | 中 |
| ai-cloud-task-* | ✅ JAR 在 lib/ 中 | 低 |
| 第三方 (opencv, aliyun 等) | ✅ 直接从 lib/ 提取 | 低 |
---
## 4. 三种编译方案
### 方案 A:完整 Maven 多模块(推荐)
```
maven-ninca-common-component-organization/
├── pom.xml # reactor POM
├── cwos-component-organization-interface/
│ └── pom.xml # 继承 reactor
├── cwos-component-organization-data/
│ └── pom.xml
├── cwos-component-organization-service/
│ └── pom.xml
└── cwos-component-organization-web/
└── pom.xml
```
**步骤:**
1. 创建 reactor POM,继承 Spring Boot 1.5.17 parent
2. 从原始 JAR 的 `BOOT-INF/lib/` 提取所有缺失的 CloudWalk JAR
3.`mvn install:install-file` 安装到本地 .m2 仓库
4. 各子模块 POM 声明依赖
**优点**:可真正编译、可 IDE 索引、可验证代码正确性
**缺点**:工作量大(~80 个 JAR 需要处理);版本与 V2 主线可能不一致
### 方案 B:混合方案(实用主义)
```
maven-ninca-common-component-organization/
├── pom.xml # 聚合 POM
├── organization-interface/
│ └── pom.xml # 仅 interface 模块可编译
└── organization-libs/ # 存放 lib JAR
└── lib/*.jar # 直接从原始 JAR 提取
```
**步骤:**
1. 仅 interface 模块完全 Maven 化(纯 DTO,无外部依赖)
2. data/service/web 模块标记为 `pom``jar`,依赖通过 `system` scope 引用 lib/ 目录
3. 从原始 JAR 的 `BOOT-INF/lib/` 复制所有 JAR 到 `organization-libs/lib/`
**优点**:interface 可编译;剩余模块至少可 IDE 打开
**缺点**system scope 不可传递;不适合 CI 构建
### 方案 C:纯参考(不编译)
保持当前状态(已清理的反编译源码 + 中文注释),仅用于:
- 代码走查和业务逻辑分析
- Person detail → floorList 调用链追踪
- 策略需求的功能验证
**优点**:零工作量
**缺点**:不能编译验证、IDE 报错
---
## 5. 最终决策:不编译,直接用原始 JAR
### 结论
反编译源码仅作为**走查参考**,不进行 Maven 化编译。任何需要依赖组织服务的项目,直接引用原始 JAR:
```
源码/maven-cw-elevator-application/releases/cw-elevator-application-v2.0.10-.../org-service/.../ninca-common-component-organization-V2.9.2_20210730.jar
```
### 理由
| 考量 | 说明 |
|------|------|
| 复杂度 | 避免引入 80+ 个依赖 JAR 的版本管理问题 |
| 维护成本 | 反编译源码不改动、不编译,永远与原始 JAR 一致 |
| 目标明确 | 仅用于走查 `floorList` 生成逻辑,不需要编译 |
| 引用方式 | 需要时通过 `system` scope 或直接解压查看 |
### 反编译源码的定位
```
maven-ninca-common-component-organization/
→ 走查参考(已清理 CFR 痕迹 + 中文注释 + Unicode 转中文)
→ 不参与构建
→ 不改动
→ 与原始 JAR 字节码保持语义一致(已验证 56/56 方法匹配)
```
@@ -0,0 +1,262 @@
# Component-Org Service 编译错误分类 (200 errors, 8 files)
**日期**: 2026-05-05
**构建**: `mvn compile -DskipTests -s ../maven-cw-elevator-application/.mvn/settings.xml`
**JDK**: 1.8.0_482 | **Spring Boot**: 1.5.22 | **CFR 反编译**: 0.152
---
## 错误总览
| 类别 | 数量 | 根因 | 自动修复难度 |
|------|------|------|-------------|
| No-symbol (找不到符号) | 78 | `$$$` ast-grep 残留 + raw stream 调用 + 方法歧义 | ⭐⭐ 中 |
| Object→cast | 76 | raw List/Map 失去泛型 | ⭐⭐⭐ 高 |
| Type-mismatch | 22 | 类型声明与使用不匹配 | ⭐⭐ 中 |
| Ambiguous (方法歧义) | 16 | redisTemplate.execute() 歧义 | ⭐ 低 |
| Type-inf (类型推断) | 6 | 空集合初始化泛型推断 | ⭐ 低 |
**总计**: 200 errors in 8 files
---
## 1. No-symbol (78 errors)
### 1.1 `$$$` ast-grep 残留 (36 errors)
**涉及文件**: CpOrgDevieKitServiceImpl (32), OrganizationUnitTypeServiceImpl (12), AreaTypeServiceImpl (2)
**根因**: `ast_grep_replace``return CloudwalkResult.success(X)` 改为 `return (CloudwalkResult) CloudwalkResult.success($$$)` 时, `$$$` 捕获参数但 rewrite 时 `$$$``success()` 括号内丢失了 X — X 变量覆盖了 `$$$` 变量名。
**源代码模式**:
```java
// 改写前 (ast-grep)
return CloudwalkResult.success(updateGroupResult);
// 改写后 (异常)
return (CloudwalkResult) CloudwalkResult.success($$$);
```
**修复方案**: 逐行恢复原始表达式。
**影响方法**:
- CpOrgDevieKitServiceImpl: `onUpdateGroupRequest(L117)`, `onUpdateFeatureRequest(L127/L140/L166)`, `onUpdatePictureRequest(L176/L189/L215)`, `onUpdatePersonRequest(L235/L255/L310)`, `handlePersonValidDate(L522/L530)`
- OrganizationUnitTypeServiceImpl: `page(L76)`, `getList(L110)`, `defaultInitOrgType(L121/L145)`, `initParkOrg(L188/L227)`
- AreaTypeServiceImpl: `add(L104)`
### 1.2 raw stream `.map()` 调用 Object 方法 (12 errors)
**涉及文件**: OrganizationServiceImpl.detail(L814,L815,L824,L843), CpImageStorePersonManager(L110,L357,L365,L386)
**根因**: raw List 的 `.stream()` 返回 `Stream<Object>`, 对 Object 调用 `.getAreaId()` / `.getImageStoreId()` 找不到方法。
**源代码模式**:
```java
// refDTOS 是 raw List, stream() 是 Stream<Object>
List officeArea = refDTOS.stream()
.filter(it -> it.getRefType() == 0) // Object 没有 getRefType()
.map(o -> o.getAreaId()) // Object 没有 getAreaId()
.collect(Collectors.toList());
```
**修复方案**: 在 stream 前添加 `(List<OrganizationAreaRefDTO>)` 转换,或定义变量时指定泛型。
### 1.3 redisTemplate.delete(Object) (2 errors)
**涉及文件**: CpOrgDevieKitServiceImpl.unlockSyncLog(L593)
**根因**: `redisTemplate.delete(Object)` — RedisTemplate 的 `delete()` 签名是 `delete(K key)` 泛型, 传入 Object 无法匹配。
**修复方案**: 删除 `(Object)` 转型, 直接传 key: `this.redisTemplate.delete(key);`
---
## 2. Object→cast (76 errors)
### 2.1 for-each over raw Collection (30+ errors)
**涉及文件**: CpImageStorePersonSynManager, CpImageStorePersonValidateManager, CpOrgDevieKitServiceImpl
**根因**: raw List/Map 遍历时 Iterator 返回 Object, 无法赋值给具体类型。
**源代码模式**:
```java
// removeMap 是 raw Map
for (Map.Entry entry : removeMap.entrySet()) { ... }
// 修复:
for (Map.Entry<Long, Set<SyncPersonLocal>> entry : removeMap.entrySet()) { ... }
// personInfoDataDatas 是 raw Collection
for (DeviceImageUpdateFeautreResult deviceUpdatePersonResult : personInfoDataDatas) { ... }
// 修复: 声明 personInfoDataDatas 为 Collection<DeviceImageUpdateFeautreResult>
```
**修复方案**: 找到 raw Collection 的声明位置, 添加泛型类型参数。如果变量有多态使用, 则添加 `(Collection<Type>)` 转换。
### 2.2 redisTemplate.keys() 返回 raw Set (8 errors)
**涉及文件**: CpImageStorePersonSynManager.checkHandleSynTaskException(L489,L492,L499,L502)
**根因**: `redisTemplate.keys(pattern)` 返回 `Set<K>`, 但声明为 raw `Set`, 后续 `.replaceFirst()` 等方法在 Object 上找不到。
**源代码模式**:
```java
Set synQueueHeadDataKeys = this.redisTemplate.keys(...);
String imageStoreId = synQueueHeadDataKey.replaceFirst(SYN_QUEUE_HEAD_DATA, "");
```
**修复方案**: 声明为 `Set<String>`:
```java
Set<String> synQueueHeadDataKeys = this.redisTemplate.keys(...);
```
### 2.3 Map.get() 返回 Object (8 errors)
**涉及文件**: CpImageStorePersonManager(L316,L336), OrganizationUnitTypeServiceImpl(L59)
**根因**: raw Map 的 `get()` 返回 Object, 无法调用 `.setPersonId()` 或赋值给 Integer。
**修复方案**: 声明 Map 为 `Map<K, V>` 泛型, 或在 get() 结果上添加强制转型。
### 2.4 stream().collect() 返回 Object (10 errors)
**涉及文件**: OrganizationServiceImpl.saveAreaDetails(L963,L970,L974,L981)
**根因**: raw List 的 stream 操作, collect 返回 Object 无法赋值给具体类型。
**修复方案**: 在 stream 前添加 `(List<String>)` 转换:
```java
List passableList = ((List<String>)passableArea).stream().map(...).collect(Collectors.toList());
```
---
## 3. Type-mismatch (22 errors)
### 3.1 `String` → `Set<String>` 转型 (8 errors)
**涉及文件**: CpImageStorePersonSynManager(L489,L492,L499,L502)
**根因**: 代码写了 `(java.lang.String)` 转型但实际类型是 `Set`:
```java
Set synQueueHeadDataKeys = (java.lang.String) this.redisTemplate.keys(...);
```
**修复方案**: 修改转型为目标类型:
```java
Set<String> synQueueHeadDataKeys = this.redisTemplate.keys(...);
```
### 3.2 三元表达式类型不一致 (4 errors)
**涉及文件**: CpImageStorePersonValidateManager(L150, L453)
**根因**:
```java
List<Object> syncPersonDtoList = StringUtils.isNotBlank(dataSet)
? JsonUtils.toObjList(dataSet, SyncPersonLocal.class)
: new ArrayList<>(); // inferred as ArrayList<Object>
```
`JsonUtils.toObjList()` 返回 `List<SyncPersonLocal>`, `new ArrayList<>()` 推断为 `ArrayList<Object>`, 三元运算符的两个分支类型不一致。
**修复方案**: 指定 ArrayList 的泛型:
```java
: new ArrayList<SyncPersonLocal>()
```
### 3.3 `ArrayList<String>` vs `List<String>` (2 errors)
**涉及文件**: OrganizationServiceImpl.getList(L552)
**根因**: `ids` 声明为 `ArrayList<String>``param.getIds()` 返回 `List<String>`, 不能直接赋值。
**修复方案**:
```java
ids = new ArrayList<>(param.getIds()); // 或
ids.clear(); ids.addAll(param.getIds());
```
### 3.4 `List<Object>` vs `List<String>` (2 errors)
**涉及文件**: OrganizationServiceImpl.detail(L826)
**根因**: zoneIds 声明为 `List<Object>``result.setZoneIds()` 接受 `List<String>`
**修复方案**:
```java
result.setZoneIds((List<String>)(List<?>) zoneIds); // 双重转型绕过泛型检查
```
### 3.5 `List<List<T>>` vs `List<List>` (2 errors)
**涉及文件**: CpImageStorePersonTxHandler.handleImageStorePersonDelete(L201)
**根因**: `Lists.partition()` 返回 `List<List<T>>` 但赋值给 `List<List>`
**修复方案**:
```java
List<List<String>> partition = Lists.partition(changePersonIds, delBatchSize);
```
---
## 4. Ambiguous (16 errors) - redisTemplate.execute() 歧义
**涉及文件**: CpImageStorePersonSynManager (12), CpImageStorePersonValidateManager (4)
**根因**: `RedisTemplate<K,V>.execute()` 有两个重载:
- `execute(RedisCallback<T> callback)`
- `execute(SessionCallback<T> callback)`
lambda `connection -> connection.eval(...)` 同时匹配 RedisCallback 和 SessionCallback。
**源代码**:
```java
this.redisTemplate.execute(connection -> (Long)connection.eval(lua, keys, args))
```
**修复方案**: 添加 lambda 参数类型或转型:
```java
this.redisTemplate.execute((RedisCallback<Long>) connection -> connection.eval(lua, keys, args))
```
---
## 5. Type-inf (6 errors) - 类型推断失败
### 5.1 Sets.newHashSet() 泛型推断 (2 errors)
**涉及文件**: CpImageStorePersonTxHandler.deletePersonFromImageStores(L221)
**根因**: `Sets.newHashSet((Object[])new String[]{imageId})` — 重建数组丢失类型。
**修复方案**:
```java
Sets.newHashSet(imageId) // 或
Sets.<String>newHashSet(new String[]{imageId})
```
### 5.2 Map infer from stream (4 errors)
**涉及文件**: CpImageStorePersonSynManager.handleImageStoreIncrementSyn(L417,L418)
**根因**: `.collect(Collectors.groupingBy(...))` 的结果赋值给 `Map<String, List<GroupPersonRef>>` 但 stream 是 raw。
**修复方案**: 先转型 source 再 stream。
---
## 每文件修复优先级
| 文件 | 错误数 | 主要类别 | 修复复杂度 | 预估时间 |
|------|-------|---------|-----------|---------|
| CpOrgDevieKitServiceImpl | 54 | $$ (32), Obj→cast (20) | ⭐⭐ | 30 min |
| CpImageStorePersonSynManager | 38 | Obj→cast (10), Ambiguous (12) | ⭐⭐ | 25 min |
| OrganizationServiceImpl | 32 | No-sym (14), Obj→cast (14) | ⭐⭐ | 20 min |
| CpImageStorePersonValidateManager | 28 | Obj→cast (12), Type-mis (8) | ⭐⭐ | 20 min |
| CpImageStorePersonManager | 16 | No-sym (8), Obj→cast (8) | ⭐⭐ | 15 min |
| OrganizationUnitTypeServiceImpl | 14 | $$ (12), Obj→cast (2) | ⭐ | 10 min |
| AreaTypeServiceImpl | 10 | $$ (2), Obj→cast (8) | ⭐ | 10 min |
| CpImageStorePersonTxHandler | 8 | Type-mis (2), No-sym (2) | ⭐ | 5 min |
**总预估**: 约 2 小时逐行修复。
@@ -0,0 +1,256 @@
# ConsulServerList 静态固定后:IP 直连服务发现分析
> **日期**2026-05-05
> **分析范围**`maven-cw-elevator-application`、`maven-intelligent-cwoscomponent`
> **状态**:待后续排查
---
## 1. 问题背景
电梯应用(cw-elevator-application)的三个上游 Feign 客户端在 `spring.cloud.consul.discovery.enabled=false` 的情况下,无法通过 Consul 动态发现服务实例。当前解决方式是将 Ribbon 的 `ServerList` 固定为 `ConfigurationBasedServerList`,直接配置静态 IP 列表绕过 Consul。
但 V1 生产(星中心)中**并没有**这些静态 IP 配置,却仍在正常运行——这个差异需要深入排查。
---
## 2. 服务发现链路现状
### 2.1 V2 当前架构
```
业务代码 → @FeignClient(name = "ninca-crk-std")
Ribbon LoadBalancer
ConfigurationBasedServerList ← 由 application.properties 强制指定
ninca-crk-std.ribbon.listOfServers ← 直接返回硬编码 IP:Port
目标 HTTP 服务
```
### 2.2 V1 生产(星中心)架构——未文档化的差异
```
业务代码 → @FeignClient(name = "ninca-crk-std")
Ribbon LoadBalancer
??? (无 ConfigurationBasedServerList 配置)
??? (无 listOfServers 配置)
```
**V1 生产没有 `ribbon.listOfServers`,但 Feign 调用工作正常——原因未知。**
---
## 3. 涉及的上游服务与 Feign 客户端
### 3.1 `ninca-crk-std`CRK 人脸识别 GPU
| Feign 客户端 | 模块 | @FeignClient name | 当前解析方式 |
|-------------|------|-------------------|-------------|
| `VisitorFeignClient.java` | elevator-service | `${feign.ninca-crk-std.name:ninca-crk-std}` | Ribbon → `listOfServers=10.128.161.95:16106` |
| `AcsRecordThreeSendFeignClient.java` | intelligent-cwoscomponent-rest | `${feign.ninca-crk-std.name:ninca-crk-std}` | Ribbon → 同上 |
另有非 Feign 路径:`AcsElevatorRecordServiceImpl` 通过 `@Value("${ninca-crk-std.ip}")` + `RestTemplate` 直连 CRK,与 Feign 无关。
### 3.2 `ninca-common-component-organization`(组织组件)
| Feign 客户端 | @FeignClient name | @FeignClient url | 当前解析方式 |
|-------------|-------------------|-----------------|-------------|
| `PersonFeignClient.java` | `ninca-common-component-organization` | **`http://127.0.0.1:33011`**(硬编码) | **绕过 Ribbon,直接 URL** |
| `OrganizationFeignClient.java` | `${feign.component-organization.name}` | 无 | Ribbon → `listOfServers=127.0.0.1:33011` |
| `LabelFeignClient.java` | `${feign.component-organization.name}` | 无 | Ribbon → 同上 |
| `ImageStorePersonFeignClient.java` | `${feign.component-organization.name}` | 无 | Ribbon → 同上 |
| `ImageStoreFeignClient.java` | `${feign.component-organization.name}` | 无 | Ribbon → 同上 |
| `ApplicationImageStoreFeignClient.java` | `${feign.component-organization.name}` | 无 | Ribbon → 同上 |
### 3.3 `ninca-common`(公共组件)
| Feign 客户端 | @FeignClient name | 当前解析方式 |
|-------------|-------------------|-------------|
| `ZoneFeignClient.java` | `${feign.ninca-common.name:ninca-common}` | Ribbon → **无 `listOfServers` 配置** |
| `FileFeign.java` | `${feign.ninca-common.name:ninca-common}` | Ribbon → 同上 |
| `SysettingAreaFeignClient.java` | `${feign.ninca-common.name:ninca-common}` | Ribbon → 同上 |
> **⚠️ `ninca-common` 没有任何 `ribbon.listOfServers` 配置。如果 Feign 调用到达此服务,会因空列表失败。**
---
## 4. 配置差异矩阵
### 4.1 V2 deploy/v2-maven/application.properties(当前验证环境)
```properties
# Feign 服务名映射
feign.ninca-crk-std.name=ninca-crk-std
feign.component-organization.name=ninca-common-component-organization
feign.ninca-common.name=ninca-common
# ninca-crk-std: 强制 ConfigurationBasedServerList + 静态 IP
ninca-crk-std.ribbon.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList
ninca-crk-std.ribbon.listOfServers=10.128.161.95:16106
# ninca-common-component-organization: 同上
ninca-common-component-organization.ribbon.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList
ninca-common-component-organization.ribbon.listOfServers=127.0.0.1:33011
# ninca-common: ❌ 无任何 Ribbon 配置
```
### 4.2 V2 deploy/v1-legacy/application.properties
```properties
ninca-crk-std.ribbon.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList
ninca-crk-std.ribbon.listOfServers=10.128.161.95:16106
# ❌ component-organization 和 ninca-common 无 Ribbon 配置
```
### 4.3 V1 生产(星中心/cw-elevator-application-V1.0.0.20211103/application.properties
```properties
feign.ninca-crk-std.name=ninca-crk-std
feign.component-organization.name=ninca-common-component-organization
feign.ninca-common.name=ninca-common
ninca-crk-std.ip=10.0.22.102:16106
# ❌ 无任何 ribbon.listOfServers 配置
# ❌ 无任何 NIWSServerListClassName 配置
# ✅ discovery.enabled=falsebootstrap.properties
```
---
## 5. NincaCrkStdRibbonConfiguration 源码删除问题
| 文件 | 状态 | 位置 |
|------|------|------|
| `NincaCrkStdRibbonConfiguration.java` | ❌ **源码已删除** | `cw-elevator-application-starter/src/main/java/cn/cloudwalk/ribbon/` 目录存在但为空 |
| `NincaCrkStdRibbonConfiguration.class` | ✅ 旧 fat JAR 中残留 | `deploy/v2-maven/cw-elevator-application-2.0.0/BOOT-INF/classes/cn/cloudwalk/ribbon/` |
| `ElevatorApplication.java` | ❌ 当前无 `@RibbonClient`/`@RibbonClients` | 启动类已清理 |
**影响**:新的 V2 构建不再包含 `NincaCrkStdRibbonConfiguration.class`。但由于 `application.properties` 中已有 `NIWSServerListClassName`,功能不受影响——属性配置和 Java 配置实现相同目的。
**残留风险**:旧 JAR 的 `NincaCrkStdRibbonConfiguration``@RibbonClients` 引用。如果旧 JAR 中的 `ElevatorApplication.class``@RibbonClients({@RibbonClient(configuration=NincaCrkStdRibbonConfiguration.class)})`,而新的构建没有这个类,会导致 `ClassNotFoundException`。需要确认 `ElevatorApplication.java` 是在哪个提交中完全移除了 `@RibbonClients`
---
## 6. PersonFeignClient URL 硬编码问题
Commit: `ff9a9ed6``fix(test): hardcode PersonFeignClient url to local stub for test env`
```java
// 改前:
@FeignClient(name = "${feign.component-organization.name:ninca-common-component-organization}",
path = "/component/person", fallback = PersonFeignClientFallback.class)
// 改后:
@FeignClient(name = "ninca-common-component-organization",
url = "http://127.0.0.1:33011",
path = "/component/person", fallback = PersonFeignClientFallback.class)
```
**改动影响**
- `name` 从可配置占位符改为硬编码
- 新增 `url` 强制指向 `127.0.0.1:33011`(本地 stub
- `name` 硬编码后,即使去掉 `url`Ribbon 客户端名也不再跟随 `feign.component-organization.name` 配置
**提交说明**`NOTE: PersonFeignClient url change is test-only, revert before production`
---
## 7. 待排查项
### P0 — V1 生产服务发现机制
V1 生产(星中心 `bootstrap.properties`)中 `spring.cloud.consul.discovery.enabled=false`,且没有任何 `ribbon.listOfServers` 配置。需要确认:
- V1 生产的 Feign 客户端到 CRK/组织组件的调用路径是否实际被执行?
- 如果执行,ConsulServerList 在 `discovery.enabled=false` 下是否仍能从 Consul HTTP API 获取实例?
- Spring Cloud Edgware.SR3 的 `ConsulServerList``discovery.enabled=false` 时到底如何行为?
**验证方法**
```bash
# 在 V1 生产进程上查 Ribbon 实际使用的 ServerList 实现类
# 通过 RibbonLoadBalancerProbeRunner 日志(如果有)
# 或通过 jstack 分析 Feign 调用链
# 查看 Spring Cloud Consul 版本(决定 ConsulServerList 行为)
unzip -p V1.jar lib/spring-cloud-consul-discovery-*.jar META-INF/MANIFEST.MF
```
### P1 — ninca-common 缺少静态 IP 配置
`ZoneFeignClient`(空间服务)和 `FileFeign`(文件服务)调用 `ninca-common`,但没有任何 `listOfServers` 配置。需要:
- 确认这些 Feign 客户端在 V1/V2 中是否实际被调用
- 如果被调用,补充 `ninca-common.ribbon.listOfServers` 配置
### P1 — PersonFeignClient 生产就绪检查
- 确认 `url = "http://127.0.0.1:33011"` 在构建生产 JAR 前被 revert
- 恢复 `name = "${feign.component-organization.name:ninca-common-component-organization}"` 的占位符形式
### P2 — NincaCrkStdRibbonConfiguration 清理残留
- 决定是否恢复源码(保留 Java config 方式)或完全依赖 properties
- 如果依赖 properties,删除 `cn/cloudwalk/ribbon/` 空目录清除残留
### P2 — V1 vs V2 Ribbon 配置对齐文档
-`docs/architecture/` 中记录 V1 生产的真实服务发现机制
- 明确 V2 增加 `ribbon.listOfServers` 的理由和适用范围
---
## 8. 关键文件定位
| 文件 | 路径 |
|------|------|
| ElevatorApplication.java | `maven-cw-elevator-application/cw-elevator-application-starter/src/main/java/cn/cloudwalk/elevator/ElevatorApplication.java` |
| NincaCrkStdRibbonConfiguration.java | **已删除**(旧路径:`.../ribbon/NincaCrkStdRibbonConfiguration.java` |
| RibbonLoadBalancerProbeRunner.java | `.../debug/RibbonLoadBalancerProbeRunner.java` |
| ElevatorUpstreamServiceNames.java | `.../debug/ElevatorUpstreamServiceNames.java` |
| PersonFeignClient.java | `maven-intelligent-cwoscomponent/intelligent-cwoscomponent-rest/.../person/feign/PersonFeignClient.java` |
| V2 deploy application.properties | `maven-cw-elevator-application/deploy/v2-maven/application.properties` |
| V2 deploy test properties | `maven-cw-elevator-application/deploy/v2-maven/application-test.properties` |
| V1 生产 config | `星中心/cw-elevator-application-V1.0.0.20211103/application.properties` |
| V1 生产 bootstrap | `星中心/cw-elevator-application-V1.0.0.20211103/bootstrap.properties` |
| V1 fat JAR internal props | `星中心/.../cw-elevator-application-V1.0.0.20211103.jar!/application.properties` |
| 提交:清理 @RibbonClients | `373b5501` |
| 提交:PersonFeignClient url 硬编码 | `ff9a9ed6` |
| 提交:添加 ZK discovery 依赖 | `6b5898d0` |
| 提交:添加 NincaCrkStdRibbonConfiguration | `0a6ac955` |
| 架构设计文档 | `docs/superpowers/specs/2026-05-01-service-discovery-architecture-design.md` |
---
## 9. 附录:Ribbon ServerList 在 Spring Cloud Edgware 中的默认行为
Spring Cloud Edgware.SR3V1 使用的版本)中,当 `spring.cloud.consul.discovery.enabled=false`
```
ConsulDiscoveryClient → @ConditionalOnProperty(enabled=true) → bean NOT created
ConsulServerList → depends on DiscoveryClient → can't be created
Fallback → ConfigurationBasedServerList (Ribbon 默认)
ConfigurationBasedServerList → reads "{name}.ribbon.listOfServers" from Environment
if absent → returns empty list
```
V2Spring Cloud Greenwich + Boot 2.1.x)表现相同。
如果 V1 生产确实没有 `listOfServers` 但 Feign 调用正常,则说明:
1. Feign 客户端的调用链路本身不在 CRK/组织组件上执行,或者
2. Spring Cloud Edgware 的 ConsulServerList 在 `discovery.enabled=false` 时有特殊处理(需要反编译 `ConsulServerList.class` 确认),或者
3. V1 生产运行时通过其他方式注入了 `listOfServers`(如 Consul KV、`SPRING_APPLICATION_JSON`、JVM 参数)
---
*本文档为代码走查与配置分析生成,需结合生产环境运行时证据进一步排查。*
@@ -0,0 +1,137 @@
# 组织组件:部署包 vs 源码批量对比与 javap 单类语义对照
> **已 supersede** 全量 `**src/main/java`582 文件)** 逐类 `javap` 核对、清单与解决方案见
> `[2026-05-06-component-org-full-java-audit-and-remediation.md](./2026-05-06-component-org-full-java-audit-and-remediation.md)`
> 及 `maven-ninca-common-component-organization/tools/out/deploy_javap_audit_main.json`。
**日期:** 2026-05-06
**部署包根路径:** `星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization`
**源码反应堆:** `源码/maven-ninca-common-component-organization`
**本地构建:** `mvn -DskipTests package`(对比时使用各模块 `target/*.jar` 与 Starter Fat JAR
---
## 1. 批量对比摘要(Lua / 配置 / JAR)
| 类别 | 结论 |
| ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Lua**`service/.../lua` ↔ 部署 `BOOT-INF/classes/lua` | `diff -rq` 无差异,9 个脚本一致。 |
| **配置** | 根目录 `application.properties``BOOT-INF/classes` 仍有多层覆盖差异;根目录存在无效行 `新增配置`(应改为 `#` 注释)。`generator*.xml` 仅在现场包内,仓库无同名 `src/main/resources`。 |
| **四模块 JAR** | 与部署 `BOOT-INF/lib``*-v2.9.2_xinghewan.jar` 逐 entry SHA-256 比对:**绝大多数 `.class` 哈希不同**;另见接口 JAR 多 `component-org/messages*.properties`Data JAR 多 `mapper/mysql/*.xml` 而仓库 data 模块未提交对应 XML。 |
| **Starter** | 现场 `BOOT-INF/classes` 含大量 config/kafka 等 `**.class`**;仓库 `starter``**OrganizationServer.java**`,编译产物几乎只有 `**OrganizationServer.class**`。 |
| **Fat JAR** | 现场 `...20210730.jar`(约 116MB)与本地 `ninca-common-component-organization-2.9.2-xinghewan.jar`(约 96MB**SHA-256 不同**,依赖与打包体积不一致。 |
---
## 2. javap 对照方法
- **命令:** `javap -p -classpath <jar 或 classes 目录> <全限定类名>`
- **含义:** 打印编译期可见的类签名、字段、方法(含 private),用于 **API 形状** 对照;**不**等价于字节码逐条指令一致(需 `javap -c``javap -v`)。
- **部署侧类路径:** 优先从解压目录 `.../BOOT-INF/classes` 加载(如 `OrganizationServer`);其余类从现场四模块 JAR 组成的 classpath 加载。
- **本地侧:** Starter 类从 `cwos-component-organization-starter/target/classes`;其余从本地四模块 `target/*.jar`
---
## 3. 抽样类:javap 是否一致
| 类 | javap`-p`)结果 |
| ----------------------------------------------------------------------- | ------------------------------- |
| `cn.cloudwalk.starter.organization.OrganizationServer` | **不一致**(见下节) |
| `cn.cloudwalk.web.organization.controller.PersonController` | **完全一致** |
| `cn.cloudwalk.web.organization.controller.CpOrgDeviceKitController` | **完全一致** |
| `cn.cloudwalk.service.organization.service.ImgPersonServiceImpl` | **不一致**(见下节) |
| `cn.cloudwalk.service.organization.service.CpImageStoreToolServiceImpl` | **不一致**(见下节;差异仅在合成 lambda 方法签名) |
---
## 4. 差异详情:`diff -u`javap 输出)
### 4.1 `OrganizationServer`
现场类继承 `SpringBootServletInitializer` 并实现 `WebApplicationInitializer`,且含 `RestTemplate``MeterRegistryCustomizer``configure(SpringApplicationBuilder)` 等;本地类为 **普通类**,仅 `main``**cloudwalkSessionContextHolder()`** Bean 方法,**无 WAR 引导与 Micrometer 相关成员**。
```diff
--- deploy javap
+++ local javap
@@ -1,12 +1,6 @@
Compiled from "OrganizationServer.java"
-public class cn.cloudwalk.starter.organization.OrganizationServer extends org.springframework.boot.web.support.SpringBootServletInitializer implements org.springframework.web.WebApplicationInitializer {
- private static org.slf4j.Logger log;
- org.springframework.data.redis.core.StringRedisTemplate stringRedisTemplate;
+public class cn.cloudwalk.starter.organization.OrganizationServer {
public cn.cloudwalk.starter.organization.OrganizationServer();
+ public cn.cloudwalk.cloud.context.CloudwalkSessionContextHolder cloudwalkSessionContextHolder();
public static void main(java.lang.String[]);
- org.springframework.web.client.RestTemplate restTemplate();
- public org.springframework.web.client.RestTemplate getWebClient();
- io.micrometer.spring.autoconfigure.MeterRegistryCustomizer<io.micrometer.core.instrument.MeterRegistry> configurer(java.lang.String);
- protected org.springframework.boot.builder.SpringApplicationBuilder configure(org.springframework.boot.builder.SpringApplicationBuilder);
- static {};
}
```
**解读:** 本地 Starter 与现场 **入口形态不一致**;若要以现场为准,需将完整 Starter 源码迁回仓库后再比对。
---
### 4.2 `ImgPersonServiceImpl`
本地相对现场 **多出** 租户访客楼层策略依赖与两个私有辅助方法(与仓库内访客楼层策略改造一致)。
```diff
--- deploy javap
+++ local javap
@@ -23,6 +23,7 @@
private org.springframework.context.MessageSource messageSource;
private cn.cloudwalk.service.organization.service.feign.ZoneFeignClient zoneFeignClient;
+ private cn.cloudwalk.service.organization.policy.TenantVisitorFloorPolicyService tenantVisitorFloorPolicyService;
@@ -56,6 +57,8 @@
public cn.cloudwalk.cloud.result.CloudwalkResult<java.lang.Boolean> syncAccountUnbind(...);
+ private java.lang.String buildCommaSeparatedFloorNames(java.lang.String, java.util.List<java.lang.String>);
+ private java.util.List<cn.cloudwalk.client.organization.result.AcsPassRuleImageResultDto> buildFloorInfoListFromOrderedZoneIds(java.lang.String, java.util.List<java.lang.String>);
private void saveSysLog(...);
```
**解读:** **源码侧领先于现场 JAR**(功能扩展);非「仅编译器噪声」。
---
### 4.3 `CpImageStoreToolServiceImpl`
差异仅体现在 **lambda 合成方法** `lambda$batchRemoveFace$5` 的参数列表(少一个 `BatchRemoveFaceParam`)。公开 API 未在上面的片段中变化,通常与 **同一源码重新编译后 lambda 编号/捕获变量** 有关,需结合 `-c` 或业务测试确认行为是否等价。
```diff
--- deploy javap
+++ local javap
@@ -36,7 +36,7 @@
- private static void lambda$batchRemoveFace$5(cn.cloudwalk.client.organization.param.BatchRemoveFaceParam, cn.cloudwalk.client.organization.service.store.param.CpBatchHandleFaceParam, java.util.List, java.lang.String);
+ private static void lambda$batchRemoveFace$5(cn.cloudwalk.client.organization.service.store.param.CpBatchHandleFaceParam, java.util.List, java.lang.String);
```
---
## 5. 结论与建议
1. **PersonController / CpOrgDeviceKitController****方法签名层面** 与现场一致,与「几乎全部 class 文件哈希不同」并存时,说明 **大量差异来自编译环境或调试信息**,而非必然的业务接口变更。
2. **OrganizationServer** 与现场 **语义层面不一致**,与仓库 Starter 仅保留最小入口一致,属 **结构性缺口**
3. **ImgPersonServiceImpl** 差异反映 **源码已增加租户访客楼层策略**,现场包未包含时需 **升级发布** 才能对齐。
4. 后续若要扩大 javap 覆盖面:可对 **变更集中的 Service** 再跑同一脚本;若需 **指令级** 一致,对关键方法追加 `javap -c` 对比。
---
## 6. 复现命令(节选)
```bash
DEPLOY_LIB=".../ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib"
D_CP="$DEPLOY_LIB/cwos-component-organization-web-v2.9.2_xinghewan.jar:..."
DEPLOY_CLS=".../BOOT-INF/classes"
L_CP=".../cwos-component-organization-web/target/...jar:..."
javap -p -classpath "$DEPLOY_CLS" cn.cloudwalk.starter.organization.OrganizationServer
javap -p -classpath ".../cwos-component-organization-starter/target/classes" cn.cloudwalk.starter.organization.OrganizationServer
```
(将 `...` 替换为本机完整路径。)
@@ -0,0 +1,85 @@
# DIFFERENT(剩余):逐类 `javap -p` 核对(现场 JAR vs 本仓库 `target/classes`
**日期:** 2026-05-06**2026-05-06 更新**OpenCvUtils + 三工具类已与现场 **IDENTICAL**DIFFERENT **18**
**依据:** `maven-ninca-common-component-organization/tools/out/deploy_javap_audit_main.json``status == "DIFFERENT"`
**证据文件:** `tools/out/different-22-javap/`(历史批量 diff);复跑审计后以 **`deploy_javap_audit_main.json`** 为准
**现场 classpath** `ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/classes` + 四模块 `*-v2.9.2_xinghewan.jar`
**本地 classpath** `interface` / `data` / `service` / `web` / `starter``target/classes`(与 `deploy_javap_audit.py` 一致)
---
## 1. 总览:差异类型与处置
| 类型 | 含义 | 本批数量(约) |
| ------------------------------ | ---------------------------------------------------------------------------------- | ------------------ |
| **A. 仅 synthetic / lambda 形变** | 无 `public`/`protected` 方法签名的变化,差异集中在 `lambda$…``null$` 或具体化类型(`List``ArrayList`) | 多数 |
| **B. 小范围 API 面变化** | 主要为 **`ChannelFileReader` 声明 `AutoCloseable`**(工具类构造已与现场对齐) | **1** |
| **C. 明确业务增强** | 新增**字段/私有方法**或组织 `detail` 等实现路径增加分支 | 2+ |
| **D. 与现场能力严重偏离** | 公开方法集合与现场**不等价** | **已处理(OpenCvUtils 已与现场 IDENTICAL** |
**说明:** 已与现场 **IDENTICAL** 的曾有 DIFFERENT 项:**`OpenCvUtils`**(与 `jar.src`/`javap` 对齐)、**`ImageUtil`/`ToolUtil`/`ImageEditUtils`**(补 **private** 无参构造,与部署 service JAR 一致)。**仍 DIFFERENT** 共 **18** 类(多为 synthetic/lambda 或业务超前)。
---
## 2. 逐类表(剩余 DIFFERENT**18**;已收敛项见 §2.1
### 2.1 已从 DIFFERENT 收敛(供追溯)
| FQN | 处置 |
| --- | --- |
| `OpenCvUtils` | 与现场 **service JAR + `jar.src`** 对齐,`javap -p` **IDENTICAL** |
| `ImageUtil``ToolUtil``ImageEditUtils` | 增加 **`private Xxx() {}`**,与部署 **private 无参构造**一致,`javap` **IDENTICAL** |
### 2.2 仍为 DIFFERENT(简表)
| # | FQN | 差异要点(见对应 `diff-*.patch`) | 分类 | 建议 |
| --- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ----- | ----------------------------------------------------------------------- |
| 1 | `…common.AbstractImagStoreService` | `lambda$distinctByKey$0` 首参 `Set``ConcurrentHashMap$KeySetView` | A | 视为编译器/具体化差异;**行为以方法体为准**(可抽查 `javap -c`) |
| 2 | `…common.JsonUtils` | `lambda$toStrList$1``List``ArrayList` | A | 无 public 变化 |
| 3 | `…common.OkhttpUtil` | 新增 `lambda$postJson$1(…)` | A | `postJson` 重载实现略调;**确认与 HTTP 头/体一致**后接受 |
| 4 | `…config.ChannelFileReader` | 本地 **`implements AutoCloseable`**`javap` 首行与现场不同);现场仍有 `close()` | B | **`CommonAppExportExecuteTask` 使用 try-with-resources**,保留 AutoCloseable;接受与现场 **javap 字符串**不一致或与现场合并策略 |
| 5 | `…service.CertRegistryHandler` | `lambda$null$4/5` 形参列表简化(Optional/交叉类型 → 单类型) | A | 典型 Stream/Optional 链改写;**公开方法未变** |
| 6 | `…CpDeviceImagePersonServiceImpl` | `personPassRule` 相关 lambda 合并/删减 | A | public 段一致;属实现整理 |
| 7 | `…CpImageStorePersonManager` | 多组 `lambda$null$`* 删除,编号下移 | A | 同上 |
| 8 | `…CpImageStorePersonSynManager` | Redis 回调 lambda 返回类型 `Long``Object` | A | JDK8 `RedisConnection` 泛型与 lambda **桥接**常见现象 |
| 9 | `…CpImageStorePersonValidateManager` | 大量 `lambda$`* 重排、嵌套 lambda 命名变化 | A | **patch 行数最大**,仍以 synthetic 为主;**建议用业务用例回归**(校验任务、延期校验) |
| 10 | `…CpImageStoreServiceImpl` | `packageCpResult`/`packageImageStoreResult`/`getAssociated` 等 lambda 编号与具体类型 | A | public 未变 |
| 11 | `…CpImageStoreToolServiceImpl` | `lambda$batchRemoveFace$5` 少一参(去掉 `BatchRemoveFaceParam`) | A | **对外接口未变**;实现层闭包捕获范围变化 |
| 12 | `…DeviceGroupRefChangeEventHandler` | `HashSet` vs `Set` 于一处 lambda | A | 无 public 变化 |
| 13 | `…DevicePersonSyncManager` | `lambda$null$2` 形参类型变化 | A | 无 public 变化 |
| 14 | `…DevicePersonSyncServiceImpl` | 删除两行 `deviceImageStoreMap` 相关 lambda | A | public 未变 |
| 15 | `…ImgPersonServiceImpl` | **新增字段** `tenantVisitorFloorPolicyService`**新增私有方法** `buildCommaSeparatedFloorNames``buildFloorInfoListFromOrderedZoneIds` | **C** | **星河湾租户访客楼层增强**;发版说明与联调必测 |
| 16 | `…OrganizationServiceImpl` | `detail`/`listNames`/`saveAreaDetails` 路径下 **lambda 数量与编号**变化(增加 `ZoneUnitResultDTO` 等参与) | A/C | **`javap` 前半段 public 方法与现场一致**;若产品关心 **detail 返回中区域/楼层展示**,做专项对比测试 |
| 17 | `…starter.task.ComponentTaskInitialize` | 现场多 `lambda$run$0(String)`,本地无 | A | 与 **定时/初始化路径**实现差异一致(如去掉一处 stream);启动后看日志与任务是否注册 |
| 18 | `…controller.DevicePersonSyncController` | `devicePersonResync`/`detail` 的 lambda 个数与参数类型 | A | **三个 public API 未变**;可做 elevator API 对拍 |
---
## 3. 与《全量审计》§4 的关系
- **OpenCvUtils** 已与现场 **`javap` IDENTICAL**(见 §2.1)。
- **ImgPersonServiceImpl(表 2.2 #15)** 为**已知的仓库超前能力**,与 **MISSING_DEPLOY(租户策略等)** 配套部署后才能在现场 classpath 出现对应依赖类。
- 其余类以 **A 类**为主:**契约测试**(接口级)可通过;**集成回归**仍建议覆盖图库同步、设备同步、组织详情。
---
## 4. 复现核对命令(可选)
```bash
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
# 设置 D_CP / L_CP 同本文档前言,然后:
javap -p -classpath "$D_CP" cn.cloudwalk.service.organization.common.OpenCvUtils > /tmp/deploy.txt
javap -p -classpath "$L_CP" cn.cloudwalk.service.organization.common.OpenCvUtils > /tmp/local.txt
diff -u /tmp/deploy.txt /tmp/local.txt
```
批量产物已由流水线写入:`tools/out/different-22-javap/diff-<ShortName>.patch`
---
**关联:** `[2026-05-06-component-org-full-java-audit-and-remediation.md](./2026-05-06-component-org-full-java-audit-and-remediation.md)` §4DIFFERENT 分类说明)
@@ -0,0 +1,163 @@
# 组织组件:全量 Javasrc/main/java)与部署包逐类核对及解决方案
**日期:** 2026-05-06**2026-05-06 已执行 P0~P2 落地**,见下节)
**范围:** `maven-ninca-common-component-organization` 下全部 `**src/main/java`** 源文件,与部署目录
`部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730`
`**BOOT-INF/classes` + 四模块 `*-v2.9.2_xinghewan.jar**` 中的字节码 **逐类 `javap -p` 比对**
---
## 0. 执行记录(P0 → P1 → P2
| 阶段 | 内容 | 结果 |
| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **P0** | 使用 **JDK 8**`JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64`)执行 `mvn clean package -DskipTests`;抽查 Fat JAR 内嵌 `cwos-component-organization-service-*.jar` 中含 `TenantVisitorFloorPolicyService``OrganizationRedisLuaConfiguration``ElevatorFeignClientFallback` 等新增类。 | **通过**:产物 `cwos-component-organization-starter/target/ninca-common-component-organization-2.9.2-xinghewan.jar`(约 96MB)。**说明:** 必须用 JDK 8 编译,JDK 11+ 会因注解处理器模块封装报错。 |
| **P1** | 用 **CFR 0.152**`tools/cfr-0.152.jar`Maven Central 自动下载)反编译现场 `**BOOT-INF/classes/cn/cloudwalk/starter`** 打成的 mini-jar,源码迁入 `**starter/src/main/java**``**SelfRegistryHandler**` 从现场 **service** JAR 反编译迁入 `**service/.../SelfRegistryHandler.java`**,并手工修正泛型与 `**CloudwalkResult`/`AtomicDeviceGetResult**` 等与 `**CertRegistryHandler**` 对齐;修正 `**MbGenerator`/`ComponentTaskInitialize**` 反编译瑕疵。 | **通过**`deploy_only_outer_types` **由 23 降为 0**(源码侧已覆盖原「仅部署」顶层类型);全仓 `**src/main/java` 现为 605**+23)。 |
| **P2** | 重新运行 `**deploy_javap_audit.py`**(对齐后的契约快照)。 | **MISSING_DEPLOY 仍为 18****DIFFERENT 已降至 18**`OpenCvUtils`、三工具类构造等已与现场 **IDENTICAL**);**IDENTICAL 569**(以最新 `tools/out/deploy_javap_audit_main.json` 为准)。 |
**复跑命令(JDK 8):**
```bash
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
cd maven-ninca-common-component-organization
mvn -q clean package -DskipTests
python3 tools/deploy_javap_audit.py --workers 16 \
--write-json tools/out/deploy_javap_audit_main.json \
--write-markdown tools/out/deploy_javap_audit_main.md
```
**自动化脚本路径:** `maven-ninca-common-component-organization/tools/deploy_javap_audit.py`
**产物:** `tools/out/deploy_javap_audit_main.json`(全量每文件状态)、`tools/out/deploy_javap_audit_main.md`(节选表)。
**延续审核(Lua / lib / Data JAR XML / 配置):** [`2026-05-06-component-org-source-vs-deploy-continued-audit.md`](./2026-05-06-component-org-source-vs-deploy-continued-audit.md)
**现场替换清单:** [`2026-05-06-component-org-release-checklist.md`](./2026-05-06-component-org-release-checklist.md)
---
## 1. 汇总统计(P2 复跑后)
| 状态 | 数量 | 含义 |
| ------------------------ | ------- | ----------------------------------------------------------------------- |
| **IDENTICAL** | **569** | 部署包与当前 `mvn compile` 产物 `**javap -p` 完全一致**(顶层类型签名一致)。 |
| **DIFFERENT** | **18** | 同 FQN 下字段/方法列表等与现场 **不一致**(含业务变更或编译器 synthetic/lambda 差异)。 |
| **MISSING_DEPLOY_JAVAP** | **18** | 本地可解析,部署 classpath **无该类****仓库新增、现场 JAR 未包含**(需 **发布 P0 制品** 后线上才有)。 |
另:**「仅部署侧顶层类型」** 经 **P1 补源码** 后,脚本统计 `**deploy_only_outer_types = 0`**(见 `deploy_javap_audit_main.json`)。
---
## 2. 总体解决方案(决策树)
1. **以现场为权威(线上稳定优先)**
-**现场 Fat JAR** 或其中 **四模块 JAR** 纳入制品库;CI 对发布分支构建产物做 `**javap` 契约校验**(或与现场 JAR 二进制对齐)。
- 对下面 §4 **DIFFERENT** 类:若需与线上一致,应从 **与现场同源的标签/分支** 迁出代码,或 **接受当前仓库为超前版本** 仅做回归后再发版。
2. **以仓库为权威(迭代与星河湾定制优先)**
- **发布新版 Fat JAR**,替换现场 `ninca-common-component-organization-V2.9.2_20210730.jar`
- **MISSING_DEPLOY18** 全部为仓库侧新增能力(租户访客策略、Redis Lua 装配、大量 Feign Fallback)→ **必须随新版本部署**,否则线上不存在这些类。
- **补齐 Starter 源码与资源**(§5),使 **本仓库可完整复现** 现场同等启动行为。
3. **非 Java 资产(与本次 javap 并行结论)**
- **Lua**:源码 `service/.../lua` 与部署 `BOOT-INF/classes/lua` **已批量 diff 一致**
- **MyBatis XML**:现场 Data JAR 内含 `**mapper/mysql/*.xml`**,仓库 data 模块 **未见同名 XML 提交** → 发布前需 **补齐 XML 与仓库一致****确认由依赖 JAR 提供**
- **配置**:根目录 `application.properties` 覆盖 BOOT-INF;修正无效行 `**新增配置`**,核对 cron 与 **xhw*** 等业务常量。
---
## 3. MISSING_DEPLOY_JAVAP18):仓库有、现场包无 —— 处置
**结论:** 现场运行的是 **旧世代制品**;下列类型已在仓库 **新增或拆分**,需 **升版部署** 后才能与线上一致(或在线上删除引用——不推荐)。
| # | FQN | 源文件 |
| ---- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| 1 | `cn.cloudwalk.data.organization.entity.TenantVisitorFloorPolicy` | `data/.../TenantVisitorFloorPolicy.java` |
| 2 | `cn.cloudwalk.data.organization.mapper.TenantVisitorFloorPolicyMapper` | `data/.../TenantVisitorFloorPolicyMapper.java` |
| 3 | `cn.cloudwalk.service.organization.config.GroupPersonSynExecutorConfiguration` | `service/.../GroupPersonSynExecutorConfiguration.java` |
| 4 | `cn.cloudwalk.service.organization.config.GroupPersonSynPoolProperties` | `service/.../GroupPersonSynPoolProperties.java` |
| 5 | `cn.cloudwalk.service.organization.config.OrganizationRedisLuaConfiguration` | `service/.../OrganizationRedisLuaConfiguration.java` |
| 6 | `cn.cloudwalk.service.organization.policy.TenantVisitorFloorPolicyService` | `service/.../TenantVisitorFloorPolicyService.java` |
| 718 | 各类 `*FeignClientFallback` / `EnterpriseFeignClientFallback` / `PineappleEngineClientFallBack` 等 | `service/.../feign/*.java``corp/feign/*.java` |
**解决方案:**
1. **数据库:** 已若有租户访客策略表结构,保证 **现场 MySQL 与迁移脚本** 与文档一致。
2. **发布:** 使用本仓库 `**mvn package` 产出的 Fat JAR** 替换现场;配置中打开/对齐 **Redis Lua、线程池、Feign** 相关项。
3. **验证:** 租户访客相关 API + 图库同步 + Feign 降级路径 **集成测试**
---
## 4. DIFFERENT18):签名不一致 —— 分类与处置
### 4.1 Starter 入口(结构性)
| FQN | 说明 | 建议 |
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `cn.cloudwalk.starter.organization.OrganizationServer` | 现场:**继承 `SpringBootServletInitializer`**,含 **Micrometer、RestTemplate、WAR `configure`** 等;仓库:**极简 `main` + `CloudwalkSessionContextHolder` Bean**。 | **二选一:** (A) 从历史制品/分支 **回收完整 `OrganizationServer` 与 Starter 配置类源码** 入仓库;(B) 明确 **仅支持可执行 Jar 模式**,现场改造启动脚本与监控接入以匹配仓库。 |
### 4.2 Service 公共工具与抽象类(多为编译/细节差异风险)
含:`AbstractImagStoreService``ImageEditUtils``ImageUtil``JsonUtils``OkhttpUtil``OpenCvUtils``ToolUtil``ChannelFileReader`
**逐类核对(DIFFERENT 剩余清单):** [`2026-05-06-component-org-different-22-per-class-review.md`](./2026-05-06-component-org-different-22-per-class-review.md)`OpenCvUtils` 已与现场对齐;其余多为 synthetic/**`ImgPersonServiceImpl`** 业务超前等)。
**建议:**
1. 对每一类执行 `**javap -p` diff 存档**(已由脚本隐含);若仅 **lambda/synthetic 行** 变化 → **加强集成测试**;若 **公开方法增减** → 走 **代码评审与回归**
2. 锁定 **JDK 8****Maven 编译器插件** 版本,减少无谓字节码漂移。
### 4.3 图库 / 设备同步核心业务类
含:`CertRegistryHandler``CpDeviceImagePersonServiceImpl``CpImageStorePersonManager``CpImageStorePersonSynManager``CpImageStorePersonValidateManager``CpImageStoreServiceImpl``CpImageStoreToolServiceImpl``DeviceGroupRefChangeEventHandler``DevicePersonSyncManager``DevicePersonSyncServiceImpl``ImgPersonServiceImpl``OrganizationServiceImpl`
**建议:**
1. `**ImgPersonServiceImpl`**:仓库已含 **租户访客楼层策略** 相关成员与方法 → **领先现场**;发版或回退策略见 §2。
2. `**CpImageStoreToolServiceImpl`** 等:重点复核 **批量删脸、同步日志** 等与现场故障(如 **COUNT 溢出、图片为空**)相关路径。
3.**电梯 / Portal Feign** 联调验证。
### 4.4 Web
| FQN | 建议 |
| --------------------------------------------------------------------- | ---------------------------------------------------------------- |
| `cn.cloudwalk.web.organization.controller.DevicePersonSyncController` | `**javap` 与现场不一致**:核对接口路径、参数 DTO、是否新增接口;做 **API 对拍**(现场 vs 新版本)。 |
---
## 5. 部署包多出、源码未收录问题(P1 已处理)
`**deploy_only_outer_fqns` 约 23 项**(含 `**SelfRegistryHandler`**、Starter 下 config/kafka/multipart/task/mybatis 等)已通过 **§0 P1**(CFR 反编译 + 手工修正)迁入仓库;**当前审计脚本 `deploy_only_outer_types = 0`**。
后续维护应以 **本仓库源码** 为准,避免再次只剩 `.class`;生成器 `**MbGenerator`** 内含示例 JDBC 连接串,仅本地生成代码时使用,**勿将密码提交到共享分支外的场景滥用**。
---
## 6. IDENTICAL569
约占 `**src/main/java`605)的 **94.0%**,明细见 `**deploy_javap_audit_main.json`** 中 `status == "IDENTICAL"` 条目。
---
## 7. 与先前抽样文档的关系
早期抽样结论仍有效:`**PersonController``CpOrgDeviceKitController**` 在本次 **全量核对中均为 IDENTICAL****全量结果** 显示 `**DevicePersonSyncController` 为 DIFFERENT**,需在发版前单独核对。
更早期的简报:`[2026-05-06-component-org-deploy-vs-source-batch-diff-and-javap.md](./2026-05-06-component-org-deploy-vs-source-batch-diff-and-javap.md)` —— 已由 **本文件 + JSON** 取代为 **权威全量清单**
---
## 8. 附录:测试源码(可选)
若需包含 `**src/test/java`**,运行:
`python3 tools/deploy_javap_audit.py --all-sources ...`
预期大量 `**MISSING_DEPLOY_JAVAP**`(测试类不会打进现场 Fat JAR),**一般仅用于开发自检**,不作为与现场等价对照。
@@ -0,0 +1,212 @@
# Component-Org 生产环境错误审查报告
**日期**: 2026-05-06
**数据源**: `部署包/ninca_common_component_organization_01-ninca_common_component_organization/...209/logs/`
**范围**: error.log (21个滚动文件, ~600MB), 覆盖 2026-02-19 ~ 2026-05-06 (2.5个月)
**编译状态**: 本次代码变更后 BUILD SUCCESS (0 errors)
---
## 1. 错误总览
| # | 错误类型 | 次数 | 严重度 | 已定位源码 | 本次变更相关 |
|---|---------|------|--------|----------|------------|
| 1 | AggDeviceImageStoreFeignClient sync failed | 36,557 | 🟡 | Fallback.java:125 | ❌ 否 |
| 2 | addFace 图片为空 (5人×7图库) | 36,560 | 🟡 | CpImageStoreToolServiceImpl.java:395 | ❌ 否 |
| 3 | device updatePerson error | 4,749 | 🟡 | CpOrgDeviceKitController.java:160 | ❌ 否 |
| 4 | 下载图片异常 LoadBalancer | 1,000 | 🟡 | CpImageStoreToolServiceImpl.java:210 | ❌ 否 |
| 5 | addValidateData removeJob timeout | 688 | 🟠 | CpImageStorePersonValidateManager.java:141 | ❌ 否 |
| 6 | AtomicDeviceFeignClient list failed | 368 | 🟡 | Fallback.java:85 | ❌ 否 |
| 7 | addValidateData addOrModJob timeout | 322 | 🟠 | CpImageStorePersonValidateManager.java:185 | ❌ 否 |
| 8 | VehicleFeignClient failed | 68 | 🟢 | Fallback.java:47 | ❌ 否 |
| 9 | 图片角度识别失败 | 35 | 🟢 | ImageEditUtils.java:145 | ❌ 否 |
| 10 | ElevatorFeignClient listByImageId failed | 15 | 🟢 | Fallback.java:31 | ❌ 否 |
| 11 | 设备不存在 | 71 | 🟢 | AtomicDeviceFallback | ❌ 否 |
| 12 | MySQL Communications link failure | 13 | 🟠 | JDBC驱动层 | ❌ 否 |
**总计**: ~80,446 个 ERROR 日志条目, **全部与本次代码变更无关**
---
## 2. 逐错误分析
### 2.1 AggDeviceImageStoreFeignClient sync failed (36,557次)
**日志示例**:
```
[2026-02-19 08:43:17] [hystrix-cwos-portal-55] [ERROR]
[c.c.r.a.d.f.AggDeviceImageStoreFeignClient$Fallback] [125]
call AggDeviceImageStoreFeignClient sync device imageStore failed
```
**源码位置**: `maven-intelligent-cwoscomponent` (非本次变更范围)
**根因分析**:
- 下游服务 `cwos-portal` (设备图库聚合服务) 不可达
- Hystrix 熔断触发 fallback
- 线程名 `hystrix-cwos-portal-*` 表明所有调用均失败
**影响**: 设备图库同步中断,人员变更不推送到终端设备
**建议**: 检查 cwos-portal 服务健康状态与网络连通性
---
### 2.2 addFace 图片为空 (36,560次)
**日志示例**:
```
[2026-02-19 08:41:25] [SimpleAsyncTaskExecutor-67386] [ERROR]
[c.c.s.o.s.CpImageStoreToolServiceImpl] [457]
图库[c8c6722505a0481a8f9fc24df122d8d3]添加人脸[1690239736450007040]异常:图片为空
```
**源码位置**: `CpImageStoreToolServiceImpl.java` L365-401 (生产 JAR: L457)
**根因分析**:
- 5个人员 (personId 1611164xxx + 1690239xxx) 在 7 个图库 (如 c8c67225, d2e18254, 7a83a5d2) 中反复失败
- `getComparePicture()` 返回空/null → feature提取失败 → 异常
- **重试无限循环**: 每次 sync 任务触发都重试,无退避/告警抑制
**影响**:
- 日志噪音 (占全部错误 45%)
- 线程池浪费 (SimpleAsyncTaskExecutor 创建大量线程)
- 图库同步卡在这些人身上,后续人员无法同步
**建议**:
- 对持续失败的人员添加 skip 列表或退避策略
- 对空图片场景添加前置校验 (L374 之前检查 getComparePicture())
---
### 2.3 device updatePerson error (4,749次)
**日志示例**:
```
[2026-02-19 08:37:04] [http-nio-17016-exec-14597] [ERROR]
[c.c.w.o.c.CpOrgDeviceKitController] [160]
device updatePerson errorcause
```
**源码位置**: `CpOrgDeviceKitController.java` L160 — controller 层捕获异常
**根因分析**:
- `cause` 后为空 — 空指针异常
- HTTP 请求线程 (http-nio-17016-exec) 处理设备更新回调
- 下游设备管理服务返回 null 或超时
**影响**: 设备端人员信息更新失败,但不影响组织侧数据
**建议**: 添加 null-safety 检查,打印完整 stack trace
---
### 2.4 下载图片异常 LoadBalancer (1,000次)
**日志示例**:
```
Caused by: com.netflix.client.ClientException:
Load balancer does not have available server for client: cwos-p
```
**源码位置**: `CpImageStoreToolServiceImpl.java` L210: `fileStorageManager.fileDownload()`
**根因分析**:
- Ribbon 负载均衡器找不到可用实例
- 客户名 `cwos-p` (cwos-portal) — 文件存储服务不可达
- 与错误 #1 (AggDeviceImageStoreFallback) 同源 — cwos-portal 整体不可用
**影响**: 无法下载远程图片进行人脸特征提取
**建议**: 与 #1 同 — 检查 cwos-portal 服务
---
### 2.5 addValidateData removeJob timeout (688次)
**日志示例**:
```
[2026-02-27 15:14:26] [group-person-syn-pool-110525] [ERROR]
[c.c.s.o.s.CpImageStorePersonValidateManager] [141]
CpImageStorePersonValidateManager addValidateData removeJob time out
```
**源码位置**: `CpImageStorePersonValidateManager.java` L136-141
**根因分析**:
```java
// L140: validateJobGroupLock 获取锁成功,但后续操作超时
log.error("CpImageStorePersonValidateManager addValidateData removeJob time out");
```
- `validateJobGroupLock` 获取 Redis 锁后,scheduler 操作超时
- 线程池 `group-person-syn-pool` 并发竞争 Redis 锁
- 688次集中在 `2026-02-27 15:14:26` — 同一秒内 688 个线程同时尝试
**影响**: 人员校验任务的 Quartz trigger 移除失败,可能导致过期任务堆积
**建议**:
- 增加 Redis 锁超时时间
- 限流 removeJob 操作 (避免 688 并发)
---
### 2.6 AtomicDeviceFeignClient list failed (368次)
**日志示例**:
```
[ERROR] call AtomicDeviceFeignClient list device failed
```
**源码位置**: `AtomicDeviceFeignClient$Fallback.java` L85
**根因分析**: 原子设备管理服务不可达 (Hystrix fallback)
**建议**: 检查设备服务健康状态
---
### 2.7 addValidateData addOrModJob timeout (322次)
**相同根因**#5 — Redis 锁竞争导致 Quartz scheduler 操作超时。
---
### 2.8-2.12 低频率错误
| 错误 | 根因 |
|------|------|
| VehicleFeignClient failed (68次) | 车牌服务不可达 |
| 图片角度识别失败 (35次) | 图片格式不兼容 Commons Imaging |
| ElevatorFeignClient failed (15次) | 电梯服务不可达 |
| 设备不存在 (71次) | 设备已删除但同步任务未清理 |
| MySQL 连接丢失 (13次) | 数据库连接池耗尽/超时 |
---
## 3. 与本次代码变更的关系
**本次变更范围**:
1. `TenantVisitorFloorPolicy` (Entity + Mapper)
2. `TenantVisitorFloorPolicyService` (新增)
3. `ImgPersonServiceImpl` (detail + listByPage 策略插入)
4. Elevator `PersonRuleServiceImpl` (已预先清理)
5. Elevator `DavinciStorageBeansConfiguration` (bigFileDownload 补齐)
**错误对应关系**:
- 全部 12 类错误均发生在 **本次变更之前** (最早 2026-02-19)
- 无任何错误与 `TenantVisitorFloorPolicy*``ImgPersonServiceImpl` 策略插入相关
- 电梯 `addVisitor` 阶段 3 删除后,`PersonRuleServiceImpl` 不再访问策略表,消除了一类潜在错误
**结论**: 本次变更 **未引入任何新错误**
---
## 4. 改进建议
| 优先级 | 建议 | 影响范围 |
|--------|------|---------|
| 🔴 P0 | 修复 addFace 无限重试 (36,560次) — 添加 skip list | CpImageStoreToolServiceImpl |
| 🔴 P0 | 排查 cwos-portal 服务不可达 (36,557次) | 运维/基础设施 |
| 🟠 P1 | Redis 锁竞争优化 (688+322次) — 限流 removeJob/addOrModJob | CpImageStorePersonValidateManager |
| 🟠 P1 | device updatePerson 空指针 — 添加 null-safety + stack trace | CpOrgDeviceKitController |
| 🟡 P2 | 添加 Feign 健康检查告警 | 运维监控 |
@@ -0,0 +1,73 @@
# 组织组件:发布替换现场旧包 — 操作清单
**适用:** 用本仓库 `**mvn clean package -DskipTests`****JDK 8**)产出的 Fat JAR,替换
`部署包/.../ninca-common-component-organization-V2.9.2_20210730/` 目录下的旧 `**…20210730.jar`**。
**构建产物(每次发布后更新哈希):**
| 项 | 值 |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| **文件** | `maven-ninca-common-component-organization/cwos-component-organization-starter/target/ninca-common-component-organization-2.9.2-xinghewan.jar` |
| **约大小** | ~96 MB |
| **SHA-256(示例,2026-05-06 构建)** | `406409e377b0c5b57e2f9baeb3692c9e7b7cf739731fb389433566056bdaafce` |
构建命令:
```bash
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
cd maven-ninca-common-component-organization
mvn clean package -DskipTests
sha256sum cwos-component-organization-starter/target/ninca-common-component-organization-2.9.2-xinghewan.jar
```
---
## 1. 发布前核对(源码侧已就绪项)
| 项 | 状态 |
| ----------------------------------------------------------------- | --- |
| Data 模块 `**mapper/mysql/*.xml`33** 已进 `**src/main/resources`** | ✅ |
| Interface 模块 `**component-org/messages*.properties**` 已从现场 JAR 回填 | ✅ |
| Starter / `**SelfRegistryHandler**` 等已与现场对齐(见主Remediation文档) | ✅ |
替换现场 JAR 后,审计脚本中的 **MISSING_DEPLOY_JAVAP18** 应在 **现场进程 classpath** 中消失(需 **重新跑一次 `deploy_javap_audit.py`****新** 部署目录验证)。
---
## 2. 现场替换步骤(运维)
1. **备份**:复制当前 `ninca-common-component-organization-V2.9.2_20210730.jar` 为带日期后缀的 `.bak`
2. **停机**:按现有 `**stop.sh`** / systemd 停止进程。
3. **覆盖**:将构建 Fat JAR 复制到部署目录,**文件名可与现场脚本一致**(若脚本写死 `…20210730.jar`,可改名或改脚本指向新名)。
4. **配置**:保留 `**application.properties`(根目录)** 与环境占位符;合并仓库 `**run-verify`** 中与现场一致的键若需要。**勿**把本地测试库地址直接拷到生产。
5. **启动****JDK 8** 执行 `**java -jar`**(参数与现网一致,`spring.config.location` 等)。
6. **探活**`/actuator/health`(或约定端口 **management.port**)、错误日志无连续异常。
---
## 3. 发布后代码审计(可选)
在新的现场解压目录或新 Fat JAR 上:
```bash
python3 tools/deploy_javap_audit.py --workers 16 \
--write-json tools/out/deploy_javap_audit_after_upgrade.json
```
预期:**MISSING_DEPLOY** 显著下降或为 **0**(取决于是否仍用旧解压目录对比)。
---
## 4. 仍存在的差异(预期)
- `**javap` DIFFERENT22**:多为仓库 **超前演进**;若发布新版本即以仓库为准,需在 **预发做接口对拍**
- `**BOOT-INF/lib` 文件名**:与 Spring Boot repackage 插件版本有关;以 **运行冒烟** 为准。
---
**关联:** `[2026-05-06-component-org-source-vs-deploy-continued-audit.md](./2026-05-06-component-org-source-vs-deploy-continued-audit.md)` · `[2026-05-06-component-org-full-java-audit-and-remediation.md](./2026-05-06-component-org-full-java-audit-and-remediation.md)`
@@ -0,0 +1,101 @@
# 组织组件:源码与现场旧部署包 — 延续审核摘要
**日期:** 2026-05-06
**对照对象:**
- **源码构建:** `maven-ninca-common-component-organization`JDK 8`mvn compile` / Fat JAR
- **现场:** `部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730`
---
## 1. Java 字节码(`javap` 全量脚本)
已复跑 `tools/deploy_javap_audit.py``src/main/java` **605** 文件):
| 状态 | 数量 |
| ----------------------- | --- |
| IDENTICAL | 565 |
| DIFFERENT | 22 |
| MISSING_DEPLOY_JAVAP | 18 |
| deploy_only_outer_types | 0 |
明细见:`maven-ninca-common-component-organization/tools/out/deploy_javap_audit_main.json`
---
## 2. Lua
`cwos-component-organization-service/src/main/resources/lua` 与现场 `**BOOT-INF/classes/lua`**`diff -rq` **无差异**
---
## 3. Fat JAR — `BOOT-INF/lib` 文件名级对比
- **现场:** 255 个嵌套 JAR**本地 Fat JAR** 260 个。
- Spring Boot **2.7.x repackage** 常把嵌套 JAR 命名为 `***-1.0.jar`**;现场解压目录为原始 `*** .jar`**。对文件名做 `**-1.0.jar``.jar` 规范化** 后再 `comm`
**仍不对称的典型原因(非缺依赖):**
| 类型 | 说明 |
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **四模块命名** | 现场:`cwos-component-organization-*-v2.9.2_xinghewan.jar`;本地:`cwos-component-organization-*-2.9.2-xinghewan.jar`(坐标/版本串写法不同)。 |
| **opencv / javacpp** | 现场 lib 内单独 `**opencv-*.jar` / `javacpp*.jar`**;本地 Fat 中可能以 不同条目名或合并策略 出现,需以 `**jar tf` + 类路径加载** 校验运行时是否等价。 |
| **spring-boot-jarmode-layertools** | 本地 Fat 含 `**spring-boot-jarmode-layertools-2.7.18.jar`**(来自 `**spring-boot-maven-plugin` 2.7.18**),现场旧包 **无**:属于 **打包插件版本差异**,一般 **不影响** 默认 `java -jar` 启动。 |
| *cloudwalk-common- 重复** | 规范化集合里本地可能同时出现 `**cloudwalk-common-data-3.5.2-Brussels-SRX.jar``cloudwalk-common-data-3.5.2.jar`**(依赖收敛边界不同),需警惕 **类加载优先级**,建议在发布说明中 **固定一条依赖链**。 |
**结论:** lib **清单不宜仅用文件名逐字相等**;发布前应在 **预发**`**java -jar` + 冒烟** 验证;若需严格二进制一致性,应对齐 `**spring-boot-maven-plugin` / BOM** 与 CloudWalk **systemPath** 依赖集合。
---
## 4. Data 模块 JAR — MyBatis XML
| 制品 | `mapper/mysql/*.xml` |
| --------------------------------------------------------------------------------- | -------------------- |
| 现场 `**cwos-component-organization-data-v2.9.2_xinghewan.jar`** | **33** |
| 本地(**2026-05-06 已回填后**`**cwos-component-organization-data-2.9.2-xinghewan.jar`** | **33** |
**已执行:** 从现场 JAR 解压 `**cn/cloudwalk/data/organization/mapper/mysql/*.xml`** 至
`cwos-component-organization-data/src/main/resources/cn/cloudwalk/data/organization/mapper/mysql/`**33** 个文件),`**mvn -pl ... -am package` 与全反应堆 `mvn clean package` 均通过**`jar tf` 可见全部 XML。
**说明:** `**TenantVisitorFloorPolicyMapper`** 仅使用 **注解 SQL**`@Select`),不依赖新增 XML 文件。
---
## 5. Service 模块 JAR — 哈希
| 文件 | SHA-256(前缀) |
| ------------------------------------------------------------- | --------------- |
| 现场 `cwos-component-organization-service-v2.9.2_xinghewan.jar` | `738aacf7f562…` |
| 本地 `cwos-component-organization-service-2.9.2-xinghewan.jar` | `c007f4ece70a…` |
`**javap` DIFFERENT/MISSING** 结论一致:**字节码整体不一致**,其中 **18 类仅本地有**、**22 类签名差异**(含业务演进)。
---
## 6. 配置文件 — `application.properties`
现场 `**BOOT-INF/classes/application.properties`**216 行)与 **进程根目录 `application.properties`**(222 行)存在大量差异(diff 体量 **约 441 行** unified 上下文);此前已记录:线程池、**xhw***、Kafka、实例 ID、占位符主机名等。
**建议:****根目录覆盖文件** 为运行真相;修正无效行 `**新增配置`**;发布新版本时附带 **配置迁移清单**Consul/Redis/MySQL/Kafka 占位符)。
---
## 7. 下一步(按风险)
1. ~~**Data JAR 补齐 Mapper XML**~~(§4 已完成)。
2. ~~*Interface `component-org/messages.properties**`~~(已从现场 interface JAR 回填至` cwos-component-organization-interface/src/main/resources/component-org/`)。
3. **发布本地 Fat JAR** 替换现场旧包 —— 收敛 **MISSING_DEPLOY 18**;操作清单见 `**[2026-05-06-component-org-release-checklist.md](./2026-05-06-component-org-release-checklist.md)`**。
4. **DIFFERENT 22** —— 按业务验收决定是否接受(仓库超前)或回源。
5. **lib 清单** —— 仅作辅助;以 **运行时验证** 为准。
---
**关联文档:** `[2026-05-06-component-org-full-java-audit-and-remediation.md](./2026-05-06-component-org-full-java-audit-and-remediation.md)`P0~P2 执行记录与 Starter 补源码)。
@@ -0,0 +1,428 @@
mysql: [Warning] Using a password on the command line interface can be insecure.
cw_is_device_image_store ID varchar NO PRI 主键
cw_is_device_image_store DEVICE_ID varchar NO NULL MUL 设备Id
cw_is_device_image_store IMAGE_STORE_ID varchar NO NULL 图库Id
cw_is_device_image_store TYPE smallint NO NULL 设备图库变更类型(1:新增,2:删除)
cw_is_device_image_store CREATE_TIME bigint YES NULL 创建时间 时间戳
cw_is_device_image_store LAST_UPDATE_TIME bigint YES NULL 修改日期 时间戳
cw_is_device_image_store FINISH_PULL_TIME bigint YES NULL 结束拉取时间 时间戳
cw_is_device_image_store STATUS smallint NO 0 状态(0:未通知,1:已通知)
cw_is_device_person ID varchar NO NULL PRI 主键
cw_is_device_person DEVICE_ID varchar NO NULL MUL 设备ID
cw_is_device_person PERSON_ID varchar NO NULL 人员ID
cw_is_device_person TYPE smallint YES NULL 类型(0:正常,1:删除)
cw_is_device_person CREATE_TIME bigint YES NULL 创建时间 时间戳
cw_is_device_person LAST_UPDATE_TIME bigint YES NULL 修改日期 时间戳
cw_is_device_person_sync_log ID varchar NO PRI
cw_is_device_person_sync_log DEVICE_ID varchar NO NULL MUL 设备ID
cw_is_device_person_sync_log IMAGE_STORE_ID varchar NO NULL MUL 图库ID
cw_is_device_person_sync_log PERSON_ID varchar NO NULL 人员ID
cw_is_device_person_sync_log GROUP_PERSON_REF_ID varchar NO NULL MUL 图库人员关联ID
cw_is_device_person_sync_log IMAGE_ID varchar YES NULL 人脸ID
cw_is_device_person_sync_log STATUS smallint YES 0 同步状态(0:设备未拉取,1:设备已拉取,2:设备上报成功,3:设备上报失败)
cw_is_device_person_sync_log CODE varchar YES NULL 错误编码
cw_is_device_person_sync_log ERROR_MESSAGE varchar YES NULL 失败原因
cw_is_device_person_sync_log CREATE_TIME bigint YES NULL 创建时间 时间戳
cw_is_device_person_sync_log LAST_UPDATE_TIME bigint YES NULL 修改日期 时间戳(新增/修改人员信息时更新)
cw_is_device_person_sync_log COUNT smallint YES 0 计数器
cw_is_device_person_sync_log LAST_PULL_TIME bigint YES NULL 最近拉取时间 时间戳
cw_is_device_person_sync_log LAST_REPORT_TIME bigint YES NULL 最近上报时间 时间戳
cw_is_device_person_sync_log UPDATE_INFO varchar YES NULL 处理信息
cw_is_device_person_sync_log EXPIRY_BEGIN_DATE bigint YES NULL 人员有效期开始时间 时间戳
cw_is_device_person_sync_log EXPIRY_END_DATE bigint YES NULL 人员有效期结束时间 时间戳
cw_is_device_person_sync_log DEVICE_PERSON_REF_ID varchar NO NULL 设备-人员表主键
cw_is_device_person_sync_log IS_DEL smallint YES 0 逻辑删除字段 0未删除 1删除
cw_is_group_person_ref ID varchar NO NULL PRI
cw_is_group_person_ref IMAGE_STORE_ID varchar YES NULL MUL 图库id
cw_is_group_person_ref PERSON_ID varchar YES NULL MUL 人员id
cw_is_group_person_ref EXPIRY_BEGIN_DATE decimal YES NULL 人员有效期开始时间 时间戳
cw_is_group_person_ref EXPIRY_END_DATE decimal YES NULL 人员有效期结束时间 时间戳
cw_is_group_person_ref STATUS smallint YES 0 MUL 人员有效状态 -1删除、0正常、1失效
cw_is_group_person_ref CREATE_USER_ID varchar YES NULL
cw_is_group_person_ref CREATE_TIME decimal YES NULL
cw_is_group_person_ref LAST_UPDATE_USER_ID varchar YES NULL
cw_is_group_person_ref LAST_UPDATE_TIME decimal YES NULL
cw_is_group_person_ref IS_DEL smallint NO 0 MUL 逻辑删除字段 0未删除 1删除
cw_is_group_person_ref GENDER smallint YES NULL 性别
cw_is_group_person_ref AGE int YES NULL 年龄
cw_is_group_person_ref GROUP_TIME bigint YES NULL 入库时间
cw_is_group_person_ref GROUP_STATUS smallint YES NULL 0:未建模 1:建模中 2:建模完成 3:建模失败
cw_is_group_person_ref ERROR_MESSAGE varchar YES NULL 建模失败时的失败原因
cw_is_group_person_ref EXPIRY_BEGIN_DATE_STATUS smallint YES 0 人员有效开始时间状态(0:未处理 1:已处理)
cw_is_group_person_ref EXPIRY_END_DATE_STATUS smallint YES 0 人员有效期结束时间状态(0:未处理 1:已处理)
cw_is_group_person_ref VALID_DATE_CRON varchar YES NULL 多时间段cron表达式
cw_is_image_store_associated_ref ID varchar NO NULL PRI 唯一标识
cw_is_image_store_associated_ref IMAGE_STORE_ID varchar NO NULL MUL 图库id
cw_is_image_store_associated_ref ASSOCIATED_OBJECT_ID varchar NO NULL 关联对象id
cw_is_image_store_associated_ref ASSOCIATED_OBJECT_ID_TYPE int NO NULL 关联对象的类型,1:机构,2:标签,3:个人
cw_is_image_store_associated_ref ASSOCIATED_ACTION int YES NULL 0:包含,1:排除
cw_is_image_store_associated_ref EXPIRY_BEGIN_DATE decimal YES NULL 人员有效期开始时间 时间戳
cw_is_image_store_associated_ref EXPIRY_END_DATE decimal YES NULL 人员有效期结束时间 时间戳
cw_is_image_store_associated_ref CREATE_TIME decimal YES NULL
cw_is_image_store_associated_ref CREATE_USER_ID varchar YES NULL
cw_is_image_store_associated_ref LAST_UPDATE_TIME decimal YES NULL
cw_is_image_store_associated_ref LAST_UPDATE_USER_ID varchar YES NULL
cw_is_image_store_associated_ref VALID_DATE_CRON varchar YES NULL 多时间段cron表达式
cw_is_label ID varchar NO NULL PRI 唯一标识
cw_is_label NAME varchar YES NULL
cw_is_label CODE varchar NO NULL 编码
cw_is_label BUSINESS_ID varchar YES NULL business id
cw_is_label IS_DEL smallint YES NULL 0未删,1已删
cw_is_label ADD_TYPE smallint YES NULL 添加类型,0手动创建,1应用初始,2应用创建
cw_is_label CREATE_USER_ID varchar YES NULL 创建者
cw_is_label CREATE_TIME decimal YES NULL 创建时间
cw_is_label LAST_UPDATE_USER_ID varchar YES NULL 最后更新者
cw_is_label LAST_UPDATE_TIME decimal YES NULL 最后更新时间
cw_is_organization ID varchar NO NULL PRI 唯一标识
cw_is_organization NAME varchar YES NULL 机构名称
cw_is_organization ORDER_BY int YES NULL 同级排序字段
cw_is_organization PARENT_ID varchar YES NULL 上级机构id
cw_is_organization BUSINESS_ID varchar YES NULL
cw_is_organization TYPE_ID varchar YES NULL 机构类型ID
cw_is_organization IS_DEL smallint YES NULL 是否删除,0没有删除,1被删除
cw_is_organization CREATE_USER_ID varchar YES NULL 创建者
cw_is_organization CREATE_TIME decimal YES NULL 创建时间
cw_is_organization LAST_UPDATE_USER_ID varchar YES NULL 最后更新者
cw_is_organization LAST_UPDATE_TIME decimal YES NULL 最后更新时间
cw_is_organization EXT1 varchar YES NULL 扩展字段1
cw_is_organization EXT2 varchar YES NULL 扩展字段2
cw_is_organization EXT3 varchar YES NULL 扩展字段3
cw_is_organization EXT4 varchar YES NULL 扩展字段4
cw_is_organization EXT5 varchar YES NULL 扩展字段5
cw_is_organization EXT6 varchar YES NULL 扩展字段6
cw_is_organization EXT7 varchar YES NULL 扩展字段7
cw_is_organization EXT8 varchar YES NULL 扩展字段8
cw_is_organization EXT9 varchar YES NULL 扩展字段9
cw_is_organization EXT10 varchar YES NULL 扩展字段10
cw_is_organization EXT11 varchar YES NULL 扩展字段11
cw_is_organization EXT12 varchar YES NULL 扩展字段12
cw_is_organization EXT13 varchar YES NULL 扩展字段13
cw_is_organization EXT14 varchar YES NULL 扩展字段14
cw_is_organization EXT15 varchar YES NULL 扩展字段15
cw_is_organization EXT16 varchar YES NULL 扩展字段16
cw_is_organization EXT17 varchar YES NULL 扩展字段17
cw_is_organization EXT18 varchar YES NULL 扩展字段18
cw_is_organization EXT19 varchar YES NULL 扩展字段19
cw_is_organization EXT20 varchar YES NULL 扩展字段20
cw_is_organization EXT21 varchar YES NULL 扩展字段21
cw_is_organization EXT22 varchar YES NULL 扩展字段22
cw_is_organization EXT23 varchar YES NULL 扩展字段23
cw_is_organization EXT24 varchar YES NULL 扩展字段24
cw_is_organization EXT25 varchar YES NULL 扩展字段25
cw_is_organization EXT26 varchar YES NULL 扩展字段26
cw_is_organization EXT27 varchar YES NULL 扩展字段27
cw_is_organization EXT28 varchar YES NULL 扩展字段28
cw_is_organization EXT29 varchar YES NULL 扩展字段29
cw_is_organization EXT30 varchar YES NULL 扩展字段30
cw_is_organization IS_VALID int YES NULL 禁用启用,0=禁用,1=启用
cw_is_organization_area_ref ID varchar NO NULL 主键ID
cw_is_organization_area_ref ORG_ID varchar NO 机构ID
cw_is_organization_area_ref AREA_ID varchar NO 区域ID
cw_is_organization_area_ref REF_TYPE tinyint NO NULL 0所在区域 1派梯区域
cw_is_organization_area_ref BUSINESS_ID varchar NO 企业ID
cw_is_organization_area_ref CREATE_TIME bigint YES NULL 创建日期 时间戳
cw_is_organization_area_ref CREATE_USER_ID varchar YES NULL 创建人ID
cw_is_organization_area_ref LAST_UPDATE_TIME bigint YES NULL 修改日期 时间戳
cw_is_organization_area_ref LAST_UPDATE_USER_ID varchar YES NULL 修改人员ID
cw_is_organization_extend ID varchar NO
cw_is_organization_extend ORGANIZATION_ID varchar NO
cw_is_organization_extend BUSINESS_ID varchar NO NULL
cw_is_organization_extend EMPLOYEE_NUMBER smallint NO 0
cw_is_organization_extend ORG_CAR_NUMBER smallint NO 0
cw_is_organization_extend EMPLOYEE_CAR_NUMBER smallint NO 0
cw_is_organization_extend LEASEHOLD_BEGIN bigint YES NULL 起租日期
cw_is_organization_extend LEASEHOLD_END bigint YES NULL 到租日期
cw_is_organization_extend PAYMENT_STATE tinyint YES NULL
cw_is_organization_extend CARPORT_NUM smallint NO 0 车位数量
cw_is_organization_extend CREATE_USER_ID varchar YES
cw_is_organization_extend CREATE_TIME bigint YES NULL
cw_is_organization_extend LAST_UPDATE_USER_ID varchar YES
cw_is_organization_extend LAST_UPDATE_TIME bigint YES NULL
cw_is_organization_extend REMARK varchar YES
cw_is_organization_extend_detail ID varchar NO
cw_is_organization_extend_detail ORGANIZATION_ID varchar NO
cw_is_organization_extend_detail BUSINESS_ID varchar NO NULL
cw_is_organization_extend_detail UNIT_RENT decimal NO NULL
cw_is_organization_extend_detail WATER_AMOUNT decimal NO NULL
cw_is_organization_extend_detail ELECTRICITY_AMOUNT decimal NO NULL
cw_is_organization_extend_detail PROPERTY_AMOUNT decimal NO NULL
cw_is_organization_extend_detail BELONG_DATE bigint NO NULL
cw_is_organization_extend_detail PAY_TIME bigint NO NULL
cw_is_organization_extend_detail CREATE_USER_ID varchar NO
cw_is_organization_extend_detail CREATE_TIME bigint NO NULL
cw_is_organization_extend_detail LAST_UPDATE_USER_ID varchar NO
cw_is_organization_extend_detail LAST_UPDATE_TIME bigint NO NULL
cw_is_organization_extend_detail REMARK varchar NO
cw_is_organization_image_store APPLICATION_ID varchar NO NULL PRI 设备主键
cw_is_organization_image_store ORG_ID varchar NO NULL PRI 设备主键
cw_is_organization_image_store IMAGE_STORE_ID varchar NO NULL PRI 图库主键
cw_is_organization_type ID varchar NO NULL PRI 主键
cw_is_organization_type BUSINESS_ID varchar YES NULL 企业ID
cw_is_organization_type CODE varchar YES NULL 编号
cw_is_organization_type NAME varchar YES NULL 名称
cw_is_organization_type HAS_LOWER_LEVEL tinyint YES 0 是否可以有下级机构 0 不可以 1 可以
cw_is_organization_type HAS_DEFAULT tinyint YES 0 是否是默认的 0 不是 1 是
cw_is_organization_type STATUS tinyint YES 0 状态(0 有效 1 无效)默认为0
cw_is_organization_type CREATE_USER_ID varchar YES NULL 创建人
cw_is_organization_type CREATE_TIME decimal YES NULL 创建时间
cw_is_organization_type LAST_UPDATE_USER_ID varchar YES NULL 更新人
cw_is_organization_type LAST_UPDATE_TIME decimal YES NULL 更新时间
cw_is_organization_type_properties ID varchar NO NULL PRI 主键
cw_is_organization_type_properties BUSINESS_ID varchar YES NULL 企业ID
cw_is_organization_type_properties ORGANIZATION_TYPE_ID varchar YES NULL 机构ID
cw_is_organization_type_properties CODE varchar YES NULL 编号
cw_is_organization_type_properties NAME varchar YES NULL 名称
cw_is_organization_type_properties STATUS tinyint YES 0 (0 有效 1 无效)默认为0
cw_is_organization_type_properties HAS_REQUIRED tinyint YES 0 是否必填 0 非必填 1 必填
cw_is_organization_type_properties ORDER_NUM int YES NULL 序号
cw_is_organization_type_properties CREATE_USER_ID varchar YES NULL 创建人
cw_is_organization_type_properties CREATE_TIME decimal YES NULL 创建时间
cw_is_organization_type_properties LAST_UPDATE_USER_ID varchar YES NULL 更新人
cw_is_organization_type_properties LAST_UPDATE_TIME decimal YES NULL 更新时间
cw_is_person ID varchar NO NULL PRI 主键ID
cw_is_person BUSINESS_ID varchar NO NULL MUL 企业ID
cw_is_person PERSON_CODE varchar YES NULL 人员CODE
cw_is_person NAME varchar YES NULL MUL 姓名
cw_is_person USER_NAME varchar YES NULL 用户名
cw_is_person PHONE varchar YES NULL 联系电话
cw_is_person STATUS smallint YES NULL 人员状态(0 有效 1 无效)默认为0
cw_is_person EXPIRY_BEGIN_DATE decimal YES NULL 人员有效期开始时间 时间戳
cw_is_person EXPIRY_END_DATE decimal YES NULL 人员有效期结束时间 时间戳
cw_is_person SHOW_PICTURE varchar YES NULL 人员展示照
cw_is_person COMPARE_PICTURE text YES NULL 人员比对照
cw_is_person IS_DEL smallint YES NULL MUL 逻辑删除字段 0:未删除 1:已删除
cw_is_person CREATE_TIME decimal YES NULL 创建日期 时间戳
cw_is_person CREATE_USER_ID varchar YES NULL 创建人ID
cw_is_person LAST_UPDATE_TIME decimal YES NULL 修改日期 时间戳
cw_is_person LAST_UPDATE_USER_ID varchar YES NULL 修改人员ID
cw_is_person EMAIL varchar YES NULL 邮箱
cw_is_person IMAGE_ID varchar YES NULL MUL 识别照
cw_is_person EXT1 varchar YES NULL 扩展字段1
cw_is_person EXT2 varchar YES NULL 扩展字段2
cw_is_person EXT3 varchar YES NULL 扩展字段3
cw_is_person EXT4 varchar YES NULL 扩展字段4
cw_is_person EXT5 varchar YES NULL 扩展字段5
cw_is_person EXT6 varchar YES NULL 扩展字段6
cw_is_person EXT7 varchar YES NULL 扩展字段7
cw_is_person EXT8 varchar YES NULL 扩展字段8
cw_is_person EXT9 varchar YES NULL 扩展字段9
cw_is_person EXT10 varchar YES NULL 扩展字段10
cw_is_person EXT11 varchar YES NULL 扩展字段11
cw_is_person EXT12 varchar YES NULL 扩展字段12
cw_is_person EXT13 varchar YES NULL 扩展字段13
cw_is_person EXT14 varchar YES NULL 扩展字段14
cw_is_person EXT15 varchar YES NULL 扩展字段15
cw_is_person EXT16 varchar YES NULL 扩展字段16
cw_is_person EXT17 varchar YES NULL 扩展字段17
cw_is_person EXT18 varchar YES NULL 扩展字段18
cw_is_person EXT19 varchar YES NULL 扩展字段19
cw_is_person EXT20 varchar YES NULL 扩展字段20
cw_is_person EXT21 varchar YES NULL 扩展字段21
cw_is_person EXT22 varchar YES NULL 扩展字段22
cw_is_person EXT23 varchar YES NULL 扩展字段23
cw_is_person EXT24 varchar YES NULL 扩展字段24
cw_is_person EXT25 varchar YES NULL 扩展字段25
cw_is_person EXT26 varchar YES NULL 扩展字段26
cw_is_person EXT27 varchar YES NULL 扩展字段27
cw_is_person EXT28 varchar YES NULL 扩展字段28
cw_is_person EXT29 varchar YES NULL 扩展字段29
cw_is_person EXT30 varchar YES NULL 扩展字段30
cw_is_person EXT31 varchar YES NULL 扩展字段31
cw_is_person EXT32 varchar YES NULL 扩展字段32
cw_is_person EXT33 varchar YES NULL 扩展字段33
cw_is_person EXT34 varchar YES NULL 扩展字段34
cw_is_person EXT35 varchar YES NULL 扩展字段35
cw_is_person EXT36 varchar YES NULL 扩展字段36
cw_is_person EXT37 varchar YES NULL 扩展字段37
cw_is_person EXT38 varchar YES NULL 扩展字段38
cw_is_person EXT39 varchar YES NULL 扩展字段39
cw_is_person EXT40 varchar YES NULL 扩展字段40
cw_is_person CREATE_SYS_ACCOUNT smallint NO 0 是否同步账号,1同步,0不同步
cw_is_person SYS_ACCOUNT_ID varchar YES NULL 系统账号ID
cw_is_person SOURCE smallint NO 1 人员来源 1页面管理 2抓拍
cw_is_person RESERVE_INFO varchar YES NULL 保留信息
cw_is_person WELCOME varchar YES NULL 欢迎语
cw_is_person IC_CARD_NO varchar YES NULL IC卡号
cw_is_person IC_CARD_TYPE varchar YES NULL IC卡类型
cw_is_person DEFAULT_FLOOR varchar YES NULL 默认楼层id
cw_is_person CHOOSE_FLOOR text YES NULL 选中的楼层
cw_is_person_audit ID varchar NO NULL PRI 主键ID
cw_is_person_audit BUSINESS_ID varchar NO NULL 企业ID
cw_is_person_audit NAME varchar NO NULL 姓名
cw_is_person_audit USER_NAME varchar YES NULL 用户名
cw_is_person_audit PERSON_CODE varchar YES NULL 人员CODE
cw_is_person_audit PHONE varchar YES NULL 联系电话
cw_is_person_audit EMAIL varchar YES NULL 邮箱
cw_is_person_audit IMAGE_ID varchar YES NULL 识别照
cw_is_person_audit COMPARE_PICTURE varchar YES NULL 人员比对照
cw_is_person_audit SHOW_PICTURE varchar YES NULL 人员展示照
cw_is_person_audit ORGANIZATIONIDS text YES NULL 所属机构
cw_is_person_audit ORGANIZATIONNAMES text YES NULL 所属机构名称
cw_is_person_audit LABELIDS text YES NULL 所属标签
cw_is_person_audit LABELNAMES text YES NULL 所属标签名称
cw_is_person_audit CREATE_SYS_ACCOUNT tinyint YES 0 是否同步创建账号,0 不创建 1 创建
cw_is_person_audit SYS_ACCOUNT_ID varchar YES NULL 系统账号ID
cw_is_person_audit IC_CARD_NO varchar YES NULL IC卡号
cw_is_person_audit IC_CARD_TYPE varchar YES NULL IC卡类型
cw_is_person_audit SOURCE tinyint NO NULL 来源(1:页面;2:抓拍;3:设备;4:扫码)
cw_is_person_audit DEVICE_CODE varchar YES NULL 注册设备编号
cw_is_person_audit DEVICE_NAME varchar YES NULL 注册设备名称
cw_is_person_audit WELCOME varchar YES NULL 欢迎语
cw_is_person_audit RESERVE_INFO varchar YES NULL 备用字段
cw_is_person_audit USER_PROPERTIES text YES NULL 用户填写字段
cw_is_person_audit USER_PROPERTIES_NAME text YES NULL 用户填写字段名称
cw_is_person_audit STATUS tinyint YES NULL 人员状态(0 有效 1 无效)默认为0
cw_is_person_audit AUDIT_STATUS tinyint YES NULL 审核状态:0审核中,1审核通过,2审核失败
cw_is_person_audit IS_DEL tinyint YES NULL 逻辑删除字段 0:未删除 1:已删除
cw_is_person_audit CREATE_USER_ID varchar YES NULL 创建人ID
cw_is_person_audit CREATE_TIME bigint YES NULL 创建日期 时间戳
cw_is_person_audit LAST_UPDATE_USER_ID varchar YES NULL 修改人员ID
cw_is_person_audit LAST_UPDATE_TIME bigint YES NULL 修改日期 时间戳
cw_is_person_audit EXT1 varchar YES NULL 扩展字段1
cw_is_person_audit EXT2 varchar YES NULL 扩展字段2
cw_is_person_audit EXT3 varchar YES NULL 扩展字段3
cw_is_person_audit EXT4 varchar YES NULL 扩展字段4
cw_is_person_audit EXT5 varchar YES NULL 扩展字段5
cw_is_person_audit EXT6 varchar YES NULL 扩展字段6
cw_is_person_audit EXT7 varchar YES NULL 扩展字段7
cw_is_person_audit EXT8 varchar YES NULL 扩展字段8
cw_is_person_audit EXT9 varchar YES NULL 扩展字段9
cw_is_person_audit EXT10 varchar YES NULL 扩展字段10
cw_is_person_audit EXT11 varchar YES NULL 扩展字段11
cw_is_person_audit EXT12 varchar YES NULL 扩展字段12
cw_is_person_audit EXT13 varchar YES NULL 扩展字段13
cw_is_person_audit EXT14 varchar YES NULL 扩展字段14
cw_is_person_audit EXT15 varchar YES NULL 扩展字段15
cw_is_person_audit EXT16 varchar YES NULL 扩展字段16
cw_is_person_audit EXT17 varchar YES NULL 扩展字段17
cw_is_person_audit EXT18 varchar YES NULL 扩展字段18
cw_is_person_audit EXT19 varchar YES NULL 扩展字段19
cw_is_person_audit EXT20 varchar YES NULL 扩展字段20
cw_is_person_audit EXT21 varchar YES NULL 扩展字段21
cw_is_person_audit EXT22 varchar YES NULL 扩展字段22
cw_is_person_audit EXT23 varchar YES NULL 扩展字段23
cw_is_person_audit EXT24 varchar YES NULL 扩展字段24
cw_is_person_audit EXT25 varchar YES NULL 扩展字段25
cw_is_person_audit EXT26 varchar YES NULL 扩展字段26
cw_is_person_audit EXT27 varchar YES NULL 扩展字段27
cw_is_person_audit EXT28 varchar YES NULL 扩展字段28
cw_is_person_audit EXT29 varchar YES NULL 扩展字段29
cw_is_person_audit EXT30 varchar YES NULL 扩展字段30
cw_is_person_audit EXT31 varchar YES NULL 扩展字段31
cw_is_person_audit EXT32 varchar YES NULL 扩展字段32
cw_is_person_audit EXT33 varchar YES NULL 扩展字段33
cw_is_person_audit EXT34 varchar YES NULL 扩展字段34
cw_is_person_audit EXT35 varchar YES NULL 扩展字段35
cw_is_person_audit EXT36 varchar YES NULL 扩展字段36
cw_is_person_audit EXT37 varchar YES NULL 扩展字段37
cw_is_person_audit EXT38 varchar YES NULL 扩展字段38
cw_is_person_audit EXT39 varchar YES NULL 扩展字段39
cw_is_person_audit EXT40 varchar YES NULL 扩展字段40
cw_is_person_batch_detail ID varchar NO NULL PRI 主键ID
cw_is_person_batch_detail BATCH_ID varchar NO NULL MUL 所属批次ID
cw_is_person_batch_detail FILE_NAME varchar NO NULL 文件名称
cw_is_person_batch_detail PERSON_NAME varchar YES NULL 人员姓名
cw_is_person_batch_detail STATUS decimal NO NULL 状态(1 成功 2 失败)
cw_is_person_batch_detail REMARK varchar YES NULL 描述信息
cw_is_person_batch_detail CREATE_TIME decimal YES NULL 创建时间,时间戳
cw_is_person_batch_detail CREATE_USER_ID varchar YES NULL 创建用户ID
cw_is_person_batch_import ID varchar NO NULL 主键ID
cw_is_person_batch_import BUSINESS_ID varchar YES NULL 企业ID
cw_is_person_batch_import BATCH_NO varchar NO NULL 批次号
cw_is_person_batch_import TYPE decimal NO NULL 导入类型(1.文件前端上传,2.服务器文件路径,3.服务器图片生成 )
cw_is_person_batch_import FILE_NAME varchar NO NULL 文件名称
cw_is_person_batch_import FILE_PATH varchar YES NULL 文件路径
cw_is_person_batch_import FINISH_TIME decimal YES NULL 结束时间,时间戳
cw_is_person_batch_import TOTAL_COUNT decimal YES NULL 总数
cw_is_person_batch_import CURRENT_COUNT decimal YES NULL 当前已完成数
cw_is_person_batch_import REMARK varchar YES NULL 描述信息
cw_is_person_batch_import STATUS decimal NO NULL 状态(1.未开始,2.进行中,3.已完成,4.异常)
cw_is_person_batch_import CREATE_TIME decimal YES NULL 创建时间,时间戳
cw_is_person_batch_import CREATE_USER_ID varchar YES NULL 创建用户ID
cw_is_person_batch_import OPERATION varchar YES NULL 操作类型(new 新增,update 更新)
cw_is_person_batch_import LOGIN_NAME varchar YES NULL 登录名称
cw_is_person_label_ref ID varchar NO NULL PRI 主键ID
cw_is_person_label_ref PERSON_ID varchar NO NULL MUL 人员ID
cw_is_person_label_ref LABEL_ID varchar NO NULL MUL 标签主键ID
cw_is_person_label_ref CREATE_TIME decimal YES NULL 创建日期 时间戳
cw_is_person_label_ref CREATE_USER_ID varchar YES NULL 创建人ID
cw_is_person_label_ref LAST_UPDATE_TIME decimal YES NULL 修改日期 时间戳
cw_is_person_label_ref LAST_UPDATE_USER_ID varchar YES NULL 修改人员ID
cw_is_person_organization_ref ID varchar NO NULL PRI 主键ID
cw_is_person_organization_ref PERSON_ID varchar NO NULL MUL 人员ID
cw_is_person_organization_ref ORG_ID varchar NO NULL MUL 组织ID
cw_is_person_organization_ref CREATE_TIME decimal YES NULL 创建日期 时间戳
cw_is_person_organization_ref CREATE_USER_ID varchar YES NULL 创建人ID
cw_is_person_organization_ref LAST_UPDATE_TIME decimal YES NULL 修改日期 时间戳
cw_is_person_organization_ref LAST_UPDATE_USER_ID varchar YES NULL 修改人员ID
cw_is_person_properties ID varchar NO NULL PRI 主键
cw_is_person_properties BUSINESS_ID varchar YES NULL 企业ID
cw_is_person_properties CODE varchar YES NULL 编号
cw_is_person_properties NAME varchar YES NULL 名称
cw_is_person_properties TYPE smallint YES NULL 输入类型 1 字符串 2 选择 3 时间 4 文件上传
cw_is_person_properties STATUS tinyint YES 0 (0 有效 1 无效)默认为0
cw_is_person_properties HAS_SYS_ACCOUNT tinyint YES 0 是否作为系统账号 0 不可以 1 可以
cw_is_person_properties HAS_SYS_ACCOUNT_AVAILABLE tinyint YES 0 是否可以作为系统账号字段 0 不可以 1 可以
cw_is_person_properties HAS_REQUIRED tinyint YES 0 是否必填 0 不要必填 1 必填
cw_is_person_properties HAS_DEFAULT tinyint YES 0 是否默认 0 不默认 1 默认
cw_is_person_properties ORDER_NUM int YES NULL 序号
cw_is_person_properties REMINDER varchar YES NULL 提示语
cw_is_person_properties CREATE_USER_ID varchar YES NULL 创建人
cw_is_person_properties CREATE_TIME bigint YES NULL 创建时间
cw_is_person_properties LAST_UPDATE_USER_ID varchar YES NULL 更新人
cw_is_person_properties LAST_UPDATE_TIME bigint YES NULL 更新时间
cw_is_person_properties ARRAY_DATA varchar YES NULL 如果类型是2,补充填写下拉列表,用逗号分隔
cw_is_person_properties HAS_MULTIPLE tinyint YES NULL 如果类型是2,补充填写是否多选 0 单选 1 复选
cw_is_person_properties_switch ID varchar NO NULL PRI 主键
cw_is_person_properties_switch BUSINESS_ID varchar YES NULL 企业ID
cw_is_person_properties_switch SWITCH_PARAM tinyint YES NULL 开启注册照优化
cw_is_person_properties_switch SIZE_PARAM int YES NULL 尺寸:1-1存,2-2存
cw_is_person_properties_switch SHAPE_PARAM tinyint YES NULL 形态变化
cw_is_person_properties_switch STATUS tinyint YES 0 (0 有效 1 无效)默认为0
cw_is_person_properties_switch SKIN_COLOR_PARAM tinyint YES NULL 肤色整体优化
cw_is_person_properties_switch CREATE_USER_ID varchar YES NULL 创建人
cw_is_person_properties_switch CREATE_TIME bigint YES NULL 创建时间
cw_is_person_properties_switch LAST_UPDATE_USER_ID varchar YES NULL 更新人
cw_is_person_properties_switch LAST_UPDATE_TIME bigint YES NULL 更新时间
cw_is_person_properties_switch DEFECTS_PARAM tinyint YES NULL 瑕疵优化
cw_is_person_properties_switch BACKGROUND_PARAM tinyint YES NULL 换背景
cw_is_person_properties_switch BACKGROUND_OBJECT int YES NULL 换背景底色:3-白色,4-蓝色,2-红色
cw_is_person_registry ID varchar NO PRI 主键ID
cw_is_person_registry BUSINESS_ID varchar NO 租户ID
cw_is_person_registry STATUS tinyint NO 1 开启设备注册(0 关闭 1 开启) 默认为1
cw_is_person_registry DEVICE_STATUS tinyint NO 0 设备注册审核(0 关闭 1 开启) 默认为0
cw_is_person_registry CODE_STATUS tinyint NO 1 扫码注册审核(0 关闭 1 开启) 默认为1
cw_is_person_registry ORGANIZATION_IDS varchar YES 注册默认组织ID列表(用英文逗号分隔)
cw_is_person_registry LABEL_IDS varchar YES 注册默认标签ID列表(用英文逗号分隔)
cw_is_person_registry CREATE_TIME decimal YES NULL 创建日期 时间戳
cw_is_person_registry CREATE_USER_ID varchar YES 创建人ID
cw_is_person_registry LAST_UPDATE_TIME decimal YES NULL 修改日期 时间戳
cw_is_person_registry LAST_UPDATE_USER_ID varchar YES 修改人员ID
cw_is_person_registry TYPE tinyint NO 0 注册类型(0:自助注册 1:人证注册) 默认为0
cw_is_person_registry_device ID varchar NO PRI 主键ID
cw_is_person_registry_device REGISTRY_ID varchar NO MUL 注册配置主键
cw_is_person_registry_device DEVICE_CODE varchar NO 设备编码
cw_is_person_registry_properties ID varchar NO PRI 主键ID
cw_is_person_registry_properties REGISTRY_ID varchar NO MUL 注册配置主键
cw_is_person_registry_properties PERSON_PROPERTY_ID varchar NO 人员属性表主键
cw_is_person_registry_properties BIND_PROPERTY_CODE varchar YES NULL 与人员属性关联的属性
cw_operation_log ID varchar NO NULL PRI 唯一标识
cw_operation_log BUSINESS_ID varchar YES NULL business id
cw_operation_log CREATE_USER_ID varchar YES NULL 创建者
cw_operation_log CREATE_USER_NAME varchar YES NULL 创建者名称
cw_operation_log CREATE_TIME decimal YES NULL 创建时间
cw_operation_log INTERFACE_NAME varchar YES NULL 接口名称
cw_operation_log CONTENT text YES NULL 请求报文
cw_operation_log MODULE varchar YES NULL 模块
cw_operation_log CALL_IP varchar YES NULL 来源ip
cw_task_job_everytime_details ID varchar YES NULL
cw_task_job_everytime_details JOB_NAME varchar YES NULL
cw_task_job_everytime_details JOB_STATUS decimal YES NULL
cw_task_job_everytime_details START_TIME decimal YES NULL
cw_task_job_everytime_details END_TIME decimal YES NULL
cw_task_job_everytime_details IP_ADDRESS varchar YES NULL
cw_task_job_everytime_details MAC_ADDRESS varchar YES NULL
org_floor org_id varchar NO NULL 机构id
org_floor zone_id varchar YES NULL 楼层id
org_floor is_all smallint NO NULL 是否全部查询:0-是,1-不是
org_floor zone_name varchar YES NULL 楼层名
1 mysql: [Warning] Using a password on the command line interface can be insecure.
2 cw_is_device_image_store ID varchar NO PRI 主键
3 cw_is_device_image_store DEVICE_ID varchar NO NULL MUL 设备Id
4 cw_is_device_image_store IMAGE_STORE_ID varchar NO NULL 图库Id
5 cw_is_device_image_store TYPE smallint NO NULL 设备图库变更类型(1:新增,2:删除)
6 cw_is_device_image_store CREATE_TIME bigint YES NULL 创建时间 时间戳
7 cw_is_device_image_store LAST_UPDATE_TIME bigint YES NULL 修改日期 时间戳
8 cw_is_device_image_store FINISH_PULL_TIME bigint YES NULL 结束拉取时间 时间戳
9 cw_is_device_image_store STATUS smallint NO 0 状态(0:未通知,1:已通知)
10 cw_is_device_person ID varchar NO NULL PRI 主键
11 cw_is_device_person DEVICE_ID varchar NO NULL MUL 设备ID
12 cw_is_device_person PERSON_ID varchar NO NULL 人员ID
13 cw_is_device_person TYPE smallint YES NULL 类型(0:正常,1:删除)
14 cw_is_device_person CREATE_TIME bigint YES NULL 创建时间 时间戳
15 cw_is_device_person LAST_UPDATE_TIME bigint YES NULL 修改日期 时间戳
16 cw_is_device_person_sync_log ID varchar NO PRI
17 cw_is_device_person_sync_log DEVICE_ID varchar NO NULL MUL 设备ID
18 cw_is_device_person_sync_log IMAGE_STORE_ID varchar NO NULL MUL 图库ID
19 cw_is_device_person_sync_log PERSON_ID varchar NO NULL 人员ID
20 cw_is_device_person_sync_log GROUP_PERSON_REF_ID varchar NO NULL MUL 图库人员关联ID
21 cw_is_device_person_sync_log IMAGE_ID varchar YES NULL 人脸ID
22 cw_is_device_person_sync_log STATUS smallint YES 0 同步状态(0:设备未拉取,1:设备已拉取,2:设备上报成功,3:设备上报失败)
23 cw_is_device_person_sync_log CODE varchar YES NULL 错误编码
24 cw_is_device_person_sync_log ERROR_MESSAGE varchar YES NULL 失败原因
25 cw_is_device_person_sync_log CREATE_TIME bigint YES NULL 创建时间 时间戳
26 cw_is_device_person_sync_log LAST_UPDATE_TIME bigint YES NULL 修改日期 时间戳(新增/修改人员信息时更新)
27 cw_is_device_person_sync_log COUNT smallint YES 0 计数器
28 cw_is_device_person_sync_log LAST_PULL_TIME bigint YES NULL 最近拉取时间 时间戳
29 cw_is_device_person_sync_log LAST_REPORT_TIME bigint YES NULL 最近上报时间 时间戳
30 cw_is_device_person_sync_log UPDATE_INFO varchar YES NULL 处理信息
31 cw_is_device_person_sync_log EXPIRY_BEGIN_DATE bigint YES NULL 人员有效期开始时间 时间戳
32 cw_is_device_person_sync_log EXPIRY_END_DATE bigint YES NULL 人员有效期结束时间 时间戳
33 cw_is_device_person_sync_log DEVICE_PERSON_REF_ID varchar NO NULL 设备-人员表主键
34 cw_is_device_person_sync_log IS_DEL smallint YES 0 逻辑删除字段 0未删除 1删除
35 cw_is_group_person_ref ID varchar NO NULL PRI
36 cw_is_group_person_ref IMAGE_STORE_ID varchar YES NULL MUL 图库id
37 cw_is_group_person_ref PERSON_ID varchar YES NULL MUL 人员id
38 cw_is_group_person_ref EXPIRY_BEGIN_DATE decimal YES NULL 人员有效期开始时间 时间戳
39 cw_is_group_person_ref EXPIRY_END_DATE decimal YES NULL 人员有效期结束时间 时间戳
40 cw_is_group_person_ref STATUS smallint YES 0 MUL 人员有效状态 -1删除、0正常、1失效
41 cw_is_group_person_ref CREATE_USER_ID varchar YES NULL
42 cw_is_group_person_ref CREATE_TIME decimal YES NULL
43 cw_is_group_person_ref LAST_UPDATE_USER_ID varchar YES NULL
44 cw_is_group_person_ref LAST_UPDATE_TIME decimal YES NULL
45 cw_is_group_person_ref IS_DEL smallint NO 0 MUL 逻辑删除字段 0未删除 1删除
46 cw_is_group_person_ref GENDER smallint YES NULL 性别
47 cw_is_group_person_ref AGE int YES NULL 年龄
48 cw_is_group_person_ref GROUP_TIME bigint YES NULL 入库时间
49 cw_is_group_person_ref GROUP_STATUS smallint YES NULL 0:未建模 1:建模中 2:建模完成 3:建模失败
50 cw_is_group_person_ref ERROR_MESSAGE varchar YES NULL 建模失败时的失败原因
51 cw_is_group_person_ref EXPIRY_BEGIN_DATE_STATUS smallint YES 0 人员有效开始时间状态(0:未处理 1:已处理)
52 cw_is_group_person_ref EXPIRY_END_DATE_STATUS smallint YES 0 人员有效期结束时间状态(0:未处理 1:已处理)
53 cw_is_group_person_ref VALID_DATE_CRON varchar YES NULL 多时间段cron表达式
54 cw_is_image_store_associated_ref ID varchar NO NULL PRI 唯一标识
55 cw_is_image_store_associated_ref IMAGE_STORE_ID varchar NO NULL MUL 图库id
56 cw_is_image_store_associated_ref ASSOCIATED_OBJECT_ID varchar NO NULL 关联对象id
57 cw_is_image_store_associated_ref ASSOCIATED_OBJECT_ID_TYPE int NO NULL 关联对象的类型,1:机构,2:标签,3:个人
58 cw_is_image_store_associated_ref ASSOCIATED_ACTION int YES NULL 0:包含,1:排除
59 cw_is_image_store_associated_ref EXPIRY_BEGIN_DATE decimal YES NULL 人员有效期开始时间 时间戳
60 cw_is_image_store_associated_ref EXPIRY_END_DATE decimal YES NULL 人员有效期结束时间 时间戳
61 cw_is_image_store_associated_ref CREATE_TIME decimal YES NULL
62 cw_is_image_store_associated_ref CREATE_USER_ID varchar YES NULL
63 cw_is_image_store_associated_ref LAST_UPDATE_TIME decimal YES NULL
64 cw_is_image_store_associated_ref LAST_UPDATE_USER_ID varchar YES NULL
65 cw_is_image_store_associated_ref VALID_DATE_CRON varchar YES NULL 多时间段cron表达式
66 cw_is_label ID varchar NO NULL PRI 唯一标识
67 cw_is_label NAME varchar YES NULL
68 cw_is_label CODE varchar NO NULL 编码
69 cw_is_label BUSINESS_ID varchar YES NULL business id
70 cw_is_label IS_DEL smallint YES NULL 0未删,1已删
71 cw_is_label ADD_TYPE smallint YES NULL 添加类型,0手动创建,1应用初始,2应用创建
72 cw_is_label CREATE_USER_ID varchar YES NULL 创建者
73 cw_is_label CREATE_TIME decimal YES NULL 创建时间
74 cw_is_label LAST_UPDATE_USER_ID varchar YES NULL 最后更新者
75 cw_is_label LAST_UPDATE_TIME decimal YES NULL 最后更新时间
76 cw_is_organization ID varchar NO NULL PRI 唯一标识
77 cw_is_organization NAME varchar YES NULL 机构名称
78 cw_is_organization ORDER_BY int YES NULL 同级排序字段
79 cw_is_organization PARENT_ID varchar YES NULL 上级机构id
80 cw_is_organization BUSINESS_ID varchar YES NULL
81 cw_is_organization TYPE_ID varchar YES NULL 机构类型ID
82 cw_is_organization IS_DEL smallint YES NULL 是否删除,0没有删除,1被删除
83 cw_is_organization CREATE_USER_ID varchar YES NULL 创建者
84 cw_is_organization CREATE_TIME decimal YES NULL 创建时间
85 cw_is_organization LAST_UPDATE_USER_ID varchar YES NULL 最后更新者
86 cw_is_organization LAST_UPDATE_TIME decimal YES NULL 最后更新时间
87 cw_is_organization EXT1 varchar YES NULL 扩展字段1
88 cw_is_organization EXT2 varchar YES NULL 扩展字段2
89 cw_is_organization EXT3 varchar YES NULL 扩展字段3
90 cw_is_organization EXT4 varchar YES NULL 扩展字段4
91 cw_is_organization EXT5 varchar YES NULL 扩展字段5
92 cw_is_organization EXT6 varchar YES NULL 扩展字段6
93 cw_is_organization EXT7 varchar YES NULL 扩展字段7
94 cw_is_organization EXT8 varchar YES NULL 扩展字段8
95 cw_is_organization EXT9 varchar YES NULL 扩展字段9
96 cw_is_organization EXT10 varchar YES NULL 扩展字段10
97 cw_is_organization EXT11 varchar YES NULL 扩展字段11
98 cw_is_organization EXT12 varchar YES NULL 扩展字段12
99 cw_is_organization EXT13 varchar YES NULL 扩展字段13
100 cw_is_organization EXT14 varchar YES NULL 扩展字段14
101 cw_is_organization EXT15 varchar YES NULL 扩展字段15
102 cw_is_organization EXT16 varchar YES NULL 扩展字段16
103 cw_is_organization EXT17 varchar YES NULL 扩展字段17
104 cw_is_organization EXT18 varchar YES NULL 扩展字段18
105 cw_is_organization EXT19 varchar YES NULL 扩展字段19
106 cw_is_organization EXT20 varchar YES NULL 扩展字段20
107 cw_is_organization EXT21 varchar YES NULL 扩展字段21
108 cw_is_organization EXT22 varchar YES NULL 扩展字段22
109 cw_is_organization EXT23 varchar YES NULL 扩展字段23
110 cw_is_organization EXT24 varchar YES NULL 扩展字段24
111 cw_is_organization EXT25 varchar YES NULL 扩展字段25
112 cw_is_organization EXT26 varchar YES NULL 扩展字段26
113 cw_is_organization EXT27 varchar YES NULL 扩展字段27
114 cw_is_organization EXT28 varchar YES NULL 扩展字段28
115 cw_is_organization EXT29 varchar YES NULL 扩展字段29
116 cw_is_organization EXT30 varchar YES NULL 扩展字段30
117 cw_is_organization IS_VALID int YES NULL 禁用启用,0=禁用,1=启用
118 cw_is_organization_area_ref ID varchar NO NULL 主键ID
119 cw_is_organization_area_ref ORG_ID varchar NO 机构ID
120 cw_is_organization_area_ref AREA_ID varchar NO 区域ID
121 cw_is_organization_area_ref REF_TYPE tinyint NO NULL 0所在区域 1派梯区域
122 cw_is_organization_area_ref BUSINESS_ID varchar NO 企业ID
123 cw_is_organization_area_ref CREATE_TIME bigint YES NULL 创建日期 时间戳
124 cw_is_organization_area_ref CREATE_USER_ID varchar YES NULL 创建人ID
125 cw_is_organization_area_ref LAST_UPDATE_TIME bigint YES NULL 修改日期 时间戳
126 cw_is_organization_area_ref LAST_UPDATE_USER_ID varchar YES NULL 修改人员ID
127 cw_is_organization_extend ID varchar NO
128 cw_is_organization_extend ORGANIZATION_ID varchar NO
129 cw_is_organization_extend BUSINESS_ID varchar NO NULL
130 cw_is_organization_extend EMPLOYEE_NUMBER smallint NO 0
131 cw_is_organization_extend ORG_CAR_NUMBER smallint NO 0
132 cw_is_organization_extend EMPLOYEE_CAR_NUMBER smallint NO 0
133 cw_is_organization_extend LEASEHOLD_BEGIN bigint YES NULL 起租日期
134 cw_is_organization_extend LEASEHOLD_END bigint YES NULL 到租日期
135 cw_is_organization_extend PAYMENT_STATE tinyint YES NULL
136 cw_is_organization_extend CARPORT_NUM smallint NO 0 车位数量
137 cw_is_organization_extend CREATE_USER_ID varchar YES
138 cw_is_organization_extend CREATE_TIME bigint YES NULL
139 cw_is_organization_extend LAST_UPDATE_USER_ID varchar YES
140 cw_is_organization_extend LAST_UPDATE_TIME bigint YES NULL
141 cw_is_organization_extend REMARK varchar YES
142 cw_is_organization_extend_detail ID varchar NO
143 cw_is_organization_extend_detail ORGANIZATION_ID varchar NO
144 cw_is_organization_extend_detail BUSINESS_ID varchar NO NULL
145 cw_is_organization_extend_detail UNIT_RENT decimal NO NULL
146 cw_is_organization_extend_detail WATER_AMOUNT decimal NO NULL
147 cw_is_organization_extend_detail ELECTRICITY_AMOUNT decimal NO NULL
148 cw_is_organization_extend_detail PROPERTY_AMOUNT decimal NO NULL
149 cw_is_organization_extend_detail BELONG_DATE bigint NO NULL
150 cw_is_organization_extend_detail PAY_TIME bigint NO NULL
151 cw_is_organization_extend_detail CREATE_USER_ID varchar NO
152 cw_is_organization_extend_detail CREATE_TIME bigint NO NULL
153 cw_is_organization_extend_detail LAST_UPDATE_USER_ID varchar NO
154 cw_is_organization_extend_detail LAST_UPDATE_TIME bigint NO NULL
155 cw_is_organization_extend_detail REMARK varchar NO
156 cw_is_organization_image_store APPLICATION_ID varchar NO NULL PRI 设备主键
157 cw_is_organization_image_store ORG_ID varchar NO NULL PRI 设备主键
158 cw_is_organization_image_store IMAGE_STORE_ID varchar NO NULL PRI 图库主键
159 cw_is_organization_type ID varchar NO NULL PRI 主键
160 cw_is_organization_type BUSINESS_ID varchar YES NULL 企业ID
161 cw_is_organization_type CODE varchar YES NULL 编号
162 cw_is_organization_type NAME varchar YES NULL 名称
163 cw_is_organization_type HAS_LOWER_LEVEL tinyint YES 0 是否可以有下级机构 0 不可以 1 可以
164 cw_is_organization_type HAS_DEFAULT tinyint YES 0 是否是默认的 0 不是 1 是
165 cw_is_organization_type STATUS tinyint YES 0 状态(0 有效 1 无效)默认为0
166 cw_is_organization_type CREATE_USER_ID varchar YES NULL 创建人
167 cw_is_organization_type CREATE_TIME decimal YES NULL 创建时间
168 cw_is_organization_type LAST_UPDATE_USER_ID varchar YES NULL 更新人
169 cw_is_organization_type LAST_UPDATE_TIME decimal YES NULL 更新时间
170 cw_is_organization_type_properties ID varchar NO NULL PRI 主键
171 cw_is_organization_type_properties BUSINESS_ID varchar YES NULL 企业ID
172 cw_is_organization_type_properties ORGANIZATION_TYPE_ID varchar YES NULL 机构ID
173 cw_is_organization_type_properties CODE varchar YES NULL 编号
174 cw_is_organization_type_properties NAME varchar YES NULL 名称
175 cw_is_organization_type_properties STATUS tinyint YES 0 (0 有效 1 无效)默认为0
176 cw_is_organization_type_properties HAS_REQUIRED tinyint YES 0 是否必填 0 非必填 1 必填
177 cw_is_organization_type_properties ORDER_NUM int YES NULL 序号
178 cw_is_organization_type_properties CREATE_USER_ID varchar YES NULL 创建人
179 cw_is_organization_type_properties CREATE_TIME decimal YES NULL 创建时间
180 cw_is_organization_type_properties LAST_UPDATE_USER_ID varchar YES NULL 更新人
181 cw_is_organization_type_properties LAST_UPDATE_TIME decimal YES NULL 更新时间
182 cw_is_person ID varchar NO NULL PRI 主键ID
183 cw_is_person BUSINESS_ID varchar NO NULL MUL 企业ID
184 cw_is_person PERSON_CODE varchar YES NULL 人员CODE
185 cw_is_person NAME varchar YES NULL MUL 姓名
186 cw_is_person USER_NAME varchar YES NULL 用户名
187 cw_is_person PHONE varchar YES NULL 联系电话
188 cw_is_person STATUS smallint YES NULL 人员状态(0 有效 1 无效)默认为0
189 cw_is_person EXPIRY_BEGIN_DATE decimal YES NULL 人员有效期开始时间 时间戳
190 cw_is_person EXPIRY_END_DATE decimal YES NULL 人员有效期结束时间 时间戳
191 cw_is_person SHOW_PICTURE varchar YES NULL 人员展示照
192 cw_is_person COMPARE_PICTURE text YES NULL 人员比对照
193 cw_is_person IS_DEL smallint YES NULL MUL 逻辑删除字段 0:未删除 1:已删除
194 cw_is_person CREATE_TIME decimal YES NULL 创建日期 时间戳
195 cw_is_person CREATE_USER_ID varchar YES NULL 创建人ID
196 cw_is_person LAST_UPDATE_TIME decimal YES NULL 修改日期 时间戳
197 cw_is_person LAST_UPDATE_USER_ID varchar YES NULL 修改人员ID
198 cw_is_person EMAIL varchar YES NULL 邮箱
199 cw_is_person IMAGE_ID varchar YES NULL MUL 识别照
200 cw_is_person EXT1 varchar YES NULL 扩展字段1
201 cw_is_person EXT2 varchar YES NULL 扩展字段2
202 cw_is_person EXT3 varchar YES NULL 扩展字段3
203 cw_is_person EXT4 varchar YES NULL 扩展字段4
204 cw_is_person EXT5 varchar YES NULL 扩展字段5
205 cw_is_person EXT6 varchar YES NULL 扩展字段6
206 cw_is_person EXT7 varchar YES NULL 扩展字段7
207 cw_is_person EXT8 varchar YES NULL 扩展字段8
208 cw_is_person EXT9 varchar YES NULL 扩展字段9
209 cw_is_person EXT10 varchar YES NULL 扩展字段10
210 cw_is_person EXT11 varchar YES NULL 扩展字段11
211 cw_is_person EXT12 varchar YES NULL 扩展字段12
212 cw_is_person EXT13 varchar YES NULL 扩展字段13
213 cw_is_person EXT14 varchar YES NULL 扩展字段14
214 cw_is_person EXT15 varchar YES NULL 扩展字段15
215 cw_is_person EXT16 varchar YES NULL 扩展字段16
216 cw_is_person EXT17 varchar YES NULL 扩展字段17
217 cw_is_person EXT18 varchar YES NULL 扩展字段18
218 cw_is_person EXT19 varchar YES NULL 扩展字段19
219 cw_is_person EXT20 varchar YES NULL 扩展字段20
220 cw_is_person EXT21 varchar YES NULL 扩展字段21
221 cw_is_person EXT22 varchar YES NULL 扩展字段22
222 cw_is_person EXT23 varchar YES NULL 扩展字段23
223 cw_is_person EXT24 varchar YES NULL 扩展字段24
224 cw_is_person EXT25 varchar YES NULL 扩展字段25
225 cw_is_person EXT26 varchar YES NULL 扩展字段26
226 cw_is_person EXT27 varchar YES NULL 扩展字段27
227 cw_is_person EXT28 varchar YES NULL 扩展字段28
228 cw_is_person EXT29 varchar YES NULL 扩展字段29
229 cw_is_person EXT30 varchar YES NULL 扩展字段30
230 cw_is_person EXT31 varchar YES NULL 扩展字段31
231 cw_is_person EXT32 varchar YES NULL 扩展字段32
232 cw_is_person EXT33 varchar YES NULL 扩展字段33
233 cw_is_person EXT34 varchar YES NULL 扩展字段34
234 cw_is_person EXT35 varchar YES NULL 扩展字段35
235 cw_is_person EXT36 varchar YES NULL 扩展字段36
236 cw_is_person EXT37 varchar YES NULL 扩展字段37
237 cw_is_person EXT38 varchar YES NULL 扩展字段38
238 cw_is_person EXT39 varchar YES NULL 扩展字段39
239 cw_is_person EXT40 varchar YES NULL 扩展字段40
240 cw_is_person CREATE_SYS_ACCOUNT smallint NO 0 是否同步账号,1同步,0不同步
241 cw_is_person SYS_ACCOUNT_ID varchar YES NULL 系统账号ID
242 cw_is_person SOURCE smallint NO 1 人员来源 1页面管理 2抓拍
243 cw_is_person RESERVE_INFO varchar YES NULL 保留信息
244 cw_is_person WELCOME varchar YES NULL 欢迎语
245 cw_is_person IC_CARD_NO varchar YES NULL IC卡号
246 cw_is_person IC_CARD_TYPE varchar YES NULL IC卡类型
247 cw_is_person DEFAULT_FLOOR varchar YES NULL 默认楼层id
248 cw_is_person CHOOSE_FLOOR text YES NULL 选中的楼层
249 cw_is_person_audit ID varchar NO NULL PRI 主键ID
250 cw_is_person_audit BUSINESS_ID varchar NO NULL 企业ID
251 cw_is_person_audit NAME varchar NO NULL 姓名
252 cw_is_person_audit USER_NAME varchar YES NULL 用户名
253 cw_is_person_audit PERSON_CODE varchar YES NULL 人员CODE
254 cw_is_person_audit PHONE varchar YES NULL 联系电话
255 cw_is_person_audit EMAIL varchar YES NULL 邮箱
256 cw_is_person_audit IMAGE_ID varchar YES NULL 识别照
257 cw_is_person_audit COMPARE_PICTURE varchar YES NULL 人员比对照
258 cw_is_person_audit SHOW_PICTURE varchar YES NULL 人员展示照
259 cw_is_person_audit ORGANIZATIONIDS text YES NULL 所属机构
260 cw_is_person_audit ORGANIZATIONNAMES text YES NULL 所属机构名称
261 cw_is_person_audit LABELIDS text YES NULL 所属标签
262 cw_is_person_audit LABELNAMES text YES NULL 所属标签名称
263 cw_is_person_audit CREATE_SYS_ACCOUNT tinyint YES 0 是否同步创建账号,0 不创建 1 创建
264 cw_is_person_audit SYS_ACCOUNT_ID varchar YES NULL 系统账号ID
265 cw_is_person_audit IC_CARD_NO varchar YES NULL IC卡号
266 cw_is_person_audit IC_CARD_TYPE varchar YES NULL IC卡类型
267 cw_is_person_audit SOURCE tinyint NO NULL 来源(1:页面;2:抓拍;3:设备;4:扫码)
268 cw_is_person_audit DEVICE_CODE varchar YES NULL 注册设备编号
269 cw_is_person_audit DEVICE_NAME varchar YES NULL 注册设备名称
270 cw_is_person_audit WELCOME varchar YES NULL 欢迎语
271 cw_is_person_audit RESERVE_INFO varchar YES NULL 备用字段
272 cw_is_person_audit USER_PROPERTIES text YES NULL 用户填写字段
273 cw_is_person_audit USER_PROPERTIES_NAME text YES NULL 用户填写字段名称
274 cw_is_person_audit STATUS tinyint YES NULL 人员状态(0 有效 1 无效)默认为0
275 cw_is_person_audit AUDIT_STATUS tinyint YES NULL 审核状态:0审核中,1审核通过,2审核失败
276 cw_is_person_audit IS_DEL tinyint YES NULL 逻辑删除字段 0:未删除 1:已删除
277 cw_is_person_audit CREATE_USER_ID varchar YES NULL 创建人ID
278 cw_is_person_audit CREATE_TIME bigint YES NULL 创建日期 时间戳
279 cw_is_person_audit LAST_UPDATE_USER_ID varchar YES NULL 修改人员ID
280 cw_is_person_audit LAST_UPDATE_TIME bigint YES NULL 修改日期 时间戳
281 cw_is_person_audit EXT1 varchar YES NULL 扩展字段1
282 cw_is_person_audit EXT2 varchar YES NULL 扩展字段2
283 cw_is_person_audit EXT3 varchar YES NULL 扩展字段3
284 cw_is_person_audit EXT4 varchar YES NULL 扩展字段4
285 cw_is_person_audit EXT5 varchar YES NULL 扩展字段5
286 cw_is_person_audit EXT6 varchar YES NULL 扩展字段6
287 cw_is_person_audit EXT7 varchar YES NULL 扩展字段7
288 cw_is_person_audit EXT8 varchar YES NULL 扩展字段8
289 cw_is_person_audit EXT9 varchar YES NULL 扩展字段9
290 cw_is_person_audit EXT10 varchar YES NULL 扩展字段10
291 cw_is_person_audit EXT11 varchar YES NULL 扩展字段11
292 cw_is_person_audit EXT12 varchar YES NULL 扩展字段12
293 cw_is_person_audit EXT13 varchar YES NULL 扩展字段13
294 cw_is_person_audit EXT14 varchar YES NULL 扩展字段14
295 cw_is_person_audit EXT15 varchar YES NULL 扩展字段15
296 cw_is_person_audit EXT16 varchar YES NULL 扩展字段16
297 cw_is_person_audit EXT17 varchar YES NULL 扩展字段17
298 cw_is_person_audit EXT18 varchar YES NULL 扩展字段18
299 cw_is_person_audit EXT19 varchar YES NULL 扩展字段19
300 cw_is_person_audit EXT20 varchar YES NULL 扩展字段20
301 cw_is_person_audit EXT21 varchar YES NULL 扩展字段21
302 cw_is_person_audit EXT22 varchar YES NULL 扩展字段22
303 cw_is_person_audit EXT23 varchar YES NULL 扩展字段23
304 cw_is_person_audit EXT24 varchar YES NULL 扩展字段24
305 cw_is_person_audit EXT25 varchar YES NULL 扩展字段25
306 cw_is_person_audit EXT26 varchar YES NULL 扩展字段26
307 cw_is_person_audit EXT27 varchar YES NULL 扩展字段27
308 cw_is_person_audit EXT28 varchar YES NULL 扩展字段28
309 cw_is_person_audit EXT29 varchar YES NULL 扩展字段29
310 cw_is_person_audit EXT30 varchar YES NULL 扩展字段30
311 cw_is_person_audit EXT31 varchar YES NULL 扩展字段31
312 cw_is_person_audit EXT32 varchar YES NULL 扩展字段32
313 cw_is_person_audit EXT33 varchar YES NULL 扩展字段33
314 cw_is_person_audit EXT34 varchar YES NULL 扩展字段34
315 cw_is_person_audit EXT35 varchar YES NULL 扩展字段35
316 cw_is_person_audit EXT36 varchar YES NULL 扩展字段36
317 cw_is_person_audit EXT37 varchar YES NULL 扩展字段37
318 cw_is_person_audit EXT38 varchar YES NULL 扩展字段38
319 cw_is_person_audit EXT39 varchar YES NULL 扩展字段39
320 cw_is_person_audit EXT40 varchar YES NULL 扩展字段40
321 cw_is_person_batch_detail ID varchar NO NULL PRI 主键ID
322 cw_is_person_batch_detail BATCH_ID varchar NO NULL MUL 所属批次ID
323 cw_is_person_batch_detail FILE_NAME varchar NO NULL 文件名称
324 cw_is_person_batch_detail PERSON_NAME varchar YES NULL 人员姓名
325 cw_is_person_batch_detail STATUS decimal NO NULL 状态(1 成功 2 失败)
326 cw_is_person_batch_detail REMARK varchar YES NULL 描述信息
327 cw_is_person_batch_detail CREATE_TIME decimal YES NULL 创建时间,时间戳
328 cw_is_person_batch_detail CREATE_USER_ID varchar YES NULL 创建用户ID
329 cw_is_person_batch_import ID varchar NO NULL 主键ID
330 cw_is_person_batch_import BUSINESS_ID varchar YES NULL 企业ID
331 cw_is_person_batch_import BATCH_NO varchar NO NULL 批次号
332 cw_is_person_batch_import TYPE decimal NO NULL 导入类型(1.文件前端上传,2.服务器文件路径,3.服务器图片生成 )
333 cw_is_person_batch_import FILE_NAME varchar NO NULL 文件名称
334 cw_is_person_batch_import FILE_PATH varchar YES NULL 文件路径
335 cw_is_person_batch_import FINISH_TIME decimal YES NULL 结束时间,时间戳
336 cw_is_person_batch_import TOTAL_COUNT decimal YES NULL 总数
337 cw_is_person_batch_import CURRENT_COUNT decimal YES NULL 当前已完成数
338 cw_is_person_batch_import REMARK varchar YES NULL 描述信息
339 cw_is_person_batch_import STATUS decimal NO NULL 状态(1.未开始,2.进行中,3.已完成,4.异常)
340 cw_is_person_batch_import CREATE_TIME decimal YES NULL 创建时间,时间戳
341 cw_is_person_batch_import CREATE_USER_ID varchar YES NULL 创建用户ID
342 cw_is_person_batch_import OPERATION varchar YES NULL 操作类型(new 新增,update 更新)
343 cw_is_person_batch_import LOGIN_NAME varchar YES NULL 登录名称
344 cw_is_person_label_ref ID varchar NO NULL PRI 主键ID
345 cw_is_person_label_ref PERSON_ID varchar NO NULL MUL 人员ID
346 cw_is_person_label_ref LABEL_ID varchar NO NULL MUL 标签主键ID
347 cw_is_person_label_ref CREATE_TIME decimal YES NULL 创建日期 时间戳
348 cw_is_person_label_ref CREATE_USER_ID varchar YES NULL 创建人ID
349 cw_is_person_label_ref LAST_UPDATE_TIME decimal YES NULL 修改日期 时间戳
350 cw_is_person_label_ref LAST_UPDATE_USER_ID varchar YES NULL 修改人员ID
351 cw_is_person_organization_ref ID varchar NO NULL PRI 主键ID
352 cw_is_person_organization_ref PERSON_ID varchar NO NULL MUL 人员ID
353 cw_is_person_organization_ref ORG_ID varchar NO NULL MUL 组织ID
354 cw_is_person_organization_ref CREATE_TIME decimal YES NULL 创建日期 时间戳
355 cw_is_person_organization_ref CREATE_USER_ID varchar YES NULL 创建人ID
356 cw_is_person_organization_ref LAST_UPDATE_TIME decimal YES NULL 修改日期 时间戳
357 cw_is_person_organization_ref LAST_UPDATE_USER_ID varchar YES NULL 修改人员ID
358 cw_is_person_properties ID varchar NO NULL PRI 主键
359 cw_is_person_properties BUSINESS_ID varchar YES NULL 企业ID
360 cw_is_person_properties CODE varchar YES NULL 编号
361 cw_is_person_properties NAME varchar YES NULL 名称
362 cw_is_person_properties TYPE smallint YES NULL 输入类型 1 字符串 2 选择 3 时间 4 文件上传
363 cw_is_person_properties STATUS tinyint YES 0 (0 有效 1 无效)默认为0
364 cw_is_person_properties HAS_SYS_ACCOUNT tinyint YES 0 是否作为系统账号 0 不可以 1 可以
365 cw_is_person_properties HAS_SYS_ACCOUNT_AVAILABLE tinyint YES 0 是否可以作为系统账号字段 0 不可以 1 可以
366 cw_is_person_properties HAS_REQUIRED tinyint YES 0 是否必填 0 不要必填 1 必填
367 cw_is_person_properties HAS_DEFAULT tinyint YES 0 是否默认 0 不默认 1 默认
368 cw_is_person_properties ORDER_NUM int YES NULL 序号
369 cw_is_person_properties REMINDER varchar YES NULL 提示语
370 cw_is_person_properties CREATE_USER_ID varchar YES NULL 创建人
371 cw_is_person_properties CREATE_TIME bigint YES NULL 创建时间
372 cw_is_person_properties LAST_UPDATE_USER_ID varchar YES NULL 更新人
373 cw_is_person_properties LAST_UPDATE_TIME bigint YES NULL 更新时间
374 cw_is_person_properties ARRAY_DATA varchar YES NULL 如果类型是2,补充填写下拉列表,用逗号分隔
375 cw_is_person_properties HAS_MULTIPLE tinyint YES NULL 如果类型是2,补充填写是否多选 0 单选 1 复选
376 cw_is_person_properties_switch ID varchar NO NULL PRI 主键
377 cw_is_person_properties_switch BUSINESS_ID varchar YES NULL 企业ID
378 cw_is_person_properties_switch SWITCH_PARAM tinyint YES NULL 开启注册照优化
379 cw_is_person_properties_switch SIZE_PARAM int YES NULL 尺寸:1-1存,2-2存
380 cw_is_person_properties_switch SHAPE_PARAM tinyint YES NULL 形态变化
381 cw_is_person_properties_switch STATUS tinyint YES 0 (0 有效 1 无效)默认为0
382 cw_is_person_properties_switch SKIN_COLOR_PARAM tinyint YES NULL 肤色整体优化
383 cw_is_person_properties_switch CREATE_USER_ID varchar YES NULL 创建人
384 cw_is_person_properties_switch CREATE_TIME bigint YES NULL 创建时间
385 cw_is_person_properties_switch LAST_UPDATE_USER_ID varchar YES NULL 更新人
386 cw_is_person_properties_switch LAST_UPDATE_TIME bigint YES NULL 更新时间
387 cw_is_person_properties_switch DEFECTS_PARAM tinyint YES NULL 瑕疵优化
388 cw_is_person_properties_switch BACKGROUND_PARAM tinyint YES NULL 换背景
389 cw_is_person_properties_switch BACKGROUND_OBJECT int YES NULL 换背景底色:3-白色,4-蓝色,2-红色
390 cw_is_person_registry ID varchar NO PRI 主键ID
391 cw_is_person_registry BUSINESS_ID varchar NO 租户ID
392 cw_is_person_registry STATUS tinyint NO 1 开启设备注册(0 关闭 1 开启) 默认为1
393 cw_is_person_registry DEVICE_STATUS tinyint NO 0 设备注册审核(0 关闭 1 开启) 默认为0
394 cw_is_person_registry CODE_STATUS tinyint NO 1 扫码注册审核(0 关闭 1 开启) 默认为1
395 cw_is_person_registry ORGANIZATION_IDS varchar YES 注册默认组织ID列表(用英文逗号分隔)
396 cw_is_person_registry LABEL_IDS varchar YES 注册默认标签ID列表(用英文逗号分隔)
397 cw_is_person_registry CREATE_TIME decimal YES NULL 创建日期 时间戳
398 cw_is_person_registry CREATE_USER_ID varchar YES 创建人ID
399 cw_is_person_registry LAST_UPDATE_TIME decimal YES NULL 修改日期 时间戳
400 cw_is_person_registry LAST_UPDATE_USER_ID varchar YES 修改人员ID
401 cw_is_person_registry TYPE tinyint NO 0 注册类型(0:自助注册 1:人证注册) 默认为0
402 cw_is_person_registry_device ID varchar NO PRI 主键ID
403 cw_is_person_registry_device REGISTRY_ID varchar NO MUL 注册配置主键
404 cw_is_person_registry_device DEVICE_CODE varchar NO 设备编码
405 cw_is_person_registry_properties ID varchar NO PRI 主键ID
406 cw_is_person_registry_properties REGISTRY_ID varchar NO MUL 注册配置主键
407 cw_is_person_registry_properties PERSON_PROPERTY_ID varchar NO 人员属性表主键
408 cw_is_person_registry_properties BIND_PROPERTY_CODE varchar YES NULL 与人员属性关联的属性
409 cw_operation_log ID varchar NO NULL PRI 唯一标识
410 cw_operation_log BUSINESS_ID varchar YES NULL business id
411 cw_operation_log CREATE_USER_ID varchar YES NULL 创建者
412 cw_operation_log CREATE_USER_NAME varchar YES NULL 创建者名称
413 cw_operation_log CREATE_TIME decimal YES NULL 创建时间
414 cw_operation_log INTERFACE_NAME varchar YES NULL 接口名称
415 cw_operation_log CONTENT text YES NULL 请求报文
416 cw_operation_log MODULE varchar YES NULL 模块
417 cw_operation_log CALL_IP varchar YES NULL 来源ip
418 cw_task_job_everytime_details ID varchar YES NULL
419 cw_task_job_everytime_details JOB_NAME varchar YES NULL
420 cw_task_job_everytime_details JOB_STATUS decimal YES NULL
421 cw_task_job_everytime_details START_TIME decimal YES NULL
422 cw_task_job_everytime_details END_TIME decimal YES NULL
423 cw_task_job_everytime_details IP_ADDRESS varchar YES NULL
424 cw_task_job_everytime_details MAC_ADDRESS varchar YES NULL
425 org_floor org_id varchar NO NULL 机构id
426 org_floor zone_id varchar YES NULL 楼层id
427 org_floor is_all smallint NO NULL 是否全部查询:0-是,1-不是
428 org_floor zone_name varchar YES NULL 楼层名
@@ -0,0 +1,171 @@
mysql: [Warning] Using a password on the command line interface can be insecure.
cw_is_device_image_store PRIMARY ID 0 1
cw_is_device_image_store UNIQUE_KEY DEVICE_ID 0 1
cw_is_device_image_store UNIQUE_KEY IMAGE_STORE_ID 0 2
cw_is_device_person PRIMARY ID 0 1
cw_is_device_person UNIQUE_KEY DEVICE_ID 0 1
cw_is_device_person UNIQUE_KEY PERSON_ID 0 2
cw_is_device_person_sync_log IDX_DEVICE_STATUS DEVICE_ID 1 1
cw_is_device_person_sync_log IDX_DEVICE_STATUS GROUP_PERSON_REF_ID 1 2
cw_is_device_person_sync_log IDX_DEVICE_STATUS STATUS 1 3
cw_is_device_person_sync_log IDX_DEVICE_STATUS LAST_REPORT_TIME 1 4
cw_is_device_person_sync_log IDX_DEVICE_STATUS LAST_PULL_TIME 1 5
cw_is_device_person_sync_log IDX_DEVICE_STATUS LAST_UPDATE_TIME 1 6
cw_is_device_person_sync_log idx_dev_ps_syn_log_imgstroe_id_person_id IMAGE_STORE_ID 1 1
cw_is_device_person_sync_log idx_dev_ps_syn_log_imgstroe_id_person_id PERSON_ID 1 2
cw_is_device_person_sync_log IDX_GROUP_PERSON_REF GROUP_PERSON_REF_ID 1 1
cw_is_device_person_sync_log IDX_IMAGESTORE_STATUS IMAGE_STORE_ID 1 1
cw_is_device_person_sync_log IDX_IMAGESTORE_STATUS STATUS 1 2
cw_is_device_person_sync_log IDX_PERSON_UPDATE DEVICE_ID 1 1
cw_is_device_person_sync_log IDX_PERSON_UPDATE IMAGE_STORE_ID 1 2
cw_is_device_person_sync_log IDX_PERSON_UPDATE LAST_UPDATE_TIME 1 3
cw_is_device_person_sync_log IDX_PERSON_UPDATE PERSON_ID 1 4
cw_is_device_person_sync_log PRIMARY ID 0 1
cw_is_device_person_sync_log UNIQUE_KEY DEVICE_ID 0 1
cw_is_device_person_sync_log UNIQUE_KEY IMAGE_STORE_ID 0 2
cw_is_device_person_sync_log UNIQUE_KEY PERSON_ID 0 3
cw_is_group_person_ref IDX_IGPR_PEROSN_COUNT2 IMAGE_STORE_ID 1 1
cw_is_group_person_ref IDX_IGPR_PEROSN_COUNT2 STATUS 1 2
cw_is_group_person_ref IDX_IGPR_PERSON IMAGE_STORE_ID 1 1
cw_is_group_person_ref IDX_IGPR_PERSON PERSON_ID 1 2
cw_is_group_person_ref IDX_IGPR_PERSON_1 PERSON_ID 1 1
cw_is_group_person_ref IDX_IGPR_PERSON_COUNT IS_DEL 1 1
cw_is_group_person_ref IDX_IGPR_PERSON_COUNT IMAGE_STORE_ID 1 2
cw_is_group_person_ref IDX_IGPR_PERSON_UPDATE IMAGE_STORE_ID 1 1
cw_is_group_person_ref IDX_IGPR_PERSON_UPDATE LAST_UPDATE_TIME 1 2
cw_is_group_person_ref IDX_IGPR_PERSON_UPDATE PERSON_ID 1 3
cw_is_group_person_ref IDX_IGPR_STATUS_TIME STATUS 1 1
cw_is_group_person_ref IDX_IGPR_STATUS_TIME LAST_UPDATE_TIME 1 2
cw_is_group_person_ref PRIMARY ID 0 1
cw_is_image_store_associated_ref IDX_IMAGE_STORE_ASSOCIATED IMAGE_STORE_ID 1 1
cw_is_image_store_associated_ref IDX_IMAGE_STORE_ASSOCIATED ASSOCIATED_OBJECT_ID 1 2
cw_is_image_store_associated_ref IDX_IMAGE_STORE_ASSOCIATED ASSOCIATED_ACTION 1 3
cw_is_image_store_associated_ref PRIMARY ID 0 1
cw_is_label PRIMARY ID 0 1
cw_is_organization PRIMARY ID 0 1
cw_is_organization_image_store PRIMARY APPLICATION_ID 0 1
cw_is_organization_image_store PRIMARY ORG_ID 0 2
cw_is_organization_image_store PRIMARY IMAGE_STORE_ID 0 3
cw_is_organization_type PRIMARY ID 0 1
cw_is_organization_type_properties PRIMARY ID 0 1
cw_is_person IDX_CW_IS_PERSON_EMAIL BUSINESS_ID 1 1
cw_is_person IDX_CW_IS_PERSON_EMAIL EMAIL 1 2
cw_is_person IDX_CW_IS_PERSON_PERSON_CODE BUSINESS_ID 1 1
cw_is_person IDX_CW_IS_PERSON_PERSON_CODE PERSON_CODE 1 2
cw_is_person IDX_CW_IS_PERSON_PHONE BUSINESS_ID 1 1
cw_is_person IDX_CW_IS_PERSON_PHONE PHONE 1 2
cw_is_person IDX_CW_IS_PERSON_USER_NAME BUSINESS_ID 1 1
cw_is_person IDX_CW_IS_PERSON_USER_NAME USER_NAME 1 2
cw_is_person idx_imageId IMAGE_ID 1 1
cw_is_person IDX_IP_PAGE IS_DEL 1 1
cw_is_person IDX_IP_PAGE BUSINESS_ID 1 2
cw_is_person IDX_IP_PAGE LAST_UPDATE_TIME 1 3
cw_is_person IDX_IP_PAGE ID 1 4
cw_is_person IDX_IP_PAGE SOURCE 1 5
cw_is_person idx_is_person ID 0 1
cw_is_person IDX_IS_PERSON_NAME NAME 1 1
cw_is_person PRIMARY ID 0 1
cw_is_person_audit PRIMARY ID 0 1
cw_is_person_batch_detail IDX_CEBD_PAGE BATCH_ID 1 1
cw_is_person_batch_detail IDX_CEBD_PAGE CREATE_TIME 1 2
cw_is_person_batch_detail PRIMARY ID 0 1
cw_is_person_label_ref IDX_LABEL LABEL_ID 1 1
cw_is_person_label_ref IDX_PERSON PERSON_ID 1 1
cw_is_person_label_ref idx_pl_personid PERSON_ID 1 1
cw_is_person_label_ref PRIMARY ID 0 1
cw_is_person_organization_ref IDX_ORG ORG_ID 1 1
cw_is_person_organization_ref IDX_PERSON PERSON_ID 1 1
cw_is_person_organization_ref idx_po_person_id PERSON_ID 1 1
cw_is_person_organization_ref PRIMARY ID 0 1
cw_is_person_properties PRIMARY ID 0 1
cw_is_person_properties_switch PRIMARY ID 0 1
cw_is_person_registry PRIMARY ID 0 1
cw_is_person_registry_device PRIMARY ID 0 1
cw_is_person_registry_device UNIQUE_KEY REGISTRY_ID 0 1
cw_is_person_registry_device UNIQUE_KEY DEVICE_CODE 0 2
cw_is_person_registry_properties PRIMARY ID 0 1
cw_is_person_registry_properties UNIQUE_KEY REGISTRY_ID 0 1
cw_is_person_registry_properties UNIQUE_KEY PERSON_PROPERTY_ID 0 2
cw_operation_log PRIMARY ID 0 1
qrtz_blob_triggers PRIMARY SCHED_NAME 0 1
qrtz_blob_triggers PRIMARY TRIGGER_NAME 0 2
qrtz_blob_triggers PRIMARY TRIGGER_GROUP 0 3
qrtz_calendars PRIMARY SCHED_NAME 0 1
qrtz_calendars PRIMARY CALENDAR_NAME 0 2
qrtz_cron_triggers PRIMARY SCHED_NAME 0 1
qrtz_cron_triggers PRIMARY TRIGGER_NAME 0 2
qrtz_cron_triggers PRIMARY TRIGGER_GROUP 0 3
qrtz_fired_triggers IDX_QRTZ_FT_INST_JOB_REQ_RCVRY INSTANCE_NAME 1 1
qrtz_fired_triggers IDX_QRTZ_FT_INST_JOB_REQ_RCVRY SCHED_NAME 1 2
qrtz_fired_triggers IDX_QRTZ_FT_INST_JOB_REQ_RCVRY REQUESTS_RECOVERY 1 3
qrtz_fired_triggers IDX_QRTZ_FT_JG SCHED_NAME 1 1
qrtz_fired_triggers IDX_QRTZ_FT_JG JOB_GROUP 1 2
qrtz_fired_triggers IDX_QRTZ_FT_J_G JOB_NAME 1 1
qrtz_fired_triggers IDX_QRTZ_FT_J_G SCHED_NAME 1 2
qrtz_fired_triggers IDX_QRTZ_FT_J_G JOB_GROUP 1 3
qrtz_fired_triggers IDX_QRTZ_FT_TG SCHED_NAME 1 1
qrtz_fired_triggers IDX_QRTZ_FT_TG TRIGGER_GROUP 1 2
qrtz_fired_triggers IDX_QRTZ_FT_TRIG_INST_NAME SCHED_NAME 1 1
qrtz_fired_triggers IDX_QRTZ_FT_TRIG_INST_NAME INSTANCE_NAME 1 2
qrtz_fired_triggers IDX_QRTZ_FT_T_G SCHED_NAME 1 1
qrtz_fired_triggers IDX_QRTZ_FT_T_G TRIGGER_NAME 1 2
qrtz_fired_triggers IDX_QRTZ_FT_T_G TRIGGER_GROUP 1 3
qrtz_fired_triggers PRIMARY SCHED_NAME 0 1
qrtz_fired_triggers PRIMARY ENTRY_ID 0 2
qrtz_job_details IDX_QRTZ_J_GRP SCHED_NAME 1 1
qrtz_job_details IDX_QRTZ_J_GRP JOB_GROUP 1 2
qrtz_job_details IDX_QRTZ_J_REQ_RECOVERY SCHED_NAME 1 1
qrtz_job_details IDX_QRTZ_J_REQ_RECOVERY REQUESTS_RECOVERY 1 2
qrtz_job_details PRIMARY SCHED_NAME 0 1
qrtz_job_details PRIMARY JOB_NAME 0 2
qrtz_job_details PRIMARY JOB_GROUP 0 3
qrtz_locks PRIMARY SCHED_NAME 0 1
qrtz_locks PRIMARY LOCK_NAME 0 2
qrtz_paused_trigger_grps PRIMARY SCHED_NAME 0 1
qrtz_paused_trigger_grps PRIMARY TRIGGER_GROUP 0 2
qrtz_scheduler_state PRIMARY SCHED_NAME 0 1
qrtz_scheduler_state PRIMARY INSTANCE_NAME 0 2
qrtz_simple_triggers PRIMARY SCHED_NAME 0 1
qrtz_simple_triggers PRIMARY TRIGGER_NAME 0 2
qrtz_simple_triggers PRIMARY TRIGGER_GROUP 0 3
qrtz_simprop_triggers PRIMARY SCHED_NAME 0 1
qrtz_simprop_triggers PRIMARY TRIGGER_NAME 0 2
qrtz_simprop_triggers PRIMARY TRIGGER_GROUP 0 3
qrtz_triggers IDX_QRTZ_T_C CALENDAR_NAME 1 1
qrtz_triggers IDX_QRTZ_T_C SCHED_NAME 1 2
qrtz_triggers IDX_QRTZ_T_G TRIGGER_GROUP 1 1
qrtz_triggers IDX_QRTZ_T_G SCHED_NAME 1 2
qrtz_triggers IDX_QRTZ_T_JG JOB_GROUP 1 1
qrtz_triggers IDX_QRTZ_T_JG SCHED_NAME 1 2
qrtz_triggers IDX_QRTZ_T_NEXT_FIRE_TIME NEXT_FIRE_TIME 1 1
qrtz_triggers IDX_QRTZ_T_NEXT_FIRE_TIME SCHED_NAME 1 2
qrtz_triggers IDX_QRTZ_T_NFT_MISFIRE SCHED_NAME 1 1
qrtz_triggers IDX_QRTZ_T_NFT_MISFIRE MISFIRE_INSTR 1 2
qrtz_triggers IDX_QRTZ_T_NFT_MISFIRE NEXT_FIRE_TIME 1 3
qrtz_triggers IDX_QRTZ_T_NFT_ST NEXT_FIRE_TIME 1 1
qrtz_triggers IDX_QRTZ_T_NFT_ST SCHED_NAME 1 2
qrtz_triggers IDX_QRTZ_T_NFT_ST TRIGGER_STATE 1 3
qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE NEXT_FIRE_TIME 1 1
qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE TRIGGER_STATE 1 2
qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE MISFIRE_INSTR 1 3
qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE SCHED_NAME 1 4
qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE_GRP TRIGGER_GROUP 1 1
qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE_GRP SCHED_NAME 1 2
qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE_GRP MISFIRE_INSTR 1 3
qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE_GRP NEXT_FIRE_TIME 1 4
qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE_GRP TRIGGER_STATE 1 5
qrtz_triggers IDX_QRTZ_T_N_G_STATE SCHED_NAME 1 1
qrtz_triggers IDX_QRTZ_T_N_G_STATE TRIGGER_STATE 1 2
qrtz_triggers IDX_QRTZ_T_N_G_STATE TRIGGER_GROUP 1 3
qrtz_triggers IDX_QRTZ_T_N_STATE TRIGGER_STATE 1 1
qrtz_triggers IDX_QRTZ_T_N_STATE TRIGGER_NAME 1 2
qrtz_triggers IDX_QRTZ_T_N_STATE SCHED_NAME 1 3
qrtz_triggers IDX_QRTZ_T_N_STATE TRIGGER_GROUP 1 4
qrtz_triggers IDX_QRTZ_T_STATE TRIGGER_STATE 1 1
qrtz_triggers IDX_QRTZ_T_STATE SCHED_NAME 1 2
qrtz_triggers PRIMARY SCHED_NAME 0 1
qrtz_triggers PRIMARY TRIGGER_NAME 0 2
qrtz_triggers PRIMARY TRIGGER_GROUP 0 3
qrtz_triggers SYS_C0012788 SCHED_NAME 1 1
qrtz_triggers SYS_C0012788 JOB_NAME 1 2
qrtz_triggers SYS_C0012788 JOB_GROUP 1 3
1 mysql: [Warning] Using a password on the command line interface can be insecure.
2 cw_is_device_image_store PRIMARY ID 0 1
3 cw_is_device_image_store UNIQUE_KEY DEVICE_ID 0 1
4 cw_is_device_image_store UNIQUE_KEY IMAGE_STORE_ID 0 2
5 cw_is_device_person PRIMARY ID 0 1
6 cw_is_device_person UNIQUE_KEY DEVICE_ID 0 1
7 cw_is_device_person UNIQUE_KEY PERSON_ID 0 2
8 cw_is_device_person_sync_log IDX_DEVICE_STATUS DEVICE_ID 1 1
9 cw_is_device_person_sync_log IDX_DEVICE_STATUS GROUP_PERSON_REF_ID 1 2
10 cw_is_device_person_sync_log IDX_DEVICE_STATUS STATUS 1 3
11 cw_is_device_person_sync_log IDX_DEVICE_STATUS LAST_REPORT_TIME 1 4
12 cw_is_device_person_sync_log IDX_DEVICE_STATUS LAST_PULL_TIME 1 5
13 cw_is_device_person_sync_log IDX_DEVICE_STATUS LAST_UPDATE_TIME 1 6
14 cw_is_device_person_sync_log idx_dev_ps_syn_log_imgstroe_id_person_id IMAGE_STORE_ID 1 1
15 cw_is_device_person_sync_log idx_dev_ps_syn_log_imgstroe_id_person_id PERSON_ID 1 2
16 cw_is_device_person_sync_log IDX_GROUP_PERSON_REF GROUP_PERSON_REF_ID 1 1
17 cw_is_device_person_sync_log IDX_IMAGESTORE_STATUS IMAGE_STORE_ID 1 1
18 cw_is_device_person_sync_log IDX_IMAGESTORE_STATUS STATUS 1 2
19 cw_is_device_person_sync_log IDX_PERSON_UPDATE DEVICE_ID 1 1
20 cw_is_device_person_sync_log IDX_PERSON_UPDATE IMAGE_STORE_ID 1 2
21 cw_is_device_person_sync_log IDX_PERSON_UPDATE LAST_UPDATE_TIME 1 3
22 cw_is_device_person_sync_log IDX_PERSON_UPDATE PERSON_ID 1 4
23 cw_is_device_person_sync_log PRIMARY ID 0 1
24 cw_is_device_person_sync_log UNIQUE_KEY DEVICE_ID 0 1
25 cw_is_device_person_sync_log UNIQUE_KEY IMAGE_STORE_ID 0 2
26 cw_is_device_person_sync_log UNIQUE_KEY PERSON_ID 0 3
27 cw_is_group_person_ref IDX_IGPR_PEROSN_COUNT2 IMAGE_STORE_ID 1 1
28 cw_is_group_person_ref IDX_IGPR_PEROSN_COUNT2 STATUS 1 2
29 cw_is_group_person_ref IDX_IGPR_PERSON IMAGE_STORE_ID 1 1
30 cw_is_group_person_ref IDX_IGPR_PERSON PERSON_ID 1 2
31 cw_is_group_person_ref IDX_IGPR_PERSON_1 PERSON_ID 1 1
32 cw_is_group_person_ref IDX_IGPR_PERSON_COUNT IS_DEL 1 1
33 cw_is_group_person_ref IDX_IGPR_PERSON_COUNT IMAGE_STORE_ID 1 2
34 cw_is_group_person_ref IDX_IGPR_PERSON_UPDATE IMAGE_STORE_ID 1 1
35 cw_is_group_person_ref IDX_IGPR_PERSON_UPDATE LAST_UPDATE_TIME 1 2
36 cw_is_group_person_ref IDX_IGPR_PERSON_UPDATE PERSON_ID 1 3
37 cw_is_group_person_ref IDX_IGPR_STATUS_TIME STATUS 1 1
38 cw_is_group_person_ref IDX_IGPR_STATUS_TIME LAST_UPDATE_TIME 1 2
39 cw_is_group_person_ref PRIMARY ID 0 1
40 cw_is_image_store_associated_ref IDX_IMAGE_STORE_ASSOCIATED IMAGE_STORE_ID 1 1
41 cw_is_image_store_associated_ref IDX_IMAGE_STORE_ASSOCIATED ASSOCIATED_OBJECT_ID 1 2
42 cw_is_image_store_associated_ref IDX_IMAGE_STORE_ASSOCIATED ASSOCIATED_ACTION 1 3
43 cw_is_image_store_associated_ref PRIMARY ID 0 1
44 cw_is_label PRIMARY ID 0 1
45 cw_is_organization PRIMARY ID 0 1
46 cw_is_organization_image_store PRIMARY APPLICATION_ID 0 1
47 cw_is_organization_image_store PRIMARY ORG_ID 0 2
48 cw_is_organization_image_store PRIMARY IMAGE_STORE_ID 0 3
49 cw_is_organization_type PRIMARY ID 0 1
50 cw_is_organization_type_properties PRIMARY ID 0 1
51 cw_is_person IDX_CW_IS_PERSON_EMAIL BUSINESS_ID 1 1
52 cw_is_person IDX_CW_IS_PERSON_EMAIL EMAIL 1 2
53 cw_is_person IDX_CW_IS_PERSON_PERSON_CODE BUSINESS_ID 1 1
54 cw_is_person IDX_CW_IS_PERSON_PERSON_CODE PERSON_CODE 1 2
55 cw_is_person IDX_CW_IS_PERSON_PHONE BUSINESS_ID 1 1
56 cw_is_person IDX_CW_IS_PERSON_PHONE PHONE 1 2
57 cw_is_person IDX_CW_IS_PERSON_USER_NAME BUSINESS_ID 1 1
58 cw_is_person IDX_CW_IS_PERSON_USER_NAME USER_NAME 1 2
59 cw_is_person idx_imageId IMAGE_ID 1 1
60 cw_is_person IDX_IP_PAGE IS_DEL 1 1
61 cw_is_person IDX_IP_PAGE BUSINESS_ID 1 2
62 cw_is_person IDX_IP_PAGE LAST_UPDATE_TIME 1 3
63 cw_is_person IDX_IP_PAGE ID 1 4
64 cw_is_person IDX_IP_PAGE SOURCE 1 5
65 cw_is_person idx_is_person ID 0 1
66 cw_is_person IDX_IS_PERSON_NAME NAME 1 1
67 cw_is_person PRIMARY ID 0 1
68 cw_is_person_audit PRIMARY ID 0 1
69 cw_is_person_batch_detail IDX_CEBD_PAGE BATCH_ID 1 1
70 cw_is_person_batch_detail IDX_CEBD_PAGE CREATE_TIME 1 2
71 cw_is_person_batch_detail PRIMARY ID 0 1
72 cw_is_person_label_ref IDX_LABEL LABEL_ID 1 1
73 cw_is_person_label_ref IDX_PERSON PERSON_ID 1 1
74 cw_is_person_label_ref idx_pl_personid PERSON_ID 1 1
75 cw_is_person_label_ref PRIMARY ID 0 1
76 cw_is_person_organization_ref IDX_ORG ORG_ID 1 1
77 cw_is_person_organization_ref IDX_PERSON PERSON_ID 1 1
78 cw_is_person_organization_ref idx_po_person_id PERSON_ID 1 1
79 cw_is_person_organization_ref PRIMARY ID 0 1
80 cw_is_person_properties PRIMARY ID 0 1
81 cw_is_person_properties_switch PRIMARY ID 0 1
82 cw_is_person_registry PRIMARY ID 0 1
83 cw_is_person_registry_device PRIMARY ID 0 1
84 cw_is_person_registry_device UNIQUE_KEY REGISTRY_ID 0 1
85 cw_is_person_registry_device UNIQUE_KEY DEVICE_CODE 0 2
86 cw_is_person_registry_properties PRIMARY ID 0 1
87 cw_is_person_registry_properties UNIQUE_KEY REGISTRY_ID 0 1
88 cw_is_person_registry_properties UNIQUE_KEY PERSON_PROPERTY_ID 0 2
89 cw_operation_log PRIMARY ID 0 1
90 qrtz_blob_triggers PRIMARY SCHED_NAME 0 1
91 qrtz_blob_triggers PRIMARY TRIGGER_NAME 0 2
92 qrtz_blob_triggers PRIMARY TRIGGER_GROUP 0 3
93 qrtz_calendars PRIMARY SCHED_NAME 0 1
94 qrtz_calendars PRIMARY CALENDAR_NAME 0 2
95 qrtz_cron_triggers PRIMARY SCHED_NAME 0 1
96 qrtz_cron_triggers PRIMARY TRIGGER_NAME 0 2
97 qrtz_cron_triggers PRIMARY TRIGGER_GROUP 0 3
98 qrtz_fired_triggers IDX_QRTZ_FT_INST_JOB_REQ_RCVRY INSTANCE_NAME 1 1
99 qrtz_fired_triggers IDX_QRTZ_FT_INST_JOB_REQ_RCVRY SCHED_NAME 1 2
100 qrtz_fired_triggers IDX_QRTZ_FT_INST_JOB_REQ_RCVRY REQUESTS_RECOVERY 1 3
101 qrtz_fired_triggers IDX_QRTZ_FT_JG SCHED_NAME 1 1
102 qrtz_fired_triggers IDX_QRTZ_FT_JG JOB_GROUP 1 2
103 qrtz_fired_triggers IDX_QRTZ_FT_J_G JOB_NAME 1 1
104 qrtz_fired_triggers IDX_QRTZ_FT_J_G SCHED_NAME 1 2
105 qrtz_fired_triggers IDX_QRTZ_FT_J_G JOB_GROUP 1 3
106 qrtz_fired_triggers IDX_QRTZ_FT_TG SCHED_NAME 1 1
107 qrtz_fired_triggers IDX_QRTZ_FT_TG TRIGGER_GROUP 1 2
108 qrtz_fired_triggers IDX_QRTZ_FT_TRIG_INST_NAME SCHED_NAME 1 1
109 qrtz_fired_triggers IDX_QRTZ_FT_TRIG_INST_NAME INSTANCE_NAME 1 2
110 qrtz_fired_triggers IDX_QRTZ_FT_T_G SCHED_NAME 1 1
111 qrtz_fired_triggers IDX_QRTZ_FT_T_G TRIGGER_NAME 1 2
112 qrtz_fired_triggers IDX_QRTZ_FT_T_G TRIGGER_GROUP 1 3
113 qrtz_fired_triggers PRIMARY SCHED_NAME 0 1
114 qrtz_fired_triggers PRIMARY ENTRY_ID 0 2
115 qrtz_job_details IDX_QRTZ_J_GRP SCHED_NAME 1 1
116 qrtz_job_details IDX_QRTZ_J_GRP JOB_GROUP 1 2
117 qrtz_job_details IDX_QRTZ_J_REQ_RECOVERY SCHED_NAME 1 1
118 qrtz_job_details IDX_QRTZ_J_REQ_RECOVERY REQUESTS_RECOVERY 1 2
119 qrtz_job_details PRIMARY SCHED_NAME 0 1
120 qrtz_job_details PRIMARY JOB_NAME 0 2
121 qrtz_job_details PRIMARY JOB_GROUP 0 3
122 qrtz_locks PRIMARY SCHED_NAME 0 1
123 qrtz_locks PRIMARY LOCK_NAME 0 2
124 qrtz_paused_trigger_grps PRIMARY SCHED_NAME 0 1
125 qrtz_paused_trigger_grps PRIMARY TRIGGER_GROUP 0 2
126 qrtz_scheduler_state PRIMARY SCHED_NAME 0 1
127 qrtz_scheduler_state PRIMARY INSTANCE_NAME 0 2
128 qrtz_simple_triggers PRIMARY SCHED_NAME 0 1
129 qrtz_simple_triggers PRIMARY TRIGGER_NAME 0 2
130 qrtz_simple_triggers PRIMARY TRIGGER_GROUP 0 3
131 qrtz_simprop_triggers PRIMARY SCHED_NAME 0 1
132 qrtz_simprop_triggers PRIMARY TRIGGER_NAME 0 2
133 qrtz_simprop_triggers PRIMARY TRIGGER_GROUP 0 3
134 qrtz_triggers IDX_QRTZ_T_C CALENDAR_NAME 1 1
135 qrtz_triggers IDX_QRTZ_T_C SCHED_NAME 1 2
136 qrtz_triggers IDX_QRTZ_T_G TRIGGER_GROUP 1 1
137 qrtz_triggers IDX_QRTZ_T_G SCHED_NAME 1 2
138 qrtz_triggers IDX_QRTZ_T_JG JOB_GROUP 1 1
139 qrtz_triggers IDX_QRTZ_T_JG SCHED_NAME 1 2
140 qrtz_triggers IDX_QRTZ_T_NEXT_FIRE_TIME NEXT_FIRE_TIME 1 1
141 qrtz_triggers IDX_QRTZ_T_NEXT_FIRE_TIME SCHED_NAME 1 2
142 qrtz_triggers IDX_QRTZ_T_NFT_MISFIRE SCHED_NAME 1 1
143 qrtz_triggers IDX_QRTZ_T_NFT_MISFIRE MISFIRE_INSTR 1 2
144 qrtz_triggers IDX_QRTZ_T_NFT_MISFIRE NEXT_FIRE_TIME 1 3
145 qrtz_triggers IDX_QRTZ_T_NFT_ST NEXT_FIRE_TIME 1 1
146 qrtz_triggers IDX_QRTZ_T_NFT_ST SCHED_NAME 1 2
147 qrtz_triggers IDX_QRTZ_T_NFT_ST TRIGGER_STATE 1 3
148 qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE NEXT_FIRE_TIME 1 1
149 qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE TRIGGER_STATE 1 2
150 qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE MISFIRE_INSTR 1 3
151 qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE SCHED_NAME 1 4
152 qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE_GRP TRIGGER_GROUP 1 1
153 qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE_GRP SCHED_NAME 1 2
154 qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE_GRP MISFIRE_INSTR 1 3
155 qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE_GRP NEXT_FIRE_TIME 1 4
156 qrtz_triggers IDX_QRTZ_T_NFT_ST_MISFIRE_GRP TRIGGER_STATE 1 5
157 qrtz_triggers IDX_QRTZ_T_N_G_STATE SCHED_NAME 1 1
158 qrtz_triggers IDX_QRTZ_T_N_G_STATE TRIGGER_STATE 1 2
159 qrtz_triggers IDX_QRTZ_T_N_G_STATE TRIGGER_GROUP 1 3
160 qrtz_triggers IDX_QRTZ_T_N_STATE TRIGGER_STATE 1 1
161 qrtz_triggers IDX_QRTZ_T_N_STATE TRIGGER_NAME 1 2
162 qrtz_triggers IDX_QRTZ_T_N_STATE SCHED_NAME 1 3
163 qrtz_triggers IDX_QRTZ_T_N_STATE TRIGGER_GROUP 1 4
164 qrtz_triggers IDX_QRTZ_T_STATE TRIGGER_STATE 1 1
165 qrtz_triggers IDX_QRTZ_T_STATE SCHED_NAME 1 2
166 qrtz_triggers PRIMARY SCHED_NAME 0 1
167 qrtz_triggers PRIMARY TRIGGER_NAME 0 2
168 qrtz_triggers PRIMARY TRIGGER_GROUP 0 3
169 qrtz_triggers SYS_C0012788 SCHED_NAME 1 1
170 qrtz_triggers SYS_C0012788 JOB_NAME 1 2
171 qrtz_triggers SYS_C0012788 JOB_GROUP 1 3
@@ -0,0 +1,49 @@
=== cw_is_organization ===
+----------------------------------+-----------+----------+----------------------------------+----------------------------------+----------------------------------+--------+----------------------------------+---------------+----------------------------------+------------------+------+------+------+------+------+------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+----------+
| ID | NAME | ORDER_BY | PARENT_ID | BUSINESS_ID | TYPE_ID | IS_DEL | CREATE_USER_ID | CREATE_TIME | LAST_UPDATE_USER_ID | LAST_UPDATE_TIME | EXT1 | EXT2 | EXT3 | EXT4 | EXT5 | EXT6 | EXT7 | EXT8 | EXT9 | EXT10 | EXT11 | EXT12 | EXT13 | EXT14 | EXT15 | EXT16 | EXT17 | EXT18 | EXT19 | EXT20 | EXT21 | EXT22 | EXT23 | EXT24 | EXT25 | EXT26 | EXT27 | EXT28 | EXT29 | EXT30 | IS_VALID |
+----------------------------------+-----------+----------+----------------------------------+----------------------------------+----------------------------------+--------+----------------------------------+---------------+----------------------------------+------------------+------+------+------+------+------+------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+----------+
| fdeda9005dfa427da6bff924762917b7 | 617 | NULL | 99e9c6a09f534c0185e32664eb126be4 | 2524639890ba4f2cba9ba1a4eeaa4015 | 47f416aeae9f49f4a35bb22966b42181 | 0 | 9ac7fc11589e4b32b5eff0b9019f1ef5 | 1756690761453 | 9ac7fc11589e4b32b5eff0b9019f1ef5 | 1756690761453 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 1 |
| fd478ee4ffa240519657ff12b3d48726 | 基建部 | NULL | eef0a610fa9e4720a20c58aef2f229e3 | 2524639890ba4f2cba9ba1a4eeaa4015 | 47f416aeae9f49f4a35bb22966b42181 | 0 | 9ac7fc11589e4b32b5eff0b9019f1ef5 | 1701681239890 | 9ac7fc11589e4b32b5eff0b9019f1ef5 | 1701681239890 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 1 |
| fca1dd090e5d49eca3ee190bca014ca0 | 行政部 | NULL | a1d422625add4403b4e889a503cb2b12 | 2524639890ba4f2cba9ba1a4eeaa4015 | 47f416aeae9f49f4a35bb22966b42181 | 1 | 9ac7fc11589e4b32b5eff0b9019f1ef5 | 1690849497428 | 896fc73df1f2408886081ee8ab65bc21 | 1764814211814 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 1 |
+----------------------------------+-----------+----------+----------------------------------+----------------------------------+----------------------------------+--------+----------------------------------+---------------+----------------------------------+------------------+------+------+------+------+------+------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+----------+
=== cw_is_person ===
+--------------------+----------------------------------+-------------+-----------+--------------------+-------------+--------+-------------------+-----------------+--------------+---------------------------------+--------+---------------+----------------------------------+------------------+----------------------------------+-------+---------------------+------+------+------+------+------+------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------------------+----------------+--------+--------------+---------+------------+--------------+---------------+--------------+
| ID | BUSINESS_ID | PERSON_CODE | NAME | USER_NAME | PHONE | STATUS | EXPIRY_BEGIN_DATE | EXPIRY_END_DATE | SHOW_PICTURE | COMPARE_PICTURE | IS_DEL | CREATE_TIME | CREATE_USER_ID | LAST_UPDATE_TIME | LAST_UPDATE_USER_ID | EMAIL | IMAGE_ID | EXT1 | EXT2 | EXT3 | EXT4 | EXT5 | EXT6 | EXT7 | EXT8 | EXT9 | EXT10 | EXT11 | EXT12 | EXT13 | EXT14 | EXT15 | EXT16 | EXT17 | EXT18 | EXT19 | EXT20 | EXT21 | EXT22 | EXT23 | EXT24 | EXT25 | EXT26 | EXT27 | EXT28 | EXT29 | EXT30 | EXT31 | EXT32 | EXT33 | EXT34 | EXT35 | EXT36 | EXT37 | EXT38 | EXT39 | EXT40 | CREATE_SYS_ACCOUNT | SYS_ACCOUNT_ID | SOURCE | RESERVE_INFO | WELCOME | IC_CARD_NO | IC_CARD_TYPE | DEFAULT_FLOOR | CHOOSE_FLOOR |
+--------------------+----------------------------------+-------------+-----------+--------------------+-------------+--------+-------------------+-----------------+--------------+---------------------------------+--------+---------------+----------------------------------+------------------+----------------------------------+-------+---------------------+------+------+------+------+------+------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------------------+----------------+--------+--------------+---------+------------+--------------+---------------+--------------+
| 999998332677980160 | 2524639890ba4f2cba9ba1a4eeaa4015 | NULL | 蔡先生 | 999998333437149184 | 13929533370 | 0 | 1753154040000 | 1753183800000 | NULL | NULL | 1 | 1753154181778 | 6d1c78ee127b4883a4d4f914d344ce51 | 1753203600727 | 6d1c78ee127b4883a4d4f914d344ce51 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | NULL | 1 | NULL | NULL | NULL | NULL | NULL | NULL |
| 999998240135180288 | 2524639890ba4f2cba9ba1a4eeaa4015 | NULL | 赫俊国 | 999998240101314560 | 13903615836 | 0 | 1753113600091 | 1753199999091 | NULL | aiot_default_999998240013242368 | 1 | 1753154159628 | default | 1753203600727 | default | NULL | 1947495814782308352 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | NULL | 1 | NULL | NULL | NULL | NULL | NULL | NULL |
| 999997066723823616 | 2524639890ba4f2cba9ba1a4eeaa4015 | NULL | 黄贵明 | 999997066707169280 | 15920966886 | 0 | 1753113600128 | 1753199999128 | NULL | aiot_default_999997066593828864 | 1 | 1753153879843 | default | 1753203600727 | default | NULL | 1947494641274499072 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | NULL | 1 | NULL | NULL | NULL | NULL | NULL | NULL |
+--------------------+----------------------------------+-------------+-----------+--------------------+-------------+--------+-------------------+-----------------+--------------+---------------------------------+--------+---------------+----------------------------------+------------------+----------------------------------+-------+---------------------+------+------+------+------+------+------+------+------+------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+--------------------+----------------+--------+--------------+---------+------------+--------------+---------------+--------------+
=== cw_is_person_organization_ref ===
+----------------------------------+---------------------+----------------------------------+---------------+----------------------------------+------------------+---------------------+
| ID | PERSON_ID | ORG_ID | CREATE_TIME | CREATE_USER_ID | LAST_UPDATE_TIME | LAST_UPDATE_USER_ID |
+----------------------------------+---------------------+----------------------------------+---------------+----------------------------------+------------------+---------------------+
| fffe7b4d5ce9427ea8703d9d568306c2 | 956535134721798144 | f5d90d608d1042c487bf18af58345d5c | 1742791747779 | 9ac7fc11589e4b32b5eff0b9019f1ef5 | NULL | NULL |
| fff80f46206942ecaa123365e5475f66 | 1069265515460378624 | 488b8ad049bb43408a6fbcc50bcb89ac | 1769668764966 | 9ac7fc11589e4b32b5eff0b9019f1ef5 | NULL | NULL |
| fff4a8bdc90442749a8f463e5f07ebd3 | 822522654509887488 | e7c6ad5429434ec7b8c159d44e126579 | 1711008815845 | 9ac7fc11589e4b32b5eff0b9019f1ef5 | NULL | NULL |
+----------------------------------+---------------------+----------------------------------+---------------+----------------------------------+------------------+---------------------+
=== cw_is_person_label_ref ===
+----------------------------------+--------------------+----------------------------------+---------------+----------------------------------+------------------+---------------------+
| ID | PERSON_ID | LABEL_ID | CREATE_TIME | CREATE_USER_ID | LAST_UPDATE_TIME | LAST_UPDATE_USER_ID |
+----------------------------------+--------------------+----------------------------------+---------------+----------------------------------+------------------+---------------------+
| ffea4b3636f0472cbc0104150371704a | 653604973099094016 | 7f1c603976294e06b3852eec9c2ca838 | 1761890229717 | 9ac7fc11589e4b32b5eff0b9019f1ef5 | NULL | NULL |
| ffe60133fbee47e2b477b068a0169148 | 721670500450914304 | fe77c039dcbe40178192af1f6e1c3ab9 | 1756688047289 | 9ac7fc11589e4b32b5eff0b9019f1ef5 | NULL | NULL |
| ffd8b3622a6846adb8c7193077e54d8f | 721662116968370176 | 834996aeb28d4ebe9695fe3757255d39 | 1757141790248 | 9ac7fc11589e4b32b5eff0b9019f1ef5 | NULL | NULL |
+----------------------------------+--------------------+----------------------------------+---------------+----------------------------------+------------------+---------------------+
=== cw_is_label ===
+----------------------------------+--------------------------------------+----------------+----------------------------------+--------+----------+----------------------------------+---------------+----------------------------------+------------------+
| ID | NAME | CODE | BUSINESS_ID | IS_DEL | ADD_TYPE | CREATE_USER_ID | CREATE_TIME | LAST_UPDATE_USER_ID | LAST_UPDATE_TIME |
+----------------------------------+--------------------------------------+----------------+----------------------------------+--------+----------+----------------------------------+---------------+----------------------------------+------------------+
| ffe50ecad80d4d53bb71f51f64399213 | 星中心物业人力资源_20251217 | 20251217627982 | 2524639890ba4f2cba9ba1a4eeaa4015 | 1 | 0 | e6fadb2224c948a69f51e85f3395e861 | 1765943025351 | e6fadb2224c948a69f51e85f3395e861 | 1766459862306 |
| fe77c039dcbe40178192af1f6e1c3ab9 | 低区通用权限 | 20240112301168 | 2524639890ba4f2cba9ba1a4eeaa4015 | 0 | 0 | 4712af264f1f4ce28cb4e6b6e2d0834b | 1705039784273 | 4712af264f1f4ce28cb4e6b6e2d0834b | 1705039784273 |
| fe1c3b305c1a41448289faaed06bc3d0 | VIP电梯厅-高区 | 20240121715379 | 2524639890ba4f2cba9ba1a4eeaa4015 | 0 | 0 | 4712af264f1f4ce28cb4e6b6e2d0834b | 1705824562257 | 4712af264f1f4ce28cb4e6b6e2d0834b | 1705824562257 |
+----------------------------------+--------------------------------------+----------------+----------------------------------+--------+----------+----------------------------------+---------------+----------------------------------+------------------+
=== org_floor ===
+----------------------------------+---------+--------+-----------+
| org_id | zone_id | is_all | zone_name |
+----------------------------------+---------+--------+-----------+
| f216235e54ca42bfa0379e69b3754aff | 1 | 0 | 1 |
| 8fc3f910bd834198a539832017fe920e | 1 | 0 | 1 |
| 3f591e6b4cb640b7b77978d27f47bd4b | 1 | 0 | 1 |
+----------------------------------+---------+--------+-----------+
=== cw_is_organization_area_ref ===
@@ -0,0 +1,39 @@
mysql: [Warning] Using a password on the command line interface can be insecure.
cw_is_device_image_store 8493 InnoDB
cw_is_device_person 6091835 InnoDB
cw_is_device_person_sync_log 1195561 InnoDB
cw_is_group_person_ref 194105 InnoDB
cw_is_image_store_associated_ref 18148 InnoDB 图库和机构,标签,个人的关联关系表
cw_is_label 353 InnoDB
cw_is_organization 642 InnoDB
cw_is_organization_area_ref 0 InnoDB 机构派梯楼层关联表
cw_is_organization_extend 0 InnoDB
cw_is_organization_extend_detail 0 InnoDB
cw_is_organization_image_store 0 InnoDB
cw_is_organization_type 9 InnoDB 图库机构类型表
cw_is_organization_type_properties 71 InnoDB 图库机构类型属性表
cw_is_person 43278 InnoDB 人员信息表
cw_is_person_audit 0 InnoDB
cw_is_person_batch_detail 1231 InnoDB 人员导入明细表
cw_is_person_batch_import 38 InnoDB 人员导入任务表
cw_is_person_label_ref 5676 InnoDB 人员标签关联表
cw_is_person_organization_ref 10098 InnoDB 人员组织关联表
cw_is_person_properties 30 InnoDB 人员属性表
cw_is_person_properties_switch 0 InnoDB 人员属性注册照优化参数表
cw_is_person_registry 0 InnoDB
cw_is_person_registry_device 0 InnoDB
cw_is_person_registry_properties 0 InnoDB
cw_operation_log 1257 InnoDB 操作日志
cw_task_job_everytime_details 12000 InnoDB
org_floor 12 InnoDB 机构楼层对应表
qrtz_blob_triggers 0 InnoDB
qrtz_calendars 0 InnoDB
qrtz_cron_triggers 8 InnoDB
qrtz_fired_triggers 2 InnoDB
qrtz_job_details 9 InnoDB
qrtz_locks 2 InnoDB
qrtz_paused_trigger_grps 0 InnoDB
qrtz_scheduler_state 3 InnoDB
qrtz_simple_triggers 86 InnoDB
qrtz_simprop_triggers 0 InnoDB
qrtz_triggers 94 InnoDB
1 mysql: [Warning] Using a password on the command line interface can be insecure.
2 cw_is_device_image_store 8493 InnoDB
3 cw_is_device_person 6091835 InnoDB
4 cw_is_device_person_sync_log 1195561 InnoDB
5 cw_is_group_person_ref 194105 InnoDB
6 cw_is_image_store_associated_ref 18148 InnoDB 图库和机构,标签,个人的关联关系表
7 cw_is_label 353 InnoDB
8 cw_is_organization 642 InnoDB
9 cw_is_organization_area_ref 0 InnoDB 机构派梯楼层关联表
10 cw_is_organization_extend 0 InnoDB
11 cw_is_organization_extend_detail 0 InnoDB
12 cw_is_organization_image_store 0 InnoDB
13 cw_is_organization_type 9 InnoDB 图库机构类型表
14 cw_is_organization_type_properties 71 InnoDB 图库机构类型属性表
15 cw_is_person 43278 InnoDB 人员信息表
16 cw_is_person_audit 0 InnoDB
17 cw_is_person_batch_detail 1231 InnoDB 人员导入明细表
18 cw_is_person_batch_import 38 InnoDB 人员导入任务表
19 cw_is_person_label_ref 5676 InnoDB 人员标签关联表
20 cw_is_person_organization_ref 10098 InnoDB 人员组织关联表
21 cw_is_person_properties 30 InnoDB 人员属性表
22 cw_is_person_properties_switch 0 InnoDB 人员属性注册照优化参数表
23 cw_is_person_registry 0 InnoDB
24 cw_is_person_registry_device 0 InnoDB
25 cw_is_person_registry_properties 0 InnoDB
26 cw_operation_log 1257 InnoDB 操作日志
27 cw_task_job_everytime_details 12000 InnoDB
28 org_floor 12 InnoDB 机构楼层对应表
29 qrtz_blob_triggers 0 InnoDB
30 qrtz_calendars 0 InnoDB
31 qrtz_cron_triggers 8 InnoDB
32 qrtz_fired_triggers 2 InnoDB
33 qrtz_job_details 9 InnoDB
34 qrtz_locks 2 InnoDB
35 qrtz_paused_trigger_grps 0 InnoDB
36 qrtz_scheduler_state 3 InnoDB
37 qrtz_simple_triggers 86 InnoDB
38 qrtz_simprop_triggers 0 InnoDB
39 qrtz_triggers 94 InnoDB
@@ -0,0 +1,919 @@
mysql: [Warning] Using a password on the command line interface can be insecure.
code_elevator_area zone_id varchar NO NULL 电梯编码
code_elevator_area code varchar NO NULL 地区编码
code_elevator_area create_time bigint YES NULL
code_elevator_area last_update_time bigint YES NULL
code_elevator_area is_first tinyint YES NULL 是否首层:0-不是,1-是
code_elevator_area parent_id varchar YES NULL 父级id
device_image_store building_id varchar NO NULL 楼栋id
device_image_store image_store_id varchar NO NULL 图库id
elevator_device ID bigint NO NULL PRI auto_increment 主键id
elevator_device create_time bigint NO NULL 创建时间
elevator_device last_update_time bigint NO NULL 最近修改时间
elevator_device delete_flag tinyint NO 0 是否删除(0,删除;1,未删除)
elevator_device device_id varchar YES NULL 设备id
elevator_device device_name varchar NO NULL 设备名称
elevator_device device_code varchar YES NULL 设备编码
elevator_device device_type_name varchar NO NULL 设备类型名称
elevator_device status tinyint YES NULL 设备状态(1:禁用,2:在线,3:离线)
elevator_device area_name varchar YES NULL 空间位置
elevator_device current_building_id varchar YES NULL 楼栋id
elevator_device current_building varchar YES NULL 当前楼栋
elevator_device current_floor_id varchar YES NULL 楼层id
elevator_device current_floor varchar YES NULL 当前楼层
elevator_device elevator_floor_list varchar YES NULL 派梯楼层(,隔开)
elevator_device elevator_floor_id_list varchar YES NULL 派梯楼层ID(,隔开)
elevator_device business_id varchar NO NULL 租户id
elevator_device area_id varchar YES NULL 地区编码
image_rule_ref id varchar NO NULL PRI 唯一标识
image_rule_ref zone_id varchar NO NULL 楼层id
image_rule_ref zone_name varchar YES NULL 楼层名
image_rule_ref name varchar YES NULL 规则名
image_rule_ref person_id varchar YES NULL 人员id
image_rule_ref include_labels varchar YES NULL MUL 人员包含的标签
image_rule_ref include_organizations varchar YES NULL MUL 人员所在的机构
image_rule_ref exclude_labels varchar YES NULL 排除的人员标签
image_rule_ref is_default tinyint YES 0 是否默认规则:0-不是,1-是
image_rule_ref start_time bigint YES NULL 开始时间
image_rule_ref end_time bigint YES NULL 结束时间
image_rule_ref create_time bigint YES NULL 创建时间
image_rule_ref last_update_time bigint YES NULL 最近修改时间
image_rule_ref business_id varchar YES NULL 企业id
image_rule_ref parent_rule varchar YES NULL 归属规则id
image_rule_ref person_delete tinyint YES 0 人员是否删除了:0-未删除,1-已删除
it_acs_device_task id varchar NO NULL PRI 任务id
it_acs_device_task ALL_DEVICES int NO NULL 需要处理设备总数
it_acs_device_task BIND_DEVICES int NO NULL 已处理设备数
it_acs_device_task IS_STOP int NO NULL 是否终止:0-执行,1-终止
it_acs_elevator_record ID varchar NO NULL PRI 主键
it_acs_elevator_record BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_elevator_record DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_elevator_record LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record ORG_ID varchar YES NULL 机构id
it_acs_elevator_record ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record PERSON_CODE varchar YES NULL 工号
it_acs_elevator_record_2020 ID varchar NO NULL PRI 主键
it_acs_elevator_record_2020 BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_elevator_record_2020 DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record_2020 DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record_2020 DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record_2020 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record_2020 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record_2020 DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record_2020 AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record_2020 OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record_2020 OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record_2020 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record_2020 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record_2020 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record_2020 RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record_2020 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_elevator_record_2020 LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record_2020 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record_2020 CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record_2020 CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record_2020 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record_2020 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record_2020 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record_2020 DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record_2020 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record_2020 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record_2020 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record_2020 INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record_2020 ORG_ID varchar YES NULL 机构id
it_acs_elevator_record_2020 ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record_2020 PERSON_CODE varchar YES NULL 工号
it_acs_elevator_record_2021 ID varchar NO NULL PRI 主键
it_acs_elevator_record_2021 BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_elevator_record_2021 DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record_2021 DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record_2021 DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record_2021 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record_2021 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record_2021 DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record_2021 AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record_2021 OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record_2021 OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record_2021 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record_2021 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record_2021 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record_2021 RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record_2021 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_elevator_record_2021 LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record_2021 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record_2021 CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record_2021 CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record_2021 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record_2021 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record_2021 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record_2021 DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record_2021 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record_2021 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record_2021 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record_2021 INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record_2021 ORG_ID varchar YES NULL 机构id
it_acs_elevator_record_2021 ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record_2021 PERSON_CODE varchar YES NULL 工号
it_acs_elevator_record_2022 ID varchar NO NULL PRI 主键
it_acs_elevator_record_2022 BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_elevator_record_2022 DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record_2022 DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record_2022 DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record_2022 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record_2022 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record_2022 DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record_2022 AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record_2022 OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record_2022 OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record_2022 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record_2022 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record_2022 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record_2022 RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record_2022 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_elevator_record_2022 LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record_2022 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record_2022 CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record_2022 CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record_2022 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record_2022 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record_2022 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record_2022 DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record_2022 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record_2022 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record_2022 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record_2022 INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record_2022 ORG_ID varchar YES NULL 机构id
it_acs_elevator_record_2022 ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record_2022 PERSON_CODE varchar YES NULL 工号
it_acs_elevator_record_2023 ID varchar NO NULL PRI 主键
it_acs_elevator_record_2023 BUSINESS_ID varchar NO NULL 企业ID
it_acs_elevator_record_2023 DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record_2023 DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record_2023 DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record_2023 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record_2023 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record_2023 DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record_2023 AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record_2023 OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record_2023 OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record_2023 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record_2023 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record_2023 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record_2023 RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record_2023 RECOGNITION_TIME bigint NO NULL MUL 识别时间
it_acs_elevator_record_2023 LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record_2023 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record_2023 CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record_2023 CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record_2023 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record_2023 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record_2023 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record_2023 DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record_2023 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record_2023 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record_2023 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record_2023 INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record_2023 ORG_ID varchar YES NULL 机构id
it_acs_elevator_record_2023 ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record_2023 PERSON_CODE varchar YES NULL 工号
it_acs_elevator_record_2024 ID varchar NO NULL PRI 主键
it_acs_elevator_record_2024 BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_elevator_record_2024 DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record_2024 DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record_2024 DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record_2024 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record_2024 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record_2024 DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record_2024 AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record_2024 OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record_2024 OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record_2024 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record_2024 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record_2024 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record_2024 RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record_2024 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_elevator_record_2024 LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record_2024 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record_2024 CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record_2024 CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record_2024 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record_2024 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record_2024 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record_2024 DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record_2024 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record_2024 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record_2024 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record_2024 INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record_2024 ORG_ID varchar YES NULL 机构id
it_acs_elevator_record_2024 ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record_2024 PERSON_CODE varchar YES NULL 工号
it_acs_elevator_record_2025 ID varchar NO NULL PRI 主键
it_acs_elevator_record_2025 BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_elevator_record_2025 DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record_2025 DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record_2025 DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record_2025 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record_2025 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record_2025 DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record_2025 AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record_2025 OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record_2025 OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record_2025 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record_2025 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record_2025 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record_2025 RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record_2025 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_elevator_record_2025 LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record_2025 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record_2025 CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record_2025 CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record_2025 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record_2025 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record_2025 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record_2025 DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record_2025 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record_2025 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record_2025 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record_2025 INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record_2025 ORG_ID varchar YES NULL 机构id
it_acs_elevator_record_2025 ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record_2025 PERSON_CODE varchar YES NULL 工号
it_acs_elevator_record_2026 ID varchar NO NULL PRI 主键
it_acs_elevator_record_2026 BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_elevator_record_2026 DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record_2026 DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record_2026 DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record_2026 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record_2026 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record_2026 DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record_2026 AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record_2026 OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record_2026 OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record_2026 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record_2026 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record_2026 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record_2026 RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record_2026 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_elevator_record_2026 LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record_2026 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record_2026 CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record_2026 CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record_2026 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record_2026 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record_2026 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record_2026 DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record_2026 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record_2026 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record_2026 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record_2026 INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record_2026 ORG_ID varchar YES NULL 机构id
it_acs_elevator_record_2026 ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record_2026 PERSON_CODE varchar YES NULL 工号
it_acs_elevator_record_2027 ID varchar NO NULL PRI 主键
it_acs_elevator_record_2027 BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_elevator_record_2027 DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record_2027 DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record_2027 DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record_2027 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record_2027 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record_2027 DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record_2027 AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record_2027 OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record_2027 OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record_2027 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record_2027 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record_2027 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record_2027 RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record_2027 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_elevator_record_2027 LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record_2027 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record_2027 CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record_2027 CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record_2027 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record_2027 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record_2027 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record_2027 DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record_2027 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record_2027 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record_2027 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record_2027 INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record_2027 ORG_ID varchar YES NULL 机构id
it_acs_elevator_record_2027 ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record_2027 PERSON_CODE varchar YES NULL 工号
it_acs_elevator_record_2028 ID varchar NO NULL PRI 主键
it_acs_elevator_record_2028 BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_elevator_record_2028 DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record_2028 DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record_2028 DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record_2028 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record_2028 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record_2028 DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record_2028 AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record_2028 OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record_2028 OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record_2028 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record_2028 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record_2028 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record_2028 RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record_2028 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_elevator_record_2028 LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record_2028 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record_2028 CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record_2028 CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record_2028 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record_2028 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record_2028 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record_2028 DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record_2028 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record_2028 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record_2028 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record_2028 INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record_2028 ORG_ID varchar YES NULL 机构id
it_acs_elevator_record_2028 ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record_2028 PERSON_CODE varchar YES NULL 工号
it_acs_elevator_record_2029 ID varchar NO NULL PRI 主键
it_acs_elevator_record_2029 BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_elevator_record_2029 DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record_2029 DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record_2029 DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record_2029 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record_2029 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record_2029 DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record_2029 AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record_2029 OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record_2029 OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record_2029 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record_2029 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record_2029 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record_2029 RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record_2029 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_elevator_record_2029 LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record_2029 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record_2029 CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record_2029 CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record_2029 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record_2029 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record_2029 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record_2029 DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record_2029 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record_2029 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record_2029 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record_2029 INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record_2029 ORG_ID varchar YES NULL 机构id
it_acs_elevator_record_2029 ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record_2029 PERSON_CODE varchar YES NULL 工号
it_acs_elevator_record_2030 ID varchar NO NULL PRI 主键
it_acs_elevator_record_2030 BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_elevator_record_2030 DEVICE_ID varchar YES NULL 设备id
it_acs_elevator_record_2030 DEVICE_CODE varchar NO NULL 设备编号
it_acs_elevator_record_2030 DEVICE_NAME varchar YES NULL 设备名称
it_acs_elevator_record_2030 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_elevator_record_2030 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_elevator_record_2030 DISTRICT_ID varchar YES NULL 省市区id
it_acs_elevator_record_2030 AREA_ID varchar YES NULL 设备区位id
it_acs_elevator_record_2030 OPEN_DOOR_TYPE varchar NO NULL 开门方式
it_acs_elevator_record_2030 OPERATE_NAME varchar YES NULL 操作人员名称
it_acs_elevator_record_2030 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_elevator_record_2030 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_elevator_record_2030 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
it_acs_elevator_record_2030 RECOGNITION_NO varchar YES NULL 识别编号
it_acs_elevator_record_2030 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_elevator_record_2030 LOG_ID varchar YES NULL 请求唯一标志码
it_acs_elevator_record_2030 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
it_acs_elevator_record_2030 CREATE_TIME bigint YES NULL 创建时间
it_acs_elevator_record_2030 CREATE_USER_ID varchar YES NULL 创建人
it_acs_elevator_record_2030 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_elevator_record_2030 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_elevator_record_2030 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
it_acs_elevator_record_2030 DEST_FLOOR varchar YES NULL 选层楼层
it_acs_elevator_record_2030 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
it_acs_elevator_record_2030 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
it_acs_elevator_record_2030 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
it_acs_elevator_record_2030 INTERVIEWEE varchar YES NULL 被访人id
it_acs_elevator_record_2030 ORG_ID varchar YES NULL 机构id
it_acs_elevator_record_2030 ORG_NAME varchar YES NULL 机构名
it_acs_elevator_record_2030 PERSON_CODE varchar YES NULL 工号
it_acs_pass_rule ID varchar NO NULL PRI 唯一ID
it_acs_pass_rule BUSINESS_ID varchar NO NULL MUL 企业ID
it_acs_pass_rule ZONE_ID varchar NO NULL 楼层ID
it_acs_pass_rule ZONE_NAME varchar YES NULL 楼层名
it_acs_pass_rule NAME varchar NO NULL 通行规则名称
it_acs_pass_rule IMAGE_STORE_ID varchar NO NULL 图库id
it_acs_pass_rule PASSABLE_TIME_ID varchar YES NULL 通行时间id
it_acs_pass_rule VALID_DATE_CRON text YES NULL 通行时间cron
it_acs_pass_rule VALID_DATE_JSON text YES NULL 通行时间json
it_acs_pass_rule BEGIN_DATE bigint YES NULL 开始时间
it_acs_pass_rule END_DATE bigint YES NULL 结束时间
it_acs_pass_rule CREATE_TIME bigint YES NULL 创建时间
it_acs_pass_rule CREATE_USER_ID varchar YES NULL 创建人id
it_acs_pass_rule LAST_UPDATE_TIME bigint YES NULL 最后更新时间
it_acs_pass_rule LAST_UPDATE_USER_ID varchar YES NULL 最后更新人id
it_acs_pass_rule IS_DEFAULT tinyint YES 0 是否默认规则:0-不是,1-是
it_acs_recog_record ID varchar NO NULL PRI 主键
it_acs_recog_record PERSON_ID varchar YES NULL MUL 人员id
it_acs_recog_record PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record THRESHOLD decimal YES NULL 阈值
it_acs_recog_record DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record SCORE decimal NO NULL 识别分数
it_acs_recog_record RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_recog_record GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record REMARK varchar YES NULL 备注
it_acs_recog_record CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record PERSON_LABEL_IDS text YES NULL 人员id列表
it_acs_recog_record_2020 ID varchar NO NULL PRI 主键
it_acs_recog_record_2020 PERSON_ID varchar YES NULL 人员id
it_acs_recog_record_2020 PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record_2020 BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record_2020 DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record_2020 DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record_2020 DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record_2020 THRESHOLD decimal YES NULL 阈值
it_acs_recog_record_2020 DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record_2020 AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record_2020 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record_2020 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record_2020 SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record_2020 SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record_2020 SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record_2020 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record_2020 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record_2020 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record_2020 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record_2020 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record_2020 SCORE decimal NO NULL 识别分数
it_acs_recog_record_2020 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record_2020 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_recog_record_2020 GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record_2020 FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record_2020 QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record_2020 LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record_2020 TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record_2020 MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record_2020 TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record_2020 CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record_2020 SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record_2020 TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record_2020 REMARK varchar YES NULL 备注
it_acs_recog_record_2020 CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record_2020 CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record_2020 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record_2020 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record_2020 PERSON_LABEL_IDS varchar YES NULL 人员id列表
it_acs_recog_record_2021 ID varchar NO NULL PRI 主键
it_acs_recog_record_2021 PERSON_ID varchar YES NULL 人员id
it_acs_recog_record_2021 PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record_2021 BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record_2021 DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record_2021 DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record_2021 DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record_2021 THRESHOLD decimal YES NULL 阈值
it_acs_recog_record_2021 DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record_2021 AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record_2021 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record_2021 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record_2021 SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record_2021 SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record_2021 SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record_2021 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record_2021 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record_2021 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record_2021 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record_2021 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record_2021 SCORE decimal NO NULL 识别分数
it_acs_recog_record_2021 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record_2021 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_recog_record_2021 GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record_2021 FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record_2021 QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record_2021 LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record_2021 TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record_2021 MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record_2021 TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record_2021 CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record_2021 SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record_2021 TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record_2021 REMARK varchar YES NULL 备注
it_acs_recog_record_2021 CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record_2021 CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record_2021 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record_2021 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record_2021 PERSON_LABEL_IDS varchar YES NULL 人员id列表
it_acs_recog_record_2022 ID varchar NO NULL PRI 主键
it_acs_recog_record_2022 PERSON_ID varchar YES NULL 人员id
it_acs_recog_record_2022 PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record_2022 BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record_2022 DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record_2022 DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record_2022 DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record_2022 THRESHOLD decimal YES NULL 阈值
it_acs_recog_record_2022 DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record_2022 AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record_2022 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record_2022 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record_2022 SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record_2022 SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record_2022 SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record_2022 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record_2022 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record_2022 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record_2022 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record_2022 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record_2022 SCORE decimal NO NULL 识别分数
it_acs_recog_record_2022 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record_2022 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_recog_record_2022 GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record_2022 FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record_2022 QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record_2022 LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record_2022 TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record_2022 MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record_2022 TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record_2022 CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record_2022 SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record_2022 TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record_2022 REMARK varchar YES NULL 备注
it_acs_recog_record_2022 CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record_2022 CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record_2022 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record_2022 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record_2022 PERSON_LABEL_IDS varchar YES NULL 人员id列表
it_acs_recog_record_2023 ID varchar NO NULL PRI 主键
it_acs_recog_record_2023 PERSON_ID varchar YES NULL 人员id
it_acs_recog_record_2023 PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record_2023 BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record_2023 DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record_2023 DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record_2023 DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record_2023 THRESHOLD decimal YES NULL 阈值
it_acs_recog_record_2023 DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record_2023 AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record_2023 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record_2023 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record_2023 SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record_2023 SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record_2023 SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record_2023 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record_2023 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record_2023 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record_2023 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record_2023 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record_2023 SCORE decimal NO NULL 识别分数
it_acs_recog_record_2023 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record_2023 RECOGNITION_TIME bigint NO NULL MUL 识别时间
it_acs_recog_record_2023 GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record_2023 FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record_2023 QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record_2023 LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record_2023 TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record_2023 MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record_2023 TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record_2023 CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record_2023 SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record_2023 TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record_2023 REMARK varchar YES NULL 备注
it_acs_recog_record_2023 CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record_2023 CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record_2023 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record_2023 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record_2023 PERSON_LABEL_IDS text YES NULL 人员id列表
it_acs_recog_record_2024 ID varchar NO NULL PRI 主键
it_acs_recog_record_2024 PERSON_ID varchar YES NULL 人员id
it_acs_recog_record_2024 PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record_2024 BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record_2024 DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record_2024 DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record_2024 DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record_2024 THRESHOLD decimal YES NULL 阈值
it_acs_recog_record_2024 DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record_2024 AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record_2024 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record_2024 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record_2024 SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record_2024 SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record_2024 SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record_2024 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record_2024 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record_2024 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record_2024 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record_2024 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record_2024 SCORE decimal NO NULL 识别分数
it_acs_recog_record_2024 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record_2024 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_recog_record_2024 GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record_2024 FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record_2024 QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record_2024 LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record_2024 TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record_2024 MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record_2024 TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record_2024 CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record_2024 SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record_2024 TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record_2024 REMARK varchar YES NULL 备注
it_acs_recog_record_2024 CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record_2024 CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record_2024 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record_2024 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record_2024 PERSON_LABEL_IDS text YES NULL 人员id列表
it_acs_recog_record_2025 ID varchar NO NULL PRI 主键
it_acs_recog_record_2025 PERSON_ID varchar YES NULL 人员id
it_acs_recog_record_2025 PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record_2025 BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record_2025 DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record_2025 DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record_2025 DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record_2025 THRESHOLD decimal YES NULL 阈值
it_acs_recog_record_2025 DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record_2025 AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record_2025 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record_2025 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record_2025 SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record_2025 SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record_2025 SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record_2025 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record_2025 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record_2025 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record_2025 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record_2025 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record_2025 SCORE decimal NO NULL 识别分数
it_acs_recog_record_2025 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record_2025 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_recog_record_2025 GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record_2025 FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record_2025 QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record_2025 LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record_2025 TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record_2025 MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record_2025 TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record_2025 CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record_2025 SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record_2025 TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record_2025 REMARK varchar YES NULL 备注
it_acs_recog_record_2025 CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record_2025 CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record_2025 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record_2025 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record_2025 PERSON_LABEL_IDS text YES NULL 人员id列表
it_acs_recog_record_2026 ID varchar NO NULL PRI 主键
it_acs_recog_record_2026 PERSON_ID varchar YES NULL 人员id
it_acs_recog_record_2026 PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record_2026 BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record_2026 DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record_2026 DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record_2026 DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record_2026 THRESHOLD decimal YES NULL 阈值
it_acs_recog_record_2026 DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record_2026 AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record_2026 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record_2026 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record_2026 SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record_2026 SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record_2026 SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record_2026 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record_2026 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record_2026 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record_2026 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record_2026 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record_2026 SCORE decimal NO NULL 识别分数
it_acs_recog_record_2026 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record_2026 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_recog_record_2026 GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record_2026 FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record_2026 QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record_2026 LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record_2026 TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record_2026 MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record_2026 TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record_2026 CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record_2026 SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record_2026 TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record_2026 REMARK varchar YES NULL 备注
it_acs_recog_record_2026 CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record_2026 CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record_2026 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record_2026 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record_2026 PERSON_LABEL_IDS varchar YES NULL 人员id列表
it_acs_recog_record_2027 ID varchar NO NULL PRI 主键
it_acs_recog_record_2027 PERSON_ID varchar YES NULL 人员id
it_acs_recog_record_2027 PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record_2027 BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record_2027 DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record_2027 DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record_2027 DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record_2027 THRESHOLD decimal YES NULL 阈值
it_acs_recog_record_2027 DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record_2027 AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record_2027 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record_2027 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record_2027 SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record_2027 SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record_2027 SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record_2027 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record_2027 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record_2027 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record_2027 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record_2027 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record_2027 SCORE decimal NO NULL 识别分数
it_acs_recog_record_2027 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record_2027 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_recog_record_2027 GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record_2027 FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record_2027 QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record_2027 LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record_2027 TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record_2027 MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record_2027 TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record_2027 CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record_2027 SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record_2027 TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record_2027 REMARK varchar YES NULL 备注
it_acs_recog_record_2027 CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record_2027 CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record_2027 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record_2027 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record_2027 PERSON_LABEL_IDS varchar YES NULL 人员id列表
it_acs_recog_record_2028 ID varchar NO NULL PRI 主键
it_acs_recog_record_2028 PERSON_ID varchar YES NULL 人员id
it_acs_recog_record_2028 PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record_2028 BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record_2028 DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record_2028 DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record_2028 DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record_2028 THRESHOLD decimal YES NULL 阈值
it_acs_recog_record_2028 DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record_2028 AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record_2028 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record_2028 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record_2028 SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record_2028 SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record_2028 SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record_2028 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record_2028 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record_2028 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record_2028 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record_2028 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record_2028 SCORE decimal NO NULL 识别分数
it_acs_recog_record_2028 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record_2028 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_recog_record_2028 GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record_2028 FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record_2028 QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record_2028 LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record_2028 TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record_2028 MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record_2028 TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record_2028 CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record_2028 SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record_2028 TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record_2028 REMARK varchar YES NULL 备注
it_acs_recog_record_2028 CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record_2028 CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record_2028 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record_2028 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record_2028 PERSON_LABEL_IDS varchar YES NULL 人员id列表
it_acs_recog_record_2029 ID varchar NO NULL PRI 主键
it_acs_recog_record_2029 PERSON_ID varchar YES NULL 人员id
it_acs_recog_record_2029 PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record_2029 BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record_2029 DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record_2029 DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record_2029 DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record_2029 THRESHOLD decimal YES NULL 阈值
it_acs_recog_record_2029 DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record_2029 AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record_2029 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record_2029 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record_2029 SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record_2029 SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record_2029 SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record_2029 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record_2029 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record_2029 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record_2029 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record_2029 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record_2029 SCORE decimal NO NULL 识别分数
it_acs_recog_record_2029 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record_2029 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_recog_record_2029 GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record_2029 FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record_2029 QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record_2029 LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record_2029 TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record_2029 MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record_2029 TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record_2029 CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record_2029 SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record_2029 TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record_2029 REMARK varchar YES NULL 备注
it_acs_recog_record_2029 CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record_2029 CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record_2029 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record_2029 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record_2029 PERSON_LABEL_IDS varchar YES NULL 人员id列表
it_acs_recog_record_2030 ID varchar NO NULL PRI 主键
it_acs_recog_record_2030 PERSON_ID varchar YES NULL 人员id
it_acs_recog_record_2030 PERSON_NAME varchar YES NULL 人员名称
it_acs_recog_record_2030 BUSINESS_ID varchar NO NULL 企业ID
it_acs_recog_record_2030 DEVICE_ID varchar YES NULL 设备id
it_acs_recog_record_2030 DEVICE_CODE varchar NO NULL 设备编号
it_acs_recog_record_2030 DEVICE_NAME varchar YES NULL 设备名称
it_acs_recog_record_2030 THRESHOLD decimal YES NULL 阈值
it_acs_recog_record_2030 DISTRICT_ID varchar YES NULL 省市区id
it_acs_recog_record_2030 AREA_ID varchar YES NULL 设备区位id
it_acs_recog_record_2030 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
it_acs_recog_record_2030 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
it_acs_recog_record_2030 SUB_DEVICE_ID varchar YES NULL 子设备id
it_acs_recog_record_2030 SUB_DEVICE_CODE varchar YES NULL 子设备编号
it_acs_recog_record_2030 SUB_DEVICE_NAME varchar YES NULL 子设备名称
it_acs_recog_record_2030 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
it_acs_recog_record_2030 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
it_acs_recog_record_2030 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
it_acs_recog_record_2030 FACE_IMAGE_PATH varchar YES NULL 抓拍照
it_acs_recog_record_2030 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
it_acs_recog_record_2030 SCORE decimal NO NULL 识别分数
it_acs_recog_record_2030 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
it_acs_recog_record_2030 RECOGNITION_TIME bigint NO NULL 识别时间
it_acs_recog_record_2030 GROUP_ID varchar YES NULL 用户所在底库编号
it_acs_recog_record_2030 FACE_ID varchar NO NULL 识别到对应的注册图片编号
it_acs_recog_record_2030 QUALITY_SCORE decimal YES NULL 人脸质量总分
it_acs_recog_record_2030 LOG_ID varchar NO NULL 请求唯一标志码
it_acs_recog_record_2030 TEMP_SCORE decimal YES NULL 体温
it_acs_recog_record_2030 MASK_SCORE decimal NO NULL 口罩得分
it_acs_recog_record_2030 TEMP_THRESHOLD decimal YES NULL 体温阈值
it_acs_recog_record_2030 CARD_TYPE varchar YES NULL 证件类型
it_acs_recog_record_2030 SOURCE tinyint YES NULL 来源 1 识别 2 人证
it_acs_recog_record_2030 TEMP_IMAGE_PATH varchar YES NULL 热像图
it_acs_recog_record_2030 REMARK varchar YES NULL 备注
it_acs_recog_record_2030 CREATE_TIME bigint YES NULL 创建时间
it_acs_recog_record_2030 CREATE_USER_ID varchar YES NULL 创建人
it_acs_recog_record_2030 LAST_UPDATE_TIME bigint YES NULL 修改时间
it_acs_recog_record_2030 LAST_UPDATE_USER_ID varchar YES NULL 修改人
it_acs_recog_record_2030 PERSON_LABEL_IDS varchar YES NULL 人员id列表
send_record_time time bigint NO NULL 时间戳
send_record_time type tinyint NO NULL 类型:1-通行记录,2-开门记录
send_record_timebak time bigint NO NULL 时间戳
send_record_timebak type tinyint NO NULL 类型:1-通行记录,2-开门记录
tenant_visitor_floor_policy id varchar NO NULL PRI 主键
tenant_visitor_floor_policy business_id varchar NO NULL MUL 机构/租户 ID
tenant_visitor_floor_policy policy_type varchar NO INTERSECT_ALLOWLIST 策略类型
tenant_visitor_floor_policy allow_zone_ids text YES NULL JSON 数组,zoneId 列表
tenant_visitor_floor_policy building_id varchar YES NULL 预留:楼栋维度;租户默认填 NULL
tenant_visitor_floor_policy enabled tinyint NO 1 1 启用 0 停用
tenant_visitor_floor_policy policy_version bigint NO 1 配置版本号
tenant_visitor_floor_policy remark varchar YES NULL
tenant_visitor_floor_policy created_by varchar YES NULL
tenant_visitor_floor_policy created_at bigint YES NULL
tenant_visitor_floor_policy updated_by varchar YES NULL
tenant_visitor_floor_policy updated_at bigint YES NULL
1 mysql: [Warning] Using a password on the command line interface can be insecure.
2 code_elevator_area zone_id varchar NO NULL 电梯编码
3 code_elevator_area code varchar NO NULL 地区编码
4 code_elevator_area create_time bigint YES NULL
5 code_elevator_area last_update_time bigint YES NULL
6 code_elevator_area is_first tinyint YES NULL 是否首层:0-不是,1-是
7 code_elevator_area parent_id varchar YES NULL 父级id
8 device_image_store building_id varchar NO NULL 楼栋id
9 device_image_store image_store_id varchar NO NULL 图库id
10 elevator_device ID bigint NO NULL PRI auto_increment 主键id
11 elevator_device create_time bigint NO NULL 创建时间
12 elevator_device last_update_time bigint NO NULL 最近修改时间
13 elevator_device delete_flag tinyint NO 0 是否删除(0,删除;1,未删除)
14 elevator_device device_id varchar YES NULL 设备id
15 elevator_device device_name varchar NO NULL 设备名称
16 elevator_device device_code varchar YES NULL 设备编码
17 elevator_device device_type_name varchar NO NULL 设备类型名称
18 elevator_device status tinyint YES NULL 设备状态(1:禁用,2:在线,3:离线)
19 elevator_device area_name varchar YES NULL 空间位置
20 elevator_device current_building_id varchar YES NULL 楼栋id
21 elevator_device current_building varchar YES NULL 当前楼栋
22 elevator_device current_floor_id varchar YES NULL 楼层id
23 elevator_device current_floor varchar YES NULL 当前楼层
24 elevator_device elevator_floor_list varchar YES NULL 派梯楼层(,隔开)
25 elevator_device elevator_floor_id_list varchar YES NULL 派梯楼层ID(,隔开)
26 elevator_device business_id varchar NO NULL 租户id
27 elevator_device area_id varchar YES NULL 地区编码
28 image_rule_ref id varchar NO NULL PRI 唯一标识
29 image_rule_ref zone_id varchar NO NULL 楼层id
30 image_rule_ref zone_name varchar YES NULL 楼层名
31 image_rule_ref name varchar YES NULL 规则名
32 image_rule_ref person_id varchar YES NULL 人员id
33 image_rule_ref include_labels varchar YES NULL MUL 人员包含的标签
34 image_rule_ref include_organizations varchar YES NULL MUL 人员所在的机构
35 image_rule_ref exclude_labels varchar YES NULL 排除的人员标签
36 image_rule_ref is_default tinyint YES 0 是否默认规则:0-不是,1-是
37 image_rule_ref start_time bigint YES NULL 开始时间
38 image_rule_ref end_time bigint YES NULL 结束时间
39 image_rule_ref create_time bigint YES NULL 创建时间
40 image_rule_ref last_update_time bigint YES NULL 最近修改时间
41 image_rule_ref business_id varchar YES NULL 企业id
42 image_rule_ref parent_rule varchar YES NULL 归属规则id
43 image_rule_ref person_delete tinyint YES 0 人员是否删除了:0-未删除,1-已删除
44 it_acs_device_task id varchar NO NULL PRI 任务id
45 it_acs_device_task ALL_DEVICES int NO NULL 需要处理设备总数
46 it_acs_device_task BIND_DEVICES int NO NULL 已处理设备数
47 it_acs_device_task IS_STOP int NO NULL 是否终止:0-执行,1-终止
48 it_acs_elevator_record ID varchar NO NULL PRI 主键
49 it_acs_elevator_record BUSINESS_ID varchar NO NULL MUL 企业ID
50 it_acs_elevator_record DEVICE_ID varchar YES NULL 设备id
51 it_acs_elevator_record DEVICE_CODE varchar NO NULL 设备编号
52 it_acs_elevator_record DEVICE_NAME varchar YES NULL 设备名称
53 it_acs_elevator_record DEVICE_TYPE_ID varchar YES NULL 设备类型ID
54 it_acs_elevator_record DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
55 it_acs_elevator_record DISTRICT_ID varchar YES NULL 省市区id
56 it_acs_elevator_record AREA_ID varchar YES NULL 设备区位id
57 it_acs_elevator_record OPEN_DOOR_TYPE varchar NO NULL 开门方式
58 it_acs_elevator_record OPERATE_NAME varchar YES NULL 操作人员名称
59 it_acs_elevator_record FACE_IMAGE_PATH varchar YES NULL 抓拍照
60 it_acs_elevator_record PANORAMA_IMAGE_PATH varchar YES NULL 全景照
61 it_acs_elevator_record RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
62 it_acs_elevator_record RECOGNITION_NO varchar YES NULL 识别编号
63 it_acs_elevator_record RECOGNITION_TIME bigint NO NULL 识别时间
64 it_acs_elevator_record LOG_ID varchar YES NULL 请求唯一标志码
65 it_acs_elevator_record RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
66 it_acs_elevator_record CREATE_TIME bigint YES NULL 创建时间
67 it_acs_elevator_record CREATE_USER_ID varchar YES NULL 创建人
68 it_acs_elevator_record LAST_UPDATE_TIME bigint YES NULL 修改时间
69 it_acs_elevator_record LAST_UPDATE_USER_ID varchar YES NULL 修改人
70 it_acs_elevator_record SRC_FLOOR varchar YES NULL 进梯(当前)楼层
71 it_acs_elevator_record DEST_FLOOR varchar YES NULL 选层楼层
72 it_acs_elevator_record DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
73 it_acs_elevator_record DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
74 it_acs_elevator_record IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
75 it_acs_elevator_record INTERVIEWEE varchar YES NULL 被访人id
76 it_acs_elevator_record ORG_ID varchar YES NULL 机构id
77 it_acs_elevator_record ORG_NAME varchar YES NULL 机构名
78 it_acs_elevator_record PERSON_CODE varchar YES NULL 工号
79 it_acs_elevator_record_2020 ID varchar NO NULL PRI 主键
80 it_acs_elevator_record_2020 BUSINESS_ID varchar NO NULL MUL 企业ID
81 it_acs_elevator_record_2020 DEVICE_ID varchar YES NULL 设备id
82 it_acs_elevator_record_2020 DEVICE_CODE varchar NO NULL 设备编号
83 it_acs_elevator_record_2020 DEVICE_NAME varchar YES NULL 设备名称
84 it_acs_elevator_record_2020 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
85 it_acs_elevator_record_2020 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
86 it_acs_elevator_record_2020 DISTRICT_ID varchar YES NULL 省市区id
87 it_acs_elevator_record_2020 AREA_ID varchar YES NULL 设备区位id
88 it_acs_elevator_record_2020 OPEN_DOOR_TYPE varchar NO NULL 开门方式
89 it_acs_elevator_record_2020 OPERATE_NAME varchar YES NULL 操作人员名称
90 it_acs_elevator_record_2020 FACE_IMAGE_PATH varchar YES NULL 抓拍照
91 it_acs_elevator_record_2020 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
92 it_acs_elevator_record_2020 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
93 it_acs_elevator_record_2020 RECOGNITION_NO varchar YES NULL 识别编号
94 it_acs_elevator_record_2020 RECOGNITION_TIME bigint NO NULL 识别时间
95 it_acs_elevator_record_2020 LOG_ID varchar YES NULL 请求唯一标志码
96 it_acs_elevator_record_2020 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
97 it_acs_elevator_record_2020 CREATE_TIME bigint YES NULL 创建时间
98 it_acs_elevator_record_2020 CREATE_USER_ID varchar YES NULL 创建人
99 it_acs_elevator_record_2020 LAST_UPDATE_TIME bigint YES NULL 修改时间
100 it_acs_elevator_record_2020 LAST_UPDATE_USER_ID varchar YES NULL 修改人
101 it_acs_elevator_record_2020 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
102 it_acs_elevator_record_2020 DEST_FLOOR varchar YES NULL 选层楼层
103 it_acs_elevator_record_2020 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
104 it_acs_elevator_record_2020 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
105 it_acs_elevator_record_2020 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
106 it_acs_elevator_record_2020 INTERVIEWEE varchar YES NULL 被访人id
107 it_acs_elevator_record_2020 ORG_ID varchar YES NULL 机构id
108 it_acs_elevator_record_2020 ORG_NAME varchar YES NULL 机构名
109 it_acs_elevator_record_2020 PERSON_CODE varchar YES NULL 工号
110 it_acs_elevator_record_2021 ID varchar NO NULL PRI 主键
111 it_acs_elevator_record_2021 BUSINESS_ID varchar NO NULL MUL 企业ID
112 it_acs_elevator_record_2021 DEVICE_ID varchar YES NULL 设备id
113 it_acs_elevator_record_2021 DEVICE_CODE varchar NO NULL 设备编号
114 it_acs_elevator_record_2021 DEVICE_NAME varchar YES NULL 设备名称
115 it_acs_elevator_record_2021 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
116 it_acs_elevator_record_2021 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
117 it_acs_elevator_record_2021 DISTRICT_ID varchar YES NULL 省市区id
118 it_acs_elevator_record_2021 AREA_ID varchar YES NULL 设备区位id
119 it_acs_elevator_record_2021 OPEN_DOOR_TYPE varchar NO NULL 开门方式
120 it_acs_elevator_record_2021 OPERATE_NAME varchar YES NULL 操作人员名称
121 it_acs_elevator_record_2021 FACE_IMAGE_PATH varchar YES NULL 抓拍照
122 it_acs_elevator_record_2021 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
123 it_acs_elevator_record_2021 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
124 it_acs_elevator_record_2021 RECOGNITION_NO varchar YES NULL 识别编号
125 it_acs_elevator_record_2021 RECOGNITION_TIME bigint NO NULL 识别时间
126 it_acs_elevator_record_2021 LOG_ID varchar YES NULL 请求唯一标志码
127 it_acs_elevator_record_2021 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
128 it_acs_elevator_record_2021 CREATE_TIME bigint YES NULL 创建时间
129 it_acs_elevator_record_2021 CREATE_USER_ID varchar YES NULL 创建人
130 it_acs_elevator_record_2021 LAST_UPDATE_TIME bigint YES NULL 修改时间
131 it_acs_elevator_record_2021 LAST_UPDATE_USER_ID varchar YES NULL 修改人
132 it_acs_elevator_record_2021 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
133 it_acs_elevator_record_2021 DEST_FLOOR varchar YES NULL 选层楼层
134 it_acs_elevator_record_2021 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
135 it_acs_elevator_record_2021 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
136 it_acs_elevator_record_2021 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
137 it_acs_elevator_record_2021 INTERVIEWEE varchar YES NULL 被访人id
138 it_acs_elevator_record_2021 ORG_ID varchar YES NULL 机构id
139 it_acs_elevator_record_2021 ORG_NAME varchar YES NULL 机构名
140 it_acs_elevator_record_2021 PERSON_CODE varchar YES NULL 工号
141 it_acs_elevator_record_2022 ID varchar NO NULL PRI 主键
142 it_acs_elevator_record_2022 BUSINESS_ID varchar NO NULL MUL 企业ID
143 it_acs_elevator_record_2022 DEVICE_ID varchar YES NULL 设备id
144 it_acs_elevator_record_2022 DEVICE_CODE varchar NO NULL 设备编号
145 it_acs_elevator_record_2022 DEVICE_NAME varchar YES NULL 设备名称
146 it_acs_elevator_record_2022 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
147 it_acs_elevator_record_2022 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
148 it_acs_elevator_record_2022 DISTRICT_ID varchar YES NULL 省市区id
149 it_acs_elevator_record_2022 AREA_ID varchar YES NULL 设备区位id
150 it_acs_elevator_record_2022 OPEN_DOOR_TYPE varchar NO NULL 开门方式
151 it_acs_elevator_record_2022 OPERATE_NAME varchar YES NULL 操作人员名称
152 it_acs_elevator_record_2022 FACE_IMAGE_PATH varchar YES NULL 抓拍照
153 it_acs_elevator_record_2022 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
154 it_acs_elevator_record_2022 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
155 it_acs_elevator_record_2022 RECOGNITION_NO varchar YES NULL 识别编号
156 it_acs_elevator_record_2022 RECOGNITION_TIME bigint NO NULL 识别时间
157 it_acs_elevator_record_2022 LOG_ID varchar YES NULL 请求唯一标志码
158 it_acs_elevator_record_2022 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
159 it_acs_elevator_record_2022 CREATE_TIME bigint YES NULL 创建时间
160 it_acs_elevator_record_2022 CREATE_USER_ID varchar YES NULL 创建人
161 it_acs_elevator_record_2022 LAST_UPDATE_TIME bigint YES NULL 修改时间
162 it_acs_elevator_record_2022 LAST_UPDATE_USER_ID varchar YES NULL 修改人
163 it_acs_elevator_record_2022 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
164 it_acs_elevator_record_2022 DEST_FLOOR varchar YES NULL 选层楼层
165 it_acs_elevator_record_2022 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
166 it_acs_elevator_record_2022 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
167 it_acs_elevator_record_2022 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
168 it_acs_elevator_record_2022 INTERVIEWEE varchar YES NULL 被访人id
169 it_acs_elevator_record_2022 ORG_ID varchar YES NULL 机构id
170 it_acs_elevator_record_2022 ORG_NAME varchar YES NULL 机构名
171 it_acs_elevator_record_2022 PERSON_CODE varchar YES NULL 工号
172 it_acs_elevator_record_2023 ID varchar NO NULL PRI 主键
173 it_acs_elevator_record_2023 BUSINESS_ID varchar NO NULL 企业ID
174 it_acs_elevator_record_2023 DEVICE_ID varchar YES NULL 设备id
175 it_acs_elevator_record_2023 DEVICE_CODE varchar NO NULL 设备编号
176 it_acs_elevator_record_2023 DEVICE_NAME varchar YES NULL 设备名称
177 it_acs_elevator_record_2023 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
178 it_acs_elevator_record_2023 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
179 it_acs_elevator_record_2023 DISTRICT_ID varchar YES NULL 省市区id
180 it_acs_elevator_record_2023 AREA_ID varchar YES NULL 设备区位id
181 it_acs_elevator_record_2023 OPEN_DOOR_TYPE varchar NO NULL 开门方式
182 it_acs_elevator_record_2023 OPERATE_NAME varchar YES NULL 操作人员名称
183 it_acs_elevator_record_2023 FACE_IMAGE_PATH varchar YES NULL 抓拍照
184 it_acs_elevator_record_2023 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
185 it_acs_elevator_record_2023 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
186 it_acs_elevator_record_2023 RECOGNITION_NO varchar YES NULL 识别编号
187 it_acs_elevator_record_2023 RECOGNITION_TIME bigint NO NULL MUL 识别时间
188 it_acs_elevator_record_2023 LOG_ID varchar YES NULL 请求唯一标志码
189 it_acs_elevator_record_2023 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
190 it_acs_elevator_record_2023 CREATE_TIME bigint YES NULL 创建时间
191 it_acs_elevator_record_2023 CREATE_USER_ID varchar YES NULL 创建人
192 it_acs_elevator_record_2023 LAST_UPDATE_TIME bigint YES NULL 修改时间
193 it_acs_elevator_record_2023 LAST_UPDATE_USER_ID varchar YES NULL 修改人
194 it_acs_elevator_record_2023 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
195 it_acs_elevator_record_2023 DEST_FLOOR varchar YES NULL 选层楼层
196 it_acs_elevator_record_2023 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
197 it_acs_elevator_record_2023 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
198 it_acs_elevator_record_2023 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
199 it_acs_elevator_record_2023 INTERVIEWEE varchar YES NULL 被访人id
200 it_acs_elevator_record_2023 ORG_ID varchar YES NULL 机构id
201 it_acs_elevator_record_2023 ORG_NAME varchar YES NULL 机构名
202 it_acs_elevator_record_2023 PERSON_CODE varchar YES NULL 工号
203 it_acs_elevator_record_2024 ID varchar NO NULL PRI 主键
204 it_acs_elevator_record_2024 BUSINESS_ID varchar NO NULL MUL 企业ID
205 it_acs_elevator_record_2024 DEVICE_ID varchar YES NULL 设备id
206 it_acs_elevator_record_2024 DEVICE_CODE varchar NO NULL 设备编号
207 it_acs_elevator_record_2024 DEVICE_NAME varchar YES NULL 设备名称
208 it_acs_elevator_record_2024 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
209 it_acs_elevator_record_2024 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
210 it_acs_elevator_record_2024 DISTRICT_ID varchar YES NULL 省市区id
211 it_acs_elevator_record_2024 AREA_ID varchar YES NULL 设备区位id
212 it_acs_elevator_record_2024 OPEN_DOOR_TYPE varchar NO NULL 开门方式
213 it_acs_elevator_record_2024 OPERATE_NAME varchar YES NULL 操作人员名称
214 it_acs_elevator_record_2024 FACE_IMAGE_PATH varchar YES NULL 抓拍照
215 it_acs_elevator_record_2024 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
216 it_acs_elevator_record_2024 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
217 it_acs_elevator_record_2024 RECOGNITION_NO varchar YES NULL 识别编号
218 it_acs_elevator_record_2024 RECOGNITION_TIME bigint NO NULL 识别时间
219 it_acs_elevator_record_2024 LOG_ID varchar YES NULL 请求唯一标志码
220 it_acs_elevator_record_2024 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
221 it_acs_elevator_record_2024 CREATE_TIME bigint YES NULL 创建时间
222 it_acs_elevator_record_2024 CREATE_USER_ID varchar YES NULL 创建人
223 it_acs_elevator_record_2024 LAST_UPDATE_TIME bigint YES NULL 修改时间
224 it_acs_elevator_record_2024 LAST_UPDATE_USER_ID varchar YES NULL 修改人
225 it_acs_elevator_record_2024 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
226 it_acs_elevator_record_2024 DEST_FLOOR varchar YES NULL 选层楼层
227 it_acs_elevator_record_2024 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
228 it_acs_elevator_record_2024 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
229 it_acs_elevator_record_2024 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
230 it_acs_elevator_record_2024 INTERVIEWEE varchar YES NULL 被访人id
231 it_acs_elevator_record_2024 ORG_ID varchar YES NULL 机构id
232 it_acs_elevator_record_2024 ORG_NAME varchar YES NULL 机构名
233 it_acs_elevator_record_2024 PERSON_CODE varchar YES NULL 工号
234 it_acs_elevator_record_2025 ID varchar NO NULL PRI 主键
235 it_acs_elevator_record_2025 BUSINESS_ID varchar NO NULL MUL 企业ID
236 it_acs_elevator_record_2025 DEVICE_ID varchar YES NULL 设备id
237 it_acs_elevator_record_2025 DEVICE_CODE varchar NO NULL 设备编号
238 it_acs_elevator_record_2025 DEVICE_NAME varchar YES NULL 设备名称
239 it_acs_elevator_record_2025 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
240 it_acs_elevator_record_2025 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
241 it_acs_elevator_record_2025 DISTRICT_ID varchar YES NULL 省市区id
242 it_acs_elevator_record_2025 AREA_ID varchar YES NULL 设备区位id
243 it_acs_elevator_record_2025 OPEN_DOOR_TYPE varchar NO NULL 开门方式
244 it_acs_elevator_record_2025 OPERATE_NAME varchar YES NULL 操作人员名称
245 it_acs_elevator_record_2025 FACE_IMAGE_PATH varchar YES NULL 抓拍照
246 it_acs_elevator_record_2025 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
247 it_acs_elevator_record_2025 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
248 it_acs_elevator_record_2025 RECOGNITION_NO varchar YES NULL 识别编号
249 it_acs_elevator_record_2025 RECOGNITION_TIME bigint NO NULL 识别时间
250 it_acs_elevator_record_2025 LOG_ID varchar YES NULL 请求唯一标志码
251 it_acs_elevator_record_2025 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
252 it_acs_elevator_record_2025 CREATE_TIME bigint YES NULL 创建时间
253 it_acs_elevator_record_2025 CREATE_USER_ID varchar YES NULL 创建人
254 it_acs_elevator_record_2025 LAST_UPDATE_TIME bigint YES NULL 修改时间
255 it_acs_elevator_record_2025 LAST_UPDATE_USER_ID varchar YES NULL 修改人
256 it_acs_elevator_record_2025 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
257 it_acs_elevator_record_2025 DEST_FLOOR varchar YES NULL 选层楼层
258 it_acs_elevator_record_2025 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
259 it_acs_elevator_record_2025 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
260 it_acs_elevator_record_2025 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
261 it_acs_elevator_record_2025 INTERVIEWEE varchar YES NULL 被访人id
262 it_acs_elevator_record_2025 ORG_ID varchar YES NULL 机构id
263 it_acs_elevator_record_2025 ORG_NAME varchar YES NULL 机构名
264 it_acs_elevator_record_2025 PERSON_CODE varchar YES NULL 工号
265 it_acs_elevator_record_2026 ID varchar NO NULL PRI 主键
266 it_acs_elevator_record_2026 BUSINESS_ID varchar NO NULL MUL 企业ID
267 it_acs_elevator_record_2026 DEVICE_ID varchar YES NULL 设备id
268 it_acs_elevator_record_2026 DEVICE_CODE varchar NO NULL 设备编号
269 it_acs_elevator_record_2026 DEVICE_NAME varchar YES NULL 设备名称
270 it_acs_elevator_record_2026 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
271 it_acs_elevator_record_2026 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
272 it_acs_elevator_record_2026 DISTRICT_ID varchar YES NULL 省市区id
273 it_acs_elevator_record_2026 AREA_ID varchar YES NULL 设备区位id
274 it_acs_elevator_record_2026 OPEN_DOOR_TYPE varchar NO NULL 开门方式
275 it_acs_elevator_record_2026 OPERATE_NAME varchar YES NULL 操作人员名称
276 it_acs_elevator_record_2026 FACE_IMAGE_PATH varchar YES NULL 抓拍照
277 it_acs_elevator_record_2026 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
278 it_acs_elevator_record_2026 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
279 it_acs_elevator_record_2026 RECOGNITION_NO varchar YES NULL 识别编号
280 it_acs_elevator_record_2026 RECOGNITION_TIME bigint NO NULL 识别时间
281 it_acs_elevator_record_2026 LOG_ID varchar YES NULL 请求唯一标志码
282 it_acs_elevator_record_2026 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
283 it_acs_elevator_record_2026 CREATE_TIME bigint YES NULL 创建时间
284 it_acs_elevator_record_2026 CREATE_USER_ID varchar YES NULL 创建人
285 it_acs_elevator_record_2026 LAST_UPDATE_TIME bigint YES NULL 修改时间
286 it_acs_elevator_record_2026 LAST_UPDATE_USER_ID varchar YES NULL 修改人
287 it_acs_elevator_record_2026 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
288 it_acs_elevator_record_2026 DEST_FLOOR varchar YES NULL 选层楼层
289 it_acs_elevator_record_2026 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
290 it_acs_elevator_record_2026 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
291 it_acs_elevator_record_2026 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
292 it_acs_elevator_record_2026 INTERVIEWEE varchar YES NULL 被访人id
293 it_acs_elevator_record_2026 ORG_ID varchar YES NULL 机构id
294 it_acs_elevator_record_2026 ORG_NAME varchar YES NULL 机构名
295 it_acs_elevator_record_2026 PERSON_CODE varchar YES NULL 工号
296 it_acs_elevator_record_2027 ID varchar NO NULL PRI 主键
297 it_acs_elevator_record_2027 BUSINESS_ID varchar NO NULL MUL 企业ID
298 it_acs_elevator_record_2027 DEVICE_ID varchar YES NULL 设备id
299 it_acs_elevator_record_2027 DEVICE_CODE varchar NO NULL 设备编号
300 it_acs_elevator_record_2027 DEVICE_NAME varchar YES NULL 设备名称
301 it_acs_elevator_record_2027 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
302 it_acs_elevator_record_2027 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
303 it_acs_elevator_record_2027 DISTRICT_ID varchar YES NULL 省市区id
304 it_acs_elevator_record_2027 AREA_ID varchar YES NULL 设备区位id
305 it_acs_elevator_record_2027 OPEN_DOOR_TYPE varchar NO NULL 开门方式
306 it_acs_elevator_record_2027 OPERATE_NAME varchar YES NULL 操作人员名称
307 it_acs_elevator_record_2027 FACE_IMAGE_PATH varchar YES NULL 抓拍照
308 it_acs_elevator_record_2027 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
309 it_acs_elevator_record_2027 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
310 it_acs_elevator_record_2027 RECOGNITION_NO varchar YES NULL 识别编号
311 it_acs_elevator_record_2027 RECOGNITION_TIME bigint NO NULL 识别时间
312 it_acs_elevator_record_2027 LOG_ID varchar YES NULL 请求唯一标志码
313 it_acs_elevator_record_2027 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
314 it_acs_elevator_record_2027 CREATE_TIME bigint YES NULL 创建时间
315 it_acs_elevator_record_2027 CREATE_USER_ID varchar YES NULL 创建人
316 it_acs_elevator_record_2027 LAST_UPDATE_TIME bigint YES NULL 修改时间
317 it_acs_elevator_record_2027 LAST_UPDATE_USER_ID varchar YES NULL 修改人
318 it_acs_elevator_record_2027 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
319 it_acs_elevator_record_2027 DEST_FLOOR varchar YES NULL 选层楼层
320 it_acs_elevator_record_2027 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
321 it_acs_elevator_record_2027 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
322 it_acs_elevator_record_2027 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
323 it_acs_elevator_record_2027 INTERVIEWEE varchar YES NULL 被访人id
324 it_acs_elevator_record_2027 ORG_ID varchar YES NULL 机构id
325 it_acs_elevator_record_2027 ORG_NAME varchar YES NULL 机构名
326 it_acs_elevator_record_2027 PERSON_CODE varchar YES NULL 工号
327 it_acs_elevator_record_2028 ID varchar NO NULL PRI 主键
328 it_acs_elevator_record_2028 BUSINESS_ID varchar NO NULL MUL 企业ID
329 it_acs_elevator_record_2028 DEVICE_ID varchar YES NULL 设备id
330 it_acs_elevator_record_2028 DEVICE_CODE varchar NO NULL 设备编号
331 it_acs_elevator_record_2028 DEVICE_NAME varchar YES NULL 设备名称
332 it_acs_elevator_record_2028 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
333 it_acs_elevator_record_2028 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
334 it_acs_elevator_record_2028 DISTRICT_ID varchar YES NULL 省市区id
335 it_acs_elevator_record_2028 AREA_ID varchar YES NULL 设备区位id
336 it_acs_elevator_record_2028 OPEN_DOOR_TYPE varchar NO NULL 开门方式
337 it_acs_elevator_record_2028 OPERATE_NAME varchar YES NULL 操作人员名称
338 it_acs_elevator_record_2028 FACE_IMAGE_PATH varchar YES NULL 抓拍照
339 it_acs_elevator_record_2028 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
340 it_acs_elevator_record_2028 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
341 it_acs_elevator_record_2028 RECOGNITION_NO varchar YES NULL 识别编号
342 it_acs_elevator_record_2028 RECOGNITION_TIME bigint NO NULL 识别时间
343 it_acs_elevator_record_2028 LOG_ID varchar YES NULL 请求唯一标志码
344 it_acs_elevator_record_2028 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
345 it_acs_elevator_record_2028 CREATE_TIME bigint YES NULL 创建时间
346 it_acs_elevator_record_2028 CREATE_USER_ID varchar YES NULL 创建人
347 it_acs_elevator_record_2028 LAST_UPDATE_TIME bigint YES NULL 修改时间
348 it_acs_elevator_record_2028 LAST_UPDATE_USER_ID varchar YES NULL 修改人
349 it_acs_elevator_record_2028 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
350 it_acs_elevator_record_2028 DEST_FLOOR varchar YES NULL 选层楼层
351 it_acs_elevator_record_2028 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
352 it_acs_elevator_record_2028 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
353 it_acs_elevator_record_2028 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
354 it_acs_elevator_record_2028 INTERVIEWEE varchar YES NULL 被访人id
355 it_acs_elevator_record_2028 ORG_ID varchar YES NULL 机构id
356 it_acs_elevator_record_2028 ORG_NAME varchar YES NULL 机构名
357 it_acs_elevator_record_2028 PERSON_CODE varchar YES NULL 工号
358 it_acs_elevator_record_2029 ID varchar NO NULL PRI 主键
359 it_acs_elevator_record_2029 BUSINESS_ID varchar NO NULL MUL 企业ID
360 it_acs_elevator_record_2029 DEVICE_ID varchar YES NULL 设备id
361 it_acs_elevator_record_2029 DEVICE_CODE varchar NO NULL 设备编号
362 it_acs_elevator_record_2029 DEVICE_NAME varchar YES NULL 设备名称
363 it_acs_elevator_record_2029 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
364 it_acs_elevator_record_2029 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
365 it_acs_elevator_record_2029 DISTRICT_ID varchar YES NULL 省市区id
366 it_acs_elevator_record_2029 AREA_ID varchar YES NULL 设备区位id
367 it_acs_elevator_record_2029 OPEN_DOOR_TYPE varchar NO NULL 开门方式
368 it_acs_elevator_record_2029 OPERATE_NAME varchar YES NULL 操作人员名称
369 it_acs_elevator_record_2029 FACE_IMAGE_PATH varchar YES NULL 抓拍照
370 it_acs_elevator_record_2029 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
371 it_acs_elevator_record_2029 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
372 it_acs_elevator_record_2029 RECOGNITION_NO varchar YES NULL 识别编号
373 it_acs_elevator_record_2029 RECOGNITION_TIME bigint NO NULL 识别时间
374 it_acs_elevator_record_2029 LOG_ID varchar YES NULL 请求唯一标志码
375 it_acs_elevator_record_2029 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
376 it_acs_elevator_record_2029 CREATE_TIME bigint YES NULL 创建时间
377 it_acs_elevator_record_2029 CREATE_USER_ID varchar YES NULL 创建人
378 it_acs_elevator_record_2029 LAST_UPDATE_TIME bigint YES NULL 修改时间
379 it_acs_elevator_record_2029 LAST_UPDATE_USER_ID varchar YES NULL 修改人
380 it_acs_elevator_record_2029 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
381 it_acs_elevator_record_2029 DEST_FLOOR varchar YES NULL 选层楼层
382 it_acs_elevator_record_2029 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
383 it_acs_elevator_record_2029 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
384 it_acs_elevator_record_2029 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
385 it_acs_elevator_record_2029 INTERVIEWEE varchar YES NULL 被访人id
386 it_acs_elevator_record_2029 ORG_ID varchar YES NULL 机构id
387 it_acs_elevator_record_2029 ORG_NAME varchar YES NULL 机构名
388 it_acs_elevator_record_2029 PERSON_CODE varchar YES NULL 工号
389 it_acs_elevator_record_2030 ID varchar NO NULL PRI 主键
390 it_acs_elevator_record_2030 BUSINESS_ID varchar NO NULL MUL 企业ID
391 it_acs_elevator_record_2030 DEVICE_ID varchar YES NULL 设备id
392 it_acs_elevator_record_2030 DEVICE_CODE varchar NO NULL 设备编号
393 it_acs_elevator_record_2030 DEVICE_NAME varchar YES NULL 设备名称
394 it_acs_elevator_record_2030 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
395 it_acs_elevator_record_2030 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
396 it_acs_elevator_record_2030 DISTRICT_ID varchar YES NULL 省市区id
397 it_acs_elevator_record_2030 AREA_ID varchar YES NULL 设备区位id
398 it_acs_elevator_record_2030 OPEN_DOOR_TYPE varchar NO NULL 开门方式
399 it_acs_elevator_record_2030 OPERATE_NAME varchar YES NULL 操作人员名称
400 it_acs_elevator_record_2030 FACE_IMAGE_PATH varchar YES NULL 抓拍照
401 it_acs_elevator_record_2030 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
402 it_acs_elevator_record_2030 RECORD_RESULT tinyint YES 1 开门结果 1:成功 2:失败
403 it_acs_elevator_record_2030 RECOGNITION_NO varchar YES NULL 识别编号
404 it_acs_elevator_record_2030 RECOGNITION_TIME bigint NO NULL 识别时间
405 it_acs_elevator_record_2030 LOG_ID varchar YES NULL 请求唯一标志码
406 it_acs_elevator_record_2030 RECOGNITION_FACE_ID varchar YES NULL MUL 识别记录唯一标志码
407 it_acs_elevator_record_2030 CREATE_TIME bigint YES NULL 创建时间
408 it_acs_elevator_record_2030 CREATE_USER_ID varchar YES NULL 创建人
409 it_acs_elevator_record_2030 LAST_UPDATE_TIME bigint YES NULL 修改时间
410 it_acs_elevator_record_2030 LAST_UPDATE_USER_ID varchar YES NULL 修改人
411 it_acs_elevator_record_2030 SRC_FLOOR varchar YES NULL 进梯(当前)楼层
412 it_acs_elevator_record_2030 DEST_FLOOR varchar YES NULL 选层楼层
413 it_acs_elevator_record_2030 DISPATCH_ELEVATOR_NO varchar YES NULL 派梯梯号
414 it_acs_elevator_record_2030 DISPATCH_ELEVATOR_TIME bigint YES NULL 派梯时间
415 it_acs_elevator_record_2030 IS_VISITOR varchar YES NULL 是否访客:0-不是,1-是
416 it_acs_elevator_record_2030 INTERVIEWEE varchar YES NULL 被访人id
417 it_acs_elevator_record_2030 ORG_ID varchar YES NULL 机构id
418 it_acs_elevator_record_2030 ORG_NAME varchar YES NULL 机构名
419 it_acs_elevator_record_2030 PERSON_CODE varchar YES NULL 工号
420 it_acs_pass_rule ID varchar NO NULL PRI 唯一ID
421 it_acs_pass_rule BUSINESS_ID varchar NO NULL MUL 企业ID
422 it_acs_pass_rule ZONE_ID varchar NO NULL 楼层ID
423 it_acs_pass_rule ZONE_NAME varchar YES NULL 楼层名
424 it_acs_pass_rule NAME varchar NO NULL 通行规则名称
425 it_acs_pass_rule IMAGE_STORE_ID varchar NO NULL 图库id
426 it_acs_pass_rule PASSABLE_TIME_ID varchar YES NULL 通行时间id
427 it_acs_pass_rule VALID_DATE_CRON text YES NULL 通行时间cron
428 it_acs_pass_rule VALID_DATE_JSON text YES NULL 通行时间json
429 it_acs_pass_rule BEGIN_DATE bigint YES NULL 开始时间
430 it_acs_pass_rule END_DATE bigint YES NULL 结束时间
431 it_acs_pass_rule CREATE_TIME bigint YES NULL 创建时间
432 it_acs_pass_rule CREATE_USER_ID varchar YES NULL 创建人id
433 it_acs_pass_rule LAST_UPDATE_TIME bigint YES NULL 最后更新时间
434 it_acs_pass_rule LAST_UPDATE_USER_ID varchar YES NULL 最后更新人id
435 it_acs_pass_rule IS_DEFAULT tinyint YES 0 是否默认规则:0-不是,1-是
436 it_acs_recog_record ID varchar NO NULL PRI 主键
437 it_acs_recog_record PERSON_ID varchar YES NULL MUL 人员id
438 it_acs_recog_record PERSON_NAME varchar YES NULL 人员名称
439 it_acs_recog_record BUSINESS_ID varchar NO NULL 企业ID
440 it_acs_recog_record DEVICE_ID varchar YES NULL 设备id
441 it_acs_recog_record DEVICE_CODE varchar NO NULL 设备编号
442 it_acs_recog_record DEVICE_NAME varchar YES NULL 设备名称
443 it_acs_recog_record THRESHOLD decimal YES NULL 阈值
444 it_acs_recog_record DISTRICT_ID varchar YES NULL 省市区id
445 it_acs_recog_record AREA_ID varchar YES NULL 设备区位id
446 it_acs_recog_record DEVICE_TYPE_ID varchar YES NULL 设备类型ID
447 it_acs_recog_record DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
448 it_acs_recog_record SUB_DEVICE_ID varchar YES NULL 子设备id
449 it_acs_recog_record SUB_DEVICE_CODE varchar YES NULL 子设备编号
450 it_acs_recog_record SUB_DEVICE_NAME varchar YES NULL 子设备名称
451 it_acs_recog_record SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
452 it_acs_recog_record SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
453 it_acs_recog_record REGISTER_IMAGE_PATH varchar YES NULL 注册照片
454 it_acs_recog_record FACE_IMAGE_PATH varchar YES NULL 抓拍照
455 it_acs_recog_record PANORAMA_IMAGE_PATH varchar YES NULL 全景照
456 it_acs_recog_record SCORE decimal NO NULL 识别分数
457 it_acs_recog_record RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
458 it_acs_recog_record RECOGNITION_TIME bigint NO NULL 识别时间
459 it_acs_recog_record GROUP_ID varchar YES NULL 用户所在底库编号
460 it_acs_recog_record FACE_ID varchar NO NULL 识别到对应的注册图片编号
461 it_acs_recog_record QUALITY_SCORE decimal YES NULL 人脸质量总分
462 it_acs_recog_record LOG_ID varchar NO NULL 请求唯一标志码
463 it_acs_recog_record TEMP_SCORE decimal YES NULL 体温
464 it_acs_recog_record MASK_SCORE decimal NO NULL 口罩得分
465 it_acs_recog_record TEMP_THRESHOLD decimal YES NULL 体温阈值
466 it_acs_recog_record CARD_TYPE varchar YES NULL 证件类型
467 it_acs_recog_record SOURCE tinyint YES NULL 来源 1 识别 2 人证
468 it_acs_recog_record TEMP_IMAGE_PATH varchar YES NULL 热像图
469 it_acs_recog_record REMARK varchar YES NULL 备注
470 it_acs_recog_record CREATE_TIME bigint YES NULL 创建时间
471 it_acs_recog_record CREATE_USER_ID varchar YES NULL 创建人
472 it_acs_recog_record LAST_UPDATE_TIME bigint YES NULL 修改时间
473 it_acs_recog_record LAST_UPDATE_USER_ID varchar YES NULL 修改人
474 it_acs_recog_record PERSON_LABEL_IDS text YES NULL 人员id列表
475 it_acs_recog_record_2020 ID varchar NO NULL PRI 主键
476 it_acs_recog_record_2020 PERSON_ID varchar YES NULL 人员id
477 it_acs_recog_record_2020 PERSON_NAME varchar YES NULL 人员名称
478 it_acs_recog_record_2020 BUSINESS_ID varchar NO NULL 企业ID
479 it_acs_recog_record_2020 DEVICE_ID varchar YES NULL 设备id
480 it_acs_recog_record_2020 DEVICE_CODE varchar NO NULL 设备编号
481 it_acs_recog_record_2020 DEVICE_NAME varchar YES NULL 设备名称
482 it_acs_recog_record_2020 THRESHOLD decimal YES NULL 阈值
483 it_acs_recog_record_2020 DISTRICT_ID varchar YES NULL 省市区id
484 it_acs_recog_record_2020 AREA_ID varchar YES NULL 设备区位id
485 it_acs_recog_record_2020 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
486 it_acs_recog_record_2020 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
487 it_acs_recog_record_2020 SUB_DEVICE_ID varchar YES NULL 子设备id
488 it_acs_recog_record_2020 SUB_DEVICE_CODE varchar YES NULL 子设备编号
489 it_acs_recog_record_2020 SUB_DEVICE_NAME varchar YES NULL 子设备名称
490 it_acs_recog_record_2020 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
491 it_acs_recog_record_2020 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
492 it_acs_recog_record_2020 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
493 it_acs_recog_record_2020 FACE_IMAGE_PATH varchar YES NULL 抓拍照
494 it_acs_recog_record_2020 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
495 it_acs_recog_record_2020 SCORE decimal NO NULL 识别分数
496 it_acs_recog_record_2020 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
497 it_acs_recog_record_2020 RECOGNITION_TIME bigint NO NULL 识别时间
498 it_acs_recog_record_2020 GROUP_ID varchar YES NULL 用户所在底库编号
499 it_acs_recog_record_2020 FACE_ID varchar NO NULL 识别到对应的注册图片编号
500 it_acs_recog_record_2020 QUALITY_SCORE decimal YES NULL 人脸质量总分
501 it_acs_recog_record_2020 LOG_ID varchar NO NULL 请求唯一标志码
502 it_acs_recog_record_2020 TEMP_SCORE decimal YES NULL 体温
503 it_acs_recog_record_2020 MASK_SCORE decimal NO NULL 口罩得分
504 it_acs_recog_record_2020 TEMP_THRESHOLD decimal YES NULL 体温阈值
505 it_acs_recog_record_2020 CARD_TYPE varchar YES NULL 证件类型
506 it_acs_recog_record_2020 SOURCE tinyint YES NULL 来源 1 识别 2 人证
507 it_acs_recog_record_2020 TEMP_IMAGE_PATH varchar YES NULL 热像图
508 it_acs_recog_record_2020 REMARK varchar YES NULL 备注
509 it_acs_recog_record_2020 CREATE_TIME bigint YES NULL 创建时间
510 it_acs_recog_record_2020 CREATE_USER_ID varchar YES NULL 创建人
511 it_acs_recog_record_2020 LAST_UPDATE_TIME bigint YES NULL 修改时间
512 it_acs_recog_record_2020 LAST_UPDATE_USER_ID varchar YES NULL 修改人
513 it_acs_recog_record_2020 PERSON_LABEL_IDS varchar YES NULL 人员id列表
514 it_acs_recog_record_2021 ID varchar NO NULL PRI 主键
515 it_acs_recog_record_2021 PERSON_ID varchar YES NULL 人员id
516 it_acs_recog_record_2021 PERSON_NAME varchar YES NULL 人员名称
517 it_acs_recog_record_2021 BUSINESS_ID varchar NO NULL 企业ID
518 it_acs_recog_record_2021 DEVICE_ID varchar YES NULL 设备id
519 it_acs_recog_record_2021 DEVICE_CODE varchar NO NULL 设备编号
520 it_acs_recog_record_2021 DEVICE_NAME varchar YES NULL 设备名称
521 it_acs_recog_record_2021 THRESHOLD decimal YES NULL 阈值
522 it_acs_recog_record_2021 DISTRICT_ID varchar YES NULL 省市区id
523 it_acs_recog_record_2021 AREA_ID varchar YES NULL 设备区位id
524 it_acs_recog_record_2021 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
525 it_acs_recog_record_2021 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
526 it_acs_recog_record_2021 SUB_DEVICE_ID varchar YES NULL 子设备id
527 it_acs_recog_record_2021 SUB_DEVICE_CODE varchar YES NULL 子设备编号
528 it_acs_recog_record_2021 SUB_DEVICE_NAME varchar YES NULL 子设备名称
529 it_acs_recog_record_2021 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
530 it_acs_recog_record_2021 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
531 it_acs_recog_record_2021 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
532 it_acs_recog_record_2021 FACE_IMAGE_PATH varchar YES NULL 抓拍照
533 it_acs_recog_record_2021 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
534 it_acs_recog_record_2021 SCORE decimal NO NULL 识别分数
535 it_acs_recog_record_2021 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
536 it_acs_recog_record_2021 RECOGNITION_TIME bigint NO NULL 识别时间
537 it_acs_recog_record_2021 GROUP_ID varchar YES NULL 用户所在底库编号
538 it_acs_recog_record_2021 FACE_ID varchar NO NULL 识别到对应的注册图片编号
539 it_acs_recog_record_2021 QUALITY_SCORE decimal YES NULL 人脸质量总分
540 it_acs_recog_record_2021 LOG_ID varchar NO NULL 请求唯一标志码
541 it_acs_recog_record_2021 TEMP_SCORE decimal YES NULL 体温
542 it_acs_recog_record_2021 MASK_SCORE decimal NO NULL 口罩得分
543 it_acs_recog_record_2021 TEMP_THRESHOLD decimal YES NULL 体温阈值
544 it_acs_recog_record_2021 CARD_TYPE varchar YES NULL 证件类型
545 it_acs_recog_record_2021 SOURCE tinyint YES NULL 来源 1 识别 2 人证
546 it_acs_recog_record_2021 TEMP_IMAGE_PATH varchar YES NULL 热像图
547 it_acs_recog_record_2021 REMARK varchar YES NULL 备注
548 it_acs_recog_record_2021 CREATE_TIME bigint YES NULL 创建时间
549 it_acs_recog_record_2021 CREATE_USER_ID varchar YES NULL 创建人
550 it_acs_recog_record_2021 LAST_UPDATE_TIME bigint YES NULL 修改时间
551 it_acs_recog_record_2021 LAST_UPDATE_USER_ID varchar YES NULL 修改人
552 it_acs_recog_record_2021 PERSON_LABEL_IDS varchar YES NULL 人员id列表
553 it_acs_recog_record_2022 ID varchar NO NULL PRI 主键
554 it_acs_recog_record_2022 PERSON_ID varchar YES NULL 人员id
555 it_acs_recog_record_2022 PERSON_NAME varchar YES NULL 人员名称
556 it_acs_recog_record_2022 BUSINESS_ID varchar NO NULL 企业ID
557 it_acs_recog_record_2022 DEVICE_ID varchar YES NULL 设备id
558 it_acs_recog_record_2022 DEVICE_CODE varchar NO NULL 设备编号
559 it_acs_recog_record_2022 DEVICE_NAME varchar YES NULL 设备名称
560 it_acs_recog_record_2022 THRESHOLD decimal YES NULL 阈值
561 it_acs_recog_record_2022 DISTRICT_ID varchar YES NULL 省市区id
562 it_acs_recog_record_2022 AREA_ID varchar YES NULL 设备区位id
563 it_acs_recog_record_2022 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
564 it_acs_recog_record_2022 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
565 it_acs_recog_record_2022 SUB_DEVICE_ID varchar YES NULL 子设备id
566 it_acs_recog_record_2022 SUB_DEVICE_CODE varchar YES NULL 子设备编号
567 it_acs_recog_record_2022 SUB_DEVICE_NAME varchar YES NULL 子设备名称
568 it_acs_recog_record_2022 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
569 it_acs_recog_record_2022 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
570 it_acs_recog_record_2022 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
571 it_acs_recog_record_2022 FACE_IMAGE_PATH varchar YES NULL 抓拍照
572 it_acs_recog_record_2022 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
573 it_acs_recog_record_2022 SCORE decimal NO NULL 识别分数
574 it_acs_recog_record_2022 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
575 it_acs_recog_record_2022 RECOGNITION_TIME bigint NO NULL 识别时间
576 it_acs_recog_record_2022 GROUP_ID varchar YES NULL 用户所在底库编号
577 it_acs_recog_record_2022 FACE_ID varchar NO NULL 识别到对应的注册图片编号
578 it_acs_recog_record_2022 QUALITY_SCORE decimal YES NULL 人脸质量总分
579 it_acs_recog_record_2022 LOG_ID varchar NO NULL 请求唯一标志码
580 it_acs_recog_record_2022 TEMP_SCORE decimal YES NULL 体温
581 it_acs_recog_record_2022 MASK_SCORE decimal NO NULL 口罩得分
582 it_acs_recog_record_2022 TEMP_THRESHOLD decimal YES NULL 体温阈值
583 it_acs_recog_record_2022 CARD_TYPE varchar YES NULL 证件类型
584 it_acs_recog_record_2022 SOURCE tinyint YES NULL 来源 1 识别 2 人证
585 it_acs_recog_record_2022 TEMP_IMAGE_PATH varchar YES NULL 热像图
586 it_acs_recog_record_2022 REMARK varchar YES NULL 备注
587 it_acs_recog_record_2022 CREATE_TIME bigint YES NULL 创建时间
588 it_acs_recog_record_2022 CREATE_USER_ID varchar YES NULL 创建人
589 it_acs_recog_record_2022 LAST_UPDATE_TIME bigint YES NULL 修改时间
590 it_acs_recog_record_2022 LAST_UPDATE_USER_ID varchar YES NULL 修改人
591 it_acs_recog_record_2022 PERSON_LABEL_IDS varchar YES NULL 人员id列表
592 it_acs_recog_record_2023 ID varchar NO NULL PRI 主键
593 it_acs_recog_record_2023 PERSON_ID varchar YES NULL 人员id
594 it_acs_recog_record_2023 PERSON_NAME varchar YES NULL 人员名称
595 it_acs_recog_record_2023 BUSINESS_ID varchar NO NULL 企业ID
596 it_acs_recog_record_2023 DEVICE_ID varchar YES NULL 设备id
597 it_acs_recog_record_2023 DEVICE_CODE varchar NO NULL 设备编号
598 it_acs_recog_record_2023 DEVICE_NAME varchar YES NULL 设备名称
599 it_acs_recog_record_2023 THRESHOLD decimal YES NULL 阈值
600 it_acs_recog_record_2023 DISTRICT_ID varchar YES NULL 省市区id
601 it_acs_recog_record_2023 AREA_ID varchar YES NULL 设备区位id
602 it_acs_recog_record_2023 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
603 it_acs_recog_record_2023 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
604 it_acs_recog_record_2023 SUB_DEVICE_ID varchar YES NULL 子设备id
605 it_acs_recog_record_2023 SUB_DEVICE_CODE varchar YES NULL 子设备编号
606 it_acs_recog_record_2023 SUB_DEVICE_NAME varchar YES NULL 子设备名称
607 it_acs_recog_record_2023 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
608 it_acs_recog_record_2023 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
609 it_acs_recog_record_2023 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
610 it_acs_recog_record_2023 FACE_IMAGE_PATH varchar YES NULL 抓拍照
611 it_acs_recog_record_2023 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
612 it_acs_recog_record_2023 SCORE decimal NO NULL 识别分数
613 it_acs_recog_record_2023 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
614 it_acs_recog_record_2023 RECOGNITION_TIME bigint NO NULL MUL 识别时间
615 it_acs_recog_record_2023 GROUP_ID varchar YES NULL 用户所在底库编号
616 it_acs_recog_record_2023 FACE_ID varchar NO NULL 识别到对应的注册图片编号
617 it_acs_recog_record_2023 QUALITY_SCORE decimal YES NULL 人脸质量总分
618 it_acs_recog_record_2023 LOG_ID varchar NO NULL 请求唯一标志码
619 it_acs_recog_record_2023 TEMP_SCORE decimal YES NULL 体温
620 it_acs_recog_record_2023 MASK_SCORE decimal NO NULL 口罩得分
621 it_acs_recog_record_2023 TEMP_THRESHOLD decimal YES NULL 体温阈值
622 it_acs_recog_record_2023 CARD_TYPE varchar YES NULL 证件类型
623 it_acs_recog_record_2023 SOURCE tinyint YES NULL 来源 1 识别 2 人证
624 it_acs_recog_record_2023 TEMP_IMAGE_PATH varchar YES NULL 热像图
625 it_acs_recog_record_2023 REMARK varchar YES NULL 备注
626 it_acs_recog_record_2023 CREATE_TIME bigint YES NULL 创建时间
627 it_acs_recog_record_2023 CREATE_USER_ID varchar YES NULL 创建人
628 it_acs_recog_record_2023 LAST_UPDATE_TIME bigint YES NULL 修改时间
629 it_acs_recog_record_2023 LAST_UPDATE_USER_ID varchar YES NULL 修改人
630 it_acs_recog_record_2023 PERSON_LABEL_IDS text YES NULL 人员id列表
631 it_acs_recog_record_2024 ID varchar NO NULL PRI 主键
632 it_acs_recog_record_2024 PERSON_ID varchar YES NULL 人员id
633 it_acs_recog_record_2024 PERSON_NAME varchar YES NULL 人员名称
634 it_acs_recog_record_2024 BUSINESS_ID varchar NO NULL 企业ID
635 it_acs_recog_record_2024 DEVICE_ID varchar YES NULL 设备id
636 it_acs_recog_record_2024 DEVICE_CODE varchar NO NULL 设备编号
637 it_acs_recog_record_2024 DEVICE_NAME varchar YES NULL 设备名称
638 it_acs_recog_record_2024 THRESHOLD decimal YES NULL 阈值
639 it_acs_recog_record_2024 DISTRICT_ID varchar YES NULL 省市区id
640 it_acs_recog_record_2024 AREA_ID varchar YES NULL 设备区位id
641 it_acs_recog_record_2024 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
642 it_acs_recog_record_2024 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
643 it_acs_recog_record_2024 SUB_DEVICE_ID varchar YES NULL 子设备id
644 it_acs_recog_record_2024 SUB_DEVICE_CODE varchar YES NULL 子设备编号
645 it_acs_recog_record_2024 SUB_DEVICE_NAME varchar YES NULL 子设备名称
646 it_acs_recog_record_2024 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
647 it_acs_recog_record_2024 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
648 it_acs_recog_record_2024 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
649 it_acs_recog_record_2024 FACE_IMAGE_PATH varchar YES NULL 抓拍照
650 it_acs_recog_record_2024 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
651 it_acs_recog_record_2024 SCORE decimal NO NULL 识别分数
652 it_acs_recog_record_2024 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
653 it_acs_recog_record_2024 RECOGNITION_TIME bigint NO NULL 识别时间
654 it_acs_recog_record_2024 GROUP_ID varchar YES NULL 用户所在底库编号
655 it_acs_recog_record_2024 FACE_ID varchar NO NULL 识别到对应的注册图片编号
656 it_acs_recog_record_2024 QUALITY_SCORE decimal YES NULL 人脸质量总分
657 it_acs_recog_record_2024 LOG_ID varchar NO NULL 请求唯一标志码
658 it_acs_recog_record_2024 TEMP_SCORE decimal YES NULL 体温
659 it_acs_recog_record_2024 MASK_SCORE decimal NO NULL 口罩得分
660 it_acs_recog_record_2024 TEMP_THRESHOLD decimal YES NULL 体温阈值
661 it_acs_recog_record_2024 CARD_TYPE varchar YES NULL 证件类型
662 it_acs_recog_record_2024 SOURCE tinyint YES NULL 来源 1 识别 2 人证
663 it_acs_recog_record_2024 TEMP_IMAGE_PATH varchar YES NULL 热像图
664 it_acs_recog_record_2024 REMARK varchar YES NULL 备注
665 it_acs_recog_record_2024 CREATE_TIME bigint YES NULL 创建时间
666 it_acs_recog_record_2024 CREATE_USER_ID varchar YES NULL 创建人
667 it_acs_recog_record_2024 LAST_UPDATE_TIME bigint YES NULL 修改时间
668 it_acs_recog_record_2024 LAST_UPDATE_USER_ID varchar YES NULL 修改人
669 it_acs_recog_record_2024 PERSON_LABEL_IDS text YES NULL 人员id列表
670 it_acs_recog_record_2025 ID varchar NO NULL PRI 主键
671 it_acs_recog_record_2025 PERSON_ID varchar YES NULL 人员id
672 it_acs_recog_record_2025 PERSON_NAME varchar YES NULL 人员名称
673 it_acs_recog_record_2025 BUSINESS_ID varchar NO NULL 企业ID
674 it_acs_recog_record_2025 DEVICE_ID varchar YES NULL 设备id
675 it_acs_recog_record_2025 DEVICE_CODE varchar NO NULL 设备编号
676 it_acs_recog_record_2025 DEVICE_NAME varchar YES NULL 设备名称
677 it_acs_recog_record_2025 THRESHOLD decimal YES NULL 阈值
678 it_acs_recog_record_2025 DISTRICT_ID varchar YES NULL 省市区id
679 it_acs_recog_record_2025 AREA_ID varchar YES NULL 设备区位id
680 it_acs_recog_record_2025 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
681 it_acs_recog_record_2025 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
682 it_acs_recog_record_2025 SUB_DEVICE_ID varchar YES NULL 子设备id
683 it_acs_recog_record_2025 SUB_DEVICE_CODE varchar YES NULL 子设备编号
684 it_acs_recog_record_2025 SUB_DEVICE_NAME varchar YES NULL 子设备名称
685 it_acs_recog_record_2025 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
686 it_acs_recog_record_2025 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
687 it_acs_recog_record_2025 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
688 it_acs_recog_record_2025 FACE_IMAGE_PATH varchar YES NULL 抓拍照
689 it_acs_recog_record_2025 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
690 it_acs_recog_record_2025 SCORE decimal NO NULL 识别分数
691 it_acs_recog_record_2025 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
692 it_acs_recog_record_2025 RECOGNITION_TIME bigint NO NULL 识别时间
693 it_acs_recog_record_2025 GROUP_ID varchar YES NULL 用户所在底库编号
694 it_acs_recog_record_2025 FACE_ID varchar NO NULL 识别到对应的注册图片编号
695 it_acs_recog_record_2025 QUALITY_SCORE decimal YES NULL 人脸质量总分
696 it_acs_recog_record_2025 LOG_ID varchar NO NULL 请求唯一标志码
697 it_acs_recog_record_2025 TEMP_SCORE decimal YES NULL 体温
698 it_acs_recog_record_2025 MASK_SCORE decimal NO NULL 口罩得分
699 it_acs_recog_record_2025 TEMP_THRESHOLD decimal YES NULL 体温阈值
700 it_acs_recog_record_2025 CARD_TYPE varchar YES NULL 证件类型
701 it_acs_recog_record_2025 SOURCE tinyint YES NULL 来源 1 识别 2 人证
702 it_acs_recog_record_2025 TEMP_IMAGE_PATH varchar YES NULL 热像图
703 it_acs_recog_record_2025 REMARK varchar YES NULL 备注
704 it_acs_recog_record_2025 CREATE_TIME bigint YES NULL 创建时间
705 it_acs_recog_record_2025 CREATE_USER_ID varchar YES NULL 创建人
706 it_acs_recog_record_2025 LAST_UPDATE_TIME bigint YES NULL 修改时间
707 it_acs_recog_record_2025 LAST_UPDATE_USER_ID varchar YES NULL 修改人
708 it_acs_recog_record_2025 PERSON_LABEL_IDS text YES NULL 人员id列表
709 it_acs_recog_record_2026 ID varchar NO NULL PRI 主键
710 it_acs_recog_record_2026 PERSON_ID varchar YES NULL 人员id
711 it_acs_recog_record_2026 PERSON_NAME varchar YES NULL 人员名称
712 it_acs_recog_record_2026 BUSINESS_ID varchar NO NULL 企业ID
713 it_acs_recog_record_2026 DEVICE_ID varchar YES NULL 设备id
714 it_acs_recog_record_2026 DEVICE_CODE varchar NO NULL 设备编号
715 it_acs_recog_record_2026 DEVICE_NAME varchar YES NULL 设备名称
716 it_acs_recog_record_2026 THRESHOLD decimal YES NULL 阈值
717 it_acs_recog_record_2026 DISTRICT_ID varchar YES NULL 省市区id
718 it_acs_recog_record_2026 AREA_ID varchar YES NULL 设备区位id
719 it_acs_recog_record_2026 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
720 it_acs_recog_record_2026 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
721 it_acs_recog_record_2026 SUB_DEVICE_ID varchar YES NULL 子设备id
722 it_acs_recog_record_2026 SUB_DEVICE_CODE varchar YES NULL 子设备编号
723 it_acs_recog_record_2026 SUB_DEVICE_NAME varchar YES NULL 子设备名称
724 it_acs_recog_record_2026 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
725 it_acs_recog_record_2026 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
726 it_acs_recog_record_2026 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
727 it_acs_recog_record_2026 FACE_IMAGE_PATH varchar YES NULL 抓拍照
728 it_acs_recog_record_2026 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
729 it_acs_recog_record_2026 SCORE decimal NO NULL 识别分数
730 it_acs_recog_record_2026 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
731 it_acs_recog_record_2026 RECOGNITION_TIME bigint NO NULL 识别时间
732 it_acs_recog_record_2026 GROUP_ID varchar YES NULL 用户所在底库编号
733 it_acs_recog_record_2026 FACE_ID varchar NO NULL 识别到对应的注册图片编号
734 it_acs_recog_record_2026 QUALITY_SCORE decimal YES NULL 人脸质量总分
735 it_acs_recog_record_2026 LOG_ID varchar NO NULL 请求唯一标志码
736 it_acs_recog_record_2026 TEMP_SCORE decimal YES NULL 体温
737 it_acs_recog_record_2026 MASK_SCORE decimal NO NULL 口罩得分
738 it_acs_recog_record_2026 TEMP_THRESHOLD decimal YES NULL 体温阈值
739 it_acs_recog_record_2026 CARD_TYPE varchar YES NULL 证件类型
740 it_acs_recog_record_2026 SOURCE tinyint YES NULL 来源 1 识别 2 人证
741 it_acs_recog_record_2026 TEMP_IMAGE_PATH varchar YES NULL 热像图
742 it_acs_recog_record_2026 REMARK varchar YES NULL 备注
743 it_acs_recog_record_2026 CREATE_TIME bigint YES NULL 创建时间
744 it_acs_recog_record_2026 CREATE_USER_ID varchar YES NULL 创建人
745 it_acs_recog_record_2026 LAST_UPDATE_TIME bigint YES NULL 修改时间
746 it_acs_recog_record_2026 LAST_UPDATE_USER_ID varchar YES NULL 修改人
747 it_acs_recog_record_2026 PERSON_LABEL_IDS varchar YES NULL 人员id列表
748 it_acs_recog_record_2027 ID varchar NO NULL PRI 主键
749 it_acs_recog_record_2027 PERSON_ID varchar YES NULL 人员id
750 it_acs_recog_record_2027 PERSON_NAME varchar YES NULL 人员名称
751 it_acs_recog_record_2027 BUSINESS_ID varchar NO NULL 企业ID
752 it_acs_recog_record_2027 DEVICE_ID varchar YES NULL 设备id
753 it_acs_recog_record_2027 DEVICE_CODE varchar NO NULL 设备编号
754 it_acs_recog_record_2027 DEVICE_NAME varchar YES NULL 设备名称
755 it_acs_recog_record_2027 THRESHOLD decimal YES NULL 阈值
756 it_acs_recog_record_2027 DISTRICT_ID varchar YES NULL 省市区id
757 it_acs_recog_record_2027 AREA_ID varchar YES NULL 设备区位id
758 it_acs_recog_record_2027 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
759 it_acs_recog_record_2027 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
760 it_acs_recog_record_2027 SUB_DEVICE_ID varchar YES NULL 子设备id
761 it_acs_recog_record_2027 SUB_DEVICE_CODE varchar YES NULL 子设备编号
762 it_acs_recog_record_2027 SUB_DEVICE_NAME varchar YES NULL 子设备名称
763 it_acs_recog_record_2027 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
764 it_acs_recog_record_2027 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
765 it_acs_recog_record_2027 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
766 it_acs_recog_record_2027 FACE_IMAGE_PATH varchar YES NULL 抓拍照
767 it_acs_recog_record_2027 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
768 it_acs_recog_record_2027 SCORE decimal NO NULL 识别分数
769 it_acs_recog_record_2027 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
770 it_acs_recog_record_2027 RECOGNITION_TIME bigint NO NULL 识别时间
771 it_acs_recog_record_2027 GROUP_ID varchar YES NULL 用户所在底库编号
772 it_acs_recog_record_2027 FACE_ID varchar NO NULL 识别到对应的注册图片编号
773 it_acs_recog_record_2027 QUALITY_SCORE decimal YES NULL 人脸质量总分
774 it_acs_recog_record_2027 LOG_ID varchar NO NULL 请求唯一标志码
775 it_acs_recog_record_2027 TEMP_SCORE decimal YES NULL 体温
776 it_acs_recog_record_2027 MASK_SCORE decimal NO NULL 口罩得分
777 it_acs_recog_record_2027 TEMP_THRESHOLD decimal YES NULL 体温阈值
778 it_acs_recog_record_2027 CARD_TYPE varchar YES NULL 证件类型
779 it_acs_recog_record_2027 SOURCE tinyint YES NULL 来源 1 识别 2 人证
780 it_acs_recog_record_2027 TEMP_IMAGE_PATH varchar YES NULL 热像图
781 it_acs_recog_record_2027 REMARK varchar YES NULL 备注
782 it_acs_recog_record_2027 CREATE_TIME bigint YES NULL 创建时间
783 it_acs_recog_record_2027 CREATE_USER_ID varchar YES NULL 创建人
784 it_acs_recog_record_2027 LAST_UPDATE_TIME bigint YES NULL 修改时间
785 it_acs_recog_record_2027 LAST_UPDATE_USER_ID varchar YES NULL 修改人
786 it_acs_recog_record_2027 PERSON_LABEL_IDS varchar YES NULL 人员id列表
787 it_acs_recog_record_2028 ID varchar NO NULL PRI 主键
788 it_acs_recog_record_2028 PERSON_ID varchar YES NULL 人员id
789 it_acs_recog_record_2028 PERSON_NAME varchar YES NULL 人员名称
790 it_acs_recog_record_2028 BUSINESS_ID varchar NO NULL 企业ID
791 it_acs_recog_record_2028 DEVICE_ID varchar YES NULL 设备id
792 it_acs_recog_record_2028 DEVICE_CODE varchar NO NULL 设备编号
793 it_acs_recog_record_2028 DEVICE_NAME varchar YES NULL 设备名称
794 it_acs_recog_record_2028 THRESHOLD decimal YES NULL 阈值
795 it_acs_recog_record_2028 DISTRICT_ID varchar YES NULL 省市区id
796 it_acs_recog_record_2028 AREA_ID varchar YES NULL 设备区位id
797 it_acs_recog_record_2028 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
798 it_acs_recog_record_2028 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
799 it_acs_recog_record_2028 SUB_DEVICE_ID varchar YES NULL 子设备id
800 it_acs_recog_record_2028 SUB_DEVICE_CODE varchar YES NULL 子设备编号
801 it_acs_recog_record_2028 SUB_DEVICE_NAME varchar YES NULL 子设备名称
802 it_acs_recog_record_2028 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
803 it_acs_recog_record_2028 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
804 it_acs_recog_record_2028 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
805 it_acs_recog_record_2028 FACE_IMAGE_PATH varchar YES NULL 抓拍照
806 it_acs_recog_record_2028 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
807 it_acs_recog_record_2028 SCORE decimal NO NULL 识别分数
808 it_acs_recog_record_2028 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
809 it_acs_recog_record_2028 RECOGNITION_TIME bigint NO NULL 识别时间
810 it_acs_recog_record_2028 GROUP_ID varchar YES NULL 用户所在底库编号
811 it_acs_recog_record_2028 FACE_ID varchar NO NULL 识别到对应的注册图片编号
812 it_acs_recog_record_2028 QUALITY_SCORE decimal YES NULL 人脸质量总分
813 it_acs_recog_record_2028 LOG_ID varchar NO NULL 请求唯一标志码
814 it_acs_recog_record_2028 TEMP_SCORE decimal YES NULL 体温
815 it_acs_recog_record_2028 MASK_SCORE decimal NO NULL 口罩得分
816 it_acs_recog_record_2028 TEMP_THRESHOLD decimal YES NULL 体温阈值
817 it_acs_recog_record_2028 CARD_TYPE varchar YES NULL 证件类型
818 it_acs_recog_record_2028 SOURCE tinyint YES NULL 来源 1 识别 2 人证
819 it_acs_recog_record_2028 TEMP_IMAGE_PATH varchar YES NULL 热像图
820 it_acs_recog_record_2028 REMARK varchar YES NULL 备注
821 it_acs_recog_record_2028 CREATE_TIME bigint YES NULL 创建时间
822 it_acs_recog_record_2028 CREATE_USER_ID varchar YES NULL 创建人
823 it_acs_recog_record_2028 LAST_UPDATE_TIME bigint YES NULL 修改时间
824 it_acs_recog_record_2028 LAST_UPDATE_USER_ID varchar YES NULL 修改人
825 it_acs_recog_record_2028 PERSON_LABEL_IDS varchar YES NULL 人员id列表
826 it_acs_recog_record_2029 ID varchar NO NULL PRI 主键
827 it_acs_recog_record_2029 PERSON_ID varchar YES NULL 人员id
828 it_acs_recog_record_2029 PERSON_NAME varchar YES NULL 人员名称
829 it_acs_recog_record_2029 BUSINESS_ID varchar NO NULL 企业ID
830 it_acs_recog_record_2029 DEVICE_ID varchar YES NULL 设备id
831 it_acs_recog_record_2029 DEVICE_CODE varchar NO NULL 设备编号
832 it_acs_recog_record_2029 DEVICE_NAME varchar YES NULL 设备名称
833 it_acs_recog_record_2029 THRESHOLD decimal YES NULL 阈值
834 it_acs_recog_record_2029 DISTRICT_ID varchar YES NULL 省市区id
835 it_acs_recog_record_2029 AREA_ID varchar YES NULL 设备区位id
836 it_acs_recog_record_2029 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
837 it_acs_recog_record_2029 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
838 it_acs_recog_record_2029 SUB_DEVICE_ID varchar YES NULL 子设备id
839 it_acs_recog_record_2029 SUB_DEVICE_CODE varchar YES NULL 子设备编号
840 it_acs_recog_record_2029 SUB_DEVICE_NAME varchar YES NULL 子设备名称
841 it_acs_recog_record_2029 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
842 it_acs_recog_record_2029 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
843 it_acs_recog_record_2029 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
844 it_acs_recog_record_2029 FACE_IMAGE_PATH varchar YES NULL 抓拍照
845 it_acs_recog_record_2029 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
846 it_acs_recog_record_2029 SCORE decimal NO NULL 识别分数
847 it_acs_recog_record_2029 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
848 it_acs_recog_record_2029 RECOGNITION_TIME bigint NO NULL 识别时间
849 it_acs_recog_record_2029 GROUP_ID varchar YES NULL 用户所在底库编号
850 it_acs_recog_record_2029 FACE_ID varchar NO NULL 识别到对应的注册图片编号
851 it_acs_recog_record_2029 QUALITY_SCORE decimal YES NULL 人脸质量总分
852 it_acs_recog_record_2029 LOG_ID varchar NO NULL 请求唯一标志码
853 it_acs_recog_record_2029 TEMP_SCORE decimal YES NULL 体温
854 it_acs_recog_record_2029 MASK_SCORE decimal NO NULL 口罩得分
855 it_acs_recog_record_2029 TEMP_THRESHOLD decimal YES NULL 体温阈值
856 it_acs_recog_record_2029 CARD_TYPE varchar YES NULL 证件类型
857 it_acs_recog_record_2029 SOURCE tinyint YES NULL 来源 1 识别 2 人证
858 it_acs_recog_record_2029 TEMP_IMAGE_PATH varchar YES NULL 热像图
859 it_acs_recog_record_2029 REMARK varchar YES NULL 备注
860 it_acs_recog_record_2029 CREATE_TIME bigint YES NULL 创建时间
861 it_acs_recog_record_2029 CREATE_USER_ID varchar YES NULL 创建人
862 it_acs_recog_record_2029 LAST_UPDATE_TIME bigint YES NULL 修改时间
863 it_acs_recog_record_2029 LAST_UPDATE_USER_ID varchar YES NULL 修改人
864 it_acs_recog_record_2029 PERSON_LABEL_IDS varchar YES NULL 人员id列表
865 it_acs_recog_record_2030 ID varchar NO NULL PRI 主键
866 it_acs_recog_record_2030 PERSON_ID varchar YES NULL 人员id
867 it_acs_recog_record_2030 PERSON_NAME varchar YES NULL 人员名称
868 it_acs_recog_record_2030 BUSINESS_ID varchar NO NULL 企业ID
869 it_acs_recog_record_2030 DEVICE_ID varchar YES NULL 设备id
870 it_acs_recog_record_2030 DEVICE_CODE varchar NO NULL 设备编号
871 it_acs_recog_record_2030 DEVICE_NAME varchar YES NULL 设备名称
872 it_acs_recog_record_2030 THRESHOLD decimal YES NULL 阈值
873 it_acs_recog_record_2030 DISTRICT_ID varchar YES NULL 省市区id
874 it_acs_recog_record_2030 AREA_ID varchar YES NULL 设备区位id
875 it_acs_recog_record_2030 DEVICE_TYPE_ID varchar YES NULL 设备类型ID
876 it_acs_recog_record_2030 DEVICE_TYPE_NAME varchar YES NULL 设备类型名称
877 it_acs_recog_record_2030 SUB_DEVICE_ID varchar YES NULL 子设备id
878 it_acs_recog_record_2030 SUB_DEVICE_CODE varchar YES NULL 子设备编号
879 it_acs_recog_record_2030 SUB_DEVICE_NAME varchar YES NULL 子设备名称
880 it_acs_recog_record_2030 SUB_DEVICE_TYPE_ID varchar YES NULL 子设备类型ID
881 it_acs_recog_record_2030 SUB_DEVICE_TYPE_NAME varchar YES NULL 子设备类型名称
882 it_acs_recog_record_2030 REGISTER_IMAGE_PATH varchar YES NULL 注册照片
883 it_acs_recog_record_2030 FACE_IMAGE_PATH varchar YES NULL 抓拍照
884 it_acs_recog_record_2030 PANORAMA_IMAGE_PATH varchar YES NULL 全景照
885 it_acs_recog_record_2030 SCORE decimal NO NULL 识别分数
886 it_acs_recog_record_2030 RECOGNITION_RESULT tinyint YES NULL 识别结果 1:成功 2:失败
887 it_acs_recog_record_2030 RECOGNITION_TIME bigint NO NULL 识别时间
888 it_acs_recog_record_2030 GROUP_ID varchar YES NULL 用户所在底库编号
889 it_acs_recog_record_2030 FACE_ID varchar NO NULL 识别到对应的注册图片编号
890 it_acs_recog_record_2030 QUALITY_SCORE decimal YES NULL 人脸质量总分
891 it_acs_recog_record_2030 LOG_ID varchar NO NULL 请求唯一标志码
892 it_acs_recog_record_2030 TEMP_SCORE decimal YES NULL 体温
893 it_acs_recog_record_2030 MASK_SCORE decimal NO NULL 口罩得分
894 it_acs_recog_record_2030 TEMP_THRESHOLD decimal YES NULL 体温阈值
895 it_acs_recog_record_2030 CARD_TYPE varchar YES NULL 证件类型
896 it_acs_recog_record_2030 SOURCE tinyint YES NULL 来源 1 识别 2 人证
897 it_acs_recog_record_2030 TEMP_IMAGE_PATH varchar YES NULL 热像图
898 it_acs_recog_record_2030 REMARK varchar YES NULL 备注
899 it_acs_recog_record_2030 CREATE_TIME bigint YES NULL 创建时间
900 it_acs_recog_record_2030 CREATE_USER_ID varchar YES NULL 创建人
901 it_acs_recog_record_2030 LAST_UPDATE_TIME bigint YES NULL 修改时间
902 it_acs_recog_record_2030 LAST_UPDATE_USER_ID varchar YES NULL 修改人
903 it_acs_recog_record_2030 PERSON_LABEL_IDS varchar YES NULL 人员id列表
904 send_record_time time bigint NO NULL 时间戳
905 send_record_time type tinyint NO NULL 类型:1-通行记录,2-开门记录
906 send_record_timebak time bigint NO NULL 时间戳
907 send_record_timebak type tinyint NO NULL 类型:1-通行记录,2-开门记录
908 tenant_visitor_floor_policy id varchar NO NULL PRI 主键
909 tenant_visitor_floor_policy business_id varchar NO NULL MUL 机构/租户 ID
910 tenant_visitor_floor_policy policy_type varchar NO INTERSECT_ALLOWLIST 策略类型
911 tenant_visitor_floor_policy allow_zone_ids text YES NULL JSON 数组,zoneId 列表
912 tenant_visitor_floor_policy building_id varchar YES NULL 预留:楼栋维度;租户默认填 NULL
913 tenant_visitor_floor_policy enabled tinyint NO 1 1 启用 0 停用
914 tenant_visitor_floor_policy policy_version bigint NO 1 配置版本号
915 tenant_visitor_floor_policy remark varchar YES NULL
916 tenant_visitor_floor_policy created_by varchar YES NULL
917 tenant_visitor_floor_policy created_at bigint YES NULL
918 tenant_visitor_floor_policy updated_by varchar YES NULL
919 tenant_visitor_floor_policy updated_at bigint YES NULL
@@ -0,0 +1,82 @@
mysql: [Warning] Using a password on the command line interface can be insecure.
elevator_device PRIMARY ID 0 1
image_rule_ref image_rule_ref_include_labels_IDX include_labels 1 1
image_rule_ref image_rule_ref_include_organizations_IDX include_organizations 1 1
image_rule_ref PRIMARY id 0 1
it_acs_device_task PRIMARY id 0 1
it_acs_elevator_record IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
it_acs_elevator_record IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
it_acs_elevator_record PRIMARY ID 0 1
it_acs_elevator_record RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_elevator_record_2020 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
it_acs_elevator_record_2020 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
it_acs_elevator_record_2020 PRIMARY ID 0 1
it_acs_elevator_record_2020 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_elevator_record_2021 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
it_acs_elevator_record_2021 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
it_acs_elevator_record_2021 PRIMARY ID 0 1
it_acs_elevator_record_2021 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_elevator_record_2022 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
it_acs_elevator_record_2022 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
it_acs_elevator_record_2022 PRIMARY ID 0 1
it_acs_elevator_record_2022 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_elevator_record_2023 it_acs_elevator_record_2023_RECOGNITION_TIME_IDX RECOGNITION_TIME 1 1
it_acs_elevator_record_2023 PRIMARY ID 0 1
it_acs_elevator_record_2023 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_elevator_record_2024 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
it_acs_elevator_record_2024 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
it_acs_elevator_record_2024 PRIMARY ID 0 1
it_acs_elevator_record_2024 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_elevator_record_2025 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
it_acs_elevator_record_2025 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
it_acs_elevator_record_2025 PRIMARY ID 0 1
it_acs_elevator_record_2025 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_elevator_record_2026 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
it_acs_elevator_record_2026 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
it_acs_elevator_record_2026 PRIMARY ID 0 1
it_acs_elevator_record_2026 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_elevator_record_2027 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
it_acs_elevator_record_2027 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
it_acs_elevator_record_2027 PRIMARY ID 0 1
it_acs_elevator_record_2027 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_elevator_record_2028 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
it_acs_elevator_record_2028 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
it_acs_elevator_record_2028 PRIMARY ID 0 1
it_acs_elevator_record_2028 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_elevator_record_2029 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
it_acs_elevator_record_2029 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
it_acs_elevator_record_2029 PRIMARY ID 0 1
it_acs_elevator_record_2029 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_elevator_record_2030 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
it_acs_elevator_record_2030 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
it_acs_elevator_record_2030 PRIMARY ID 0 1
it_acs_elevator_record_2030 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
it_acs_pass_rule IDX_BUSINESS_DEVICE BUSINESS_ID 1 1
it_acs_pass_rule IDX_BUSINESS_DEVICE ZONE_ID 1 2
it_acs_pass_rule IDX_BUSINESS_IMG_STORE BUSINESS_ID 1 1
it_acs_pass_rule IDX_BUSINESS_IMG_STORE IMAGE_STORE_ID 1 2
it_acs_pass_rule IDX_BUSINESS_TIME BUSINESS_ID 1 1
it_acs_pass_rule IDX_BUSINESS_TIME PASSABLE_TIME_ID 1 2
it_acs_pass_rule PRIMARY ID 0 1
it_acs_recog_record it_acs_recog_record_PERSON_ID_IDX PERSON_ID 1 1
it_acs_recog_record it_acs_recog_record_PERSON_ID_IDX DEVICE_ID 1 2
it_acs_recog_record it_acs_recog_record_PERSON_ID_IDX RECOGNITION_TIME 1 3
it_acs_recog_record it_acs_recog_record_PERSON_ID_IDX RECOGNITION_RESULT 1 4
it_acs_recog_record PRIMARY ID 0 1
it_acs_recog_record_2020 PRIMARY ID 0 1
it_acs_recog_record_2021 PRIMARY ID 0 1
it_acs_recog_record_2022 PRIMARY ID 0 1
it_acs_recog_record_2023 it_acs_recog_record_2023_RECOGNITION_TIME_IDX RECOGNITION_TIME 1 1
it_acs_recog_record_2023 PRIMARY ID 0 1
it_acs_recog_record_2024 PRIMARY ID 0 1
it_acs_recog_record_2025 PRIMARY ID 0 1
it_acs_recog_record_2026 PRIMARY ID 0 1
it_acs_recog_record_2027 PRIMARY ID 0 1
it_acs_recog_record_2028 PRIMARY ID 0 1
it_acs_recog_record_2029 PRIMARY ID 0 1
it_acs_recog_record_2030 PRIMARY ID 0 1
tenant_visitor_floor_policy idx_business_enabled business_id 1 1
tenant_visitor_floor_policy idx_business_enabled enabled 1 2
tenant_visitor_floor_policy PRIMARY id 0 1
tenant_visitor_floor_policy uk_biz_building business_id 0 1
tenant_visitor_floor_policy uk_biz_building building_id 0 2
1 mysql: [Warning] Using a password on the command line interface can be insecure.
2 elevator_device PRIMARY ID 0 1
3 image_rule_ref image_rule_ref_include_labels_IDX include_labels 1 1
4 image_rule_ref image_rule_ref_include_organizations_IDX include_organizations 1 1
5 image_rule_ref PRIMARY id 0 1
6 it_acs_device_task PRIMARY id 0 1
7 it_acs_elevator_record IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
8 it_acs_elevator_record IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
9 it_acs_elevator_record PRIMARY ID 0 1
10 it_acs_elevator_record RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
11 it_acs_elevator_record_2020 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
12 it_acs_elevator_record_2020 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
13 it_acs_elevator_record_2020 PRIMARY ID 0 1
14 it_acs_elevator_record_2020 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
15 it_acs_elevator_record_2021 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
16 it_acs_elevator_record_2021 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
17 it_acs_elevator_record_2021 PRIMARY ID 0 1
18 it_acs_elevator_record_2021 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
19 it_acs_elevator_record_2022 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
20 it_acs_elevator_record_2022 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
21 it_acs_elevator_record_2022 PRIMARY ID 0 1
22 it_acs_elevator_record_2022 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
23 it_acs_elevator_record_2023 it_acs_elevator_record_2023_RECOGNITION_TIME_IDX RECOGNITION_TIME 1 1
24 it_acs_elevator_record_2023 PRIMARY ID 0 1
25 it_acs_elevator_record_2023 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
26 it_acs_elevator_record_2024 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
27 it_acs_elevator_record_2024 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
28 it_acs_elevator_record_2024 PRIMARY ID 0 1
29 it_acs_elevator_record_2024 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
30 it_acs_elevator_record_2025 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
31 it_acs_elevator_record_2025 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
32 it_acs_elevator_record_2025 PRIMARY ID 0 1
33 it_acs_elevator_record_2025 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
34 it_acs_elevator_record_2026 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
35 it_acs_elevator_record_2026 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
36 it_acs_elevator_record_2026 PRIMARY ID 0 1
37 it_acs_elevator_record_2026 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
38 it_acs_elevator_record_2027 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
39 it_acs_elevator_record_2027 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
40 it_acs_elevator_record_2027 PRIMARY ID 0 1
41 it_acs_elevator_record_2027 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
42 it_acs_elevator_record_2028 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
43 it_acs_elevator_record_2028 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
44 it_acs_elevator_record_2028 PRIMARY ID 0 1
45 it_acs_elevator_record_2028 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
46 it_acs_elevator_record_2029 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
47 it_acs_elevator_record_2029 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
48 it_acs_elevator_record_2029 PRIMARY ID 0 1
49 it_acs_elevator_record_2029 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
50 it_acs_elevator_record_2030 IDX_BUSINESS_RECOGTIME BUSINESS_ID 1 1
51 it_acs_elevator_record_2030 IDX_BUSINESS_RECOGTIME RECOGNITION_TIME 1 2
52 it_acs_elevator_record_2030 PRIMARY ID 0 1
53 it_acs_elevator_record_2030 RECOGNITION_FACE_ID RECOGNITION_FACE_ID 1 1
54 it_acs_pass_rule IDX_BUSINESS_DEVICE BUSINESS_ID 1 1
55 it_acs_pass_rule IDX_BUSINESS_DEVICE ZONE_ID 1 2
56 it_acs_pass_rule IDX_BUSINESS_IMG_STORE BUSINESS_ID 1 1
57 it_acs_pass_rule IDX_BUSINESS_IMG_STORE IMAGE_STORE_ID 1 2
58 it_acs_pass_rule IDX_BUSINESS_TIME BUSINESS_ID 1 1
59 it_acs_pass_rule IDX_BUSINESS_TIME PASSABLE_TIME_ID 1 2
60 it_acs_pass_rule PRIMARY ID 0 1
61 it_acs_recog_record it_acs_recog_record_PERSON_ID_IDX PERSON_ID 1 1
62 it_acs_recog_record it_acs_recog_record_PERSON_ID_IDX DEVICE_ID 1 2
63 it_acs_recog_record it_acs_recog_record_PERSON_ID_IDX RECOGNITION_TIME 1 3
64 it_acs_recog_record it_acs_recog_record_PERSON_ID_IDX RECOGNITION_RESULT 1 4
65 it_acs_recog_record PRIMARY ID 0 1
66 it_acs_recog_record_2020 PRIMARY ID 0 1
67 it_acs_recog_record_2021 PRIMARY ID 0 1
68 it_acs_recog_record_2022 PRIMARY ID 0 1
69 it_acs_recog_record_2023 it_acs_recog_record_2023_RECOGNITION_TIME_IDX RECOGNITION_TIME 1 1
70 it_acs_recog_record_2023 PRIMARY ID 0 1
71 it_acs_recog_record_2024 PRIMARY ID 0 1
72 it_acs_recog_record_2025 PRIMARY ID 0 1
73 it_acs_recog_record_2026 PRIMARY ID 0 1
74 it_acs_recog_record_2027 PRIMARY ID 0 1
75 it_acs_recog_record_2028 PRIMARY ID 0 1
76 it_acs_recog_record_2029 PRIMARY ID 0 1
77 it_acs_recog_record_2030 PRIMARY ID 0 1
78 tenant_visitor_floor_policy idx_business_enabled business_id 1 1
79 tenant_visitor_floor_policy idx_business_enabled enabled 1 2
80 tenant_visitor_floor_policy PRIMARY id 0 1
81 tenant_visitor_floor_policy uk_biz_building business_id 0 1
82 tenant_visitor_floor_policy uk_biz_building building_id 0 2
@@ -0,0 +1,51 @@
=== tenant_visitor_floor_policy ===
+----------------------------------+----------------------------------+---------------------+------------------------+-------------+---------+----------------+--------------------------------------------------------------------------------------------------------------------------+------------+---------------+------------+---------------+
| id | business_id | policy_type | allow_zone_ids | building_id | enabled | policy_version | remark | created_by | created_at | updated_by | updated_at |
+----------------------------------+----------------------------------+---------------------+------------------------+-------------+---------+----------------+--------------------------------------------------------------------------------------------------------------------------+------------+---------------+------------+---------------+
| gf_vstr_policy_guangfa_fund_001x | 2524639890ba4f2cba9ba1a4eeaa4015 | INTERSECT_ALLOWLIST | ["605560545117995008"] | NULL | 1 | 1 | 广发基金:访客与 floorList 求交后仅保留 allowlist(默认仅 28F zone)。业务配置见产品方案。 | NULL | 1777437481000 | NULL | 1777437481000 |
+----------------------------------+----------------------------------+---------------------+------------------------+-------------+---------+----------------+--------------------------------------------------------------------------------------------------------------------------+------------+---------------+------------+---------------+
=== image_rule_ref ===
+--------------------+--------------------+-----------+--------------+--------------------+----------------+-----------------------+----------------+------------+------------+----------+---------------+------------------+----------------------------------+--------------------+---------------+
| id | zone_id | zone_name | name | person_id | include_labels | include_organizations | exclude_labels | is_default | start_time | end_time | create_time | last_update_time | business_id | parent_rule | person_delete |
+--------------------+--------------------+-----------+--------------+--------------------+----------------+-----------------------+----------------+------------+------------+----------+---------------+------------------+----------------------------------+--------------------+---------------+
| 999998333961596928 | 605560541473144832 | 6F | 默认规则 | 999998332677980160 | NULL | NULL | NULL | NULL | NULL | NULL | 1753154181887 | 1753154181887 | 2524639890ba4f2cba9ba1a4eeaa4015 | 606253695058837504 | 0 |
| 999998241204416512 | 605560542752407552 | 15F | 默认规则 | 999998240135180288 | NULL | NULL | NULL | NULL | NULL | NULL | 1753154159772 | 1753154159772 | 2524639890ba4f2cba9ba1a4eeaa4015 | 605594273001242624 | 0 |
| 999997067843825664 | 605560543834537984 | 20F | 默认规则 | 999997066723823616 | NULL | NULL | NULL | NULL | NULL | NULL | 1753153880021 | 1753153880021 | 2524639890ba4f2cba9ba1a4eeaa4015 | 605786764719685632 | 0 |
+--------------------+--------------------+-----------+--------------+--------------------+----------------+-----------------------+----------------+------------+------------+----------+---------------+------------------+----------------------------------+--------------------+---------------+
=== code_elevator_area ===
+--------------------+------+---------------+------------------+----------+--------------------+
| zone_id | code | create_time | last_update_time | is_first | parent_id |
+--------------------+------+---------------+------------------+----------+--------------------+
| 605560548330831872 | 0x2F | 1659120800248 | 1659120800248 | 0 | 605560539791228928 |
| 605560548167254016 | 0x2E | 1659120788063 | 1659120788063 | 0 | 605560539791228928 |
| 605560547923984384 | 0x2D | 1659120766841 | 1659120766841 | 0 | 605560539791228928 |
+--------------------+------+---------------+------------------+----------+--------------------+
=== elevator_device ===
+-----+---------------+------------------+-------------+----------------------------------+--------------------------+------------------+------------------------------------------+--------+-----------+---------------------+------------------+--------------------+---------------+----------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------+--------------------+
| ID | create_time | last_update_time | delete_flag | device_id | device_name | device_code | device_type_name | status | area_name | current_building_id | current_building | current_floor_id | current_floor | elevator_floor_list | elevator_floor_id_list | business_id | area_id |
+-----+---------------+------------------+-------------+----------------------------------+--------------------------+------------------+------------------------------------------+--------+-----------+---------------------+------------------+--------------------+---------------+----------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------+--------------------+
| 985 | 1767517871574 | 1770433604213 | 1 | 5f670e84771547bba65eb612f1eae85c | 28F办公电梯厅东 | 0166124040000056 | 云从-人脸识别终端CW-IS1330系列 | NULL | 28F | 605560539791228928 | 星河湾中心 | 605560545117995008 | 28F | 1F,30F,31F,32F,33F,34F,35F,36F,37F,38F | 605560545449345024,605560545596145664,605560545738752000,605560545893941248,605560546036547584,605560546242068480,605560546401452032,605560546552446976,605560546711830528,605560540432957440 | 2524639890ba4f2cba9ba1a4eeaa4015 | 605560545117995008 |
| 983 | 1766567284252 | 1766567284252 | 1 | dd16a57af07a4466a37fa863ece02d52 | 30F办公电梯厅东新 | 0166124040000034 | 云从-人脸识别终端CW-IS1330系列 | NULL | 30F | 605560539791228928 | 星河湾中心 | 605560545449345024 | 30F | 1F,28F,31F,32F,33F,34F,35F,36F,37F,38F | 605560545117995008,605560545596145664,605560545738752000,605560545893941248,605560546036547584,605560546242068480,605560546401452032,605560546552446976,605560546711830528,605560540432957440 | 2524639890ba4f2cba9ba1a4eeaa4015 | 605560545449345024 |
| 981 | 1765949061198 | 1765949061198 | 1 | 78df9e4433294dff975f743e8e8cd801 | 35F办公电梯厅东 | 0166124040000033 | 云从-人脸识别终端CW-IS1330系列 | NULL | 35F | 605560539791228928 | 星河湾中心 | 605560546242068480 | 35F | 1F,28F,30F,31F,32F,33F,34F,36F,37F,38F | 605560540432957440,605560545117995008,605560545449345024,605560545596145664,605560545738752000,605560545893941248,605560546036547584,605560546401452032,605560546552446976,605560546711830528 | 2524639890ba4f2cba9ba1a4eeaa4015 | 605560546242068480 |
+-----+---------------+------------------+-------------+----------------------------------+--------------------------+------------------+------------------------------------------+--------+-----------+---------------------+------------------+--------------------+---------------+----------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------+--------------------+
=== it_acs_device_task ===
+--------------------+-------------+--------------+---------+
| id | ALL_DEVICES | BIND_DEVICES | IS_STOP |
+--------------------+-------------+--------------+---------+
| 995659162337738752 | 1 | 0 | 1 |
| 992730189924626432 | 1 | 0 | 1 |
| 992730084085411840 | 1 | 1 | 1 |
+--------------------+-------------+--------------+---------+
=== send_record_time ===
+---------------+------+
| time | type |
+---------------+------+
| 1776933769715 | 2 |
| 1687645800000 | 1 |
+---------------+------+
=== device_image_store ===
+--------------------+----------------------------------+
| building_id | image_store_id |
+--------------------+----------------------------------+
| 605560539791228928 | 7a83a5d268844c3a9ea0b22b32f8757b |
+--------------------+----------------------------------+
@@ -0,0 +1,34 @@
mysql: [Warning] Using a password on the command line interface can be insecure.
code_elevator_area 43 InnoDB 电梯编码(编码与地区编号)
device_image_store 0 InnoDB 楼栋图库关联表
elevator_device 126 InnoDB 派梯设备
image_rule_ref 69087 InnoDB 通行规则信息表
it_acs_device_task 525 InnoDB 派梯楼层绑定任务进度表
it_acs_elevator_record 0 InnoDB 开门记录表
it_acs_elevator_record_2020 0 InnoDB 开门记录表
it_acs_elevator_record_2021 0 InnoDB 开门记录表
it_acs_elevator_record_2022 364141 InnoDB 开门记录表
it_acs_elevator_record_2023 1295207 InnoDB 开门记录表
it_acs_elevator_record_2024 1859518 InnoDB 开门记录表
it_acs_elevator_record_2025 1847669 InnoDB 开门记录表
it_acs_elevator_record_2026 664815 InnoDB 开门记录表
it_acs_elevator_record_2027 0 InnoDB 开门记录表
it_acs_elevator_record_2028 0 InnoDB 开门记录表
it_acs_elevator_record_2029 0 InnoDB 开门记录表
it_acs_elevator_record_2030 0 InnoDB 开门记录表
it_acs_pass_rule 0 InnoDB 通行规则表
it_acs_recog_record 0 InnoDB 识别记录表
it_acs_recog_record_2020 0 InnoDB 识别记录表
it_acs_recog_record_2021 0 InnoDB 识别记录表
it_acs_recog_record_2022 735055 InnoDB 识别记录表
it_acs_recog_record_2023 5751205 InnoDB 识别记录表
it_acs_recog_record_2024 4046343 InnoDB 识别记录表
it_acs_recog_record_2025 3503798 InnoDB 识别记录表
it_acs_recog_record_2026 976180 InnoDB 识别记录表
it_acs_recog_record_2027 0 InnoDB 识别记录表
it_acs_recog_record_2028 0 InnoDB 识别记录表
it_acs_recog_record_2029 0 InnoDB 识别记录表
it_acs_recog_record_2030 0 InnoDB 识别记录表
send_record_time 2 InnoDB 记录推送时间戳
send_record_timebak 2 InnoDB 记录推送时间戳
tenant_visitor_floor_policy 1 InnoDB 租户访客默认楼层策略(与组织 floorList 求交)
1 mysql: [Warning] Using a password on the command line interface can be insecure.
2 code_elevator_area 43 InnoDB 电梯编码(编码与地区编号)
3 device_image_store 0 InnoDB 楼栋图库关联表
4 elevator_device 126 InnoDB 派梯设备
5 image_rule_ref 69087 InnoDB 通行规则信息表
6 it_acs_device_task 525 InnoDB 派梯楼层绑定任务进度表
7 it_acs_elevator_record 0 InnoDB 开门记录表
8 it_acs_elevator_record_2020 0 InnoDB 开门记录表
9 it_acs_elevator_record_2021 0 InnoDB 开门记录表
10 it_acs_elevator_record_2022 364141 InnoDB 开门记录表
11 it_acs_elevator_record_2023 1295207 InnoDB 开门记录表
12 it_acs_elevator_record_2024 1859518 InnoDB 开门记录表
13 it_acs_elevator_record_2025 1847669 InnoDB 开门记录表
14 it_acs_elevator_record_2026 664815 InnoDB 开门记录表
15 it_acs_elevator_record_2027 0 InnoDB 开门记录表
16 it_acs_elevator_record_2028 0 InnoDB 开门记录表
17 it_acs_elevator_record_2029 0 InnoDB 开门记录表
18 it_acs_elevator_record_2030 0 InnoDB 开门记录表
19 it_acs_pass_rule 0 InnoDB 通行规则表
20 it_acs_recog_record 0 InnoDB 识别记录表
21 it_acs_recog_record_2020 0 InnoDB 识别记录表
22 it_acs_recog_record_2021 0 InnoDB 识别记录表
23 it_acs_recog_record_2022 735055 InnoDB 识别记录表
24 it_acs_recog_record_2023 5751205 InnoDB 识别记录表
25 it_acs_recog_record_2024 4046343 InnoDB 识别记录表
26 it_acs_recog_record_2025 3503798 InnoDB 识别记录表
27 it_acs_recog_record_2026 976180 InnoDB 识别记录表
28 it_acs_recog_record_2027 0 InnoDB 识别记录表
29 it_acs_recog_record_2028 0 InnoDB 识别记录表
30 it_acs_recog_record_2029 0 InnoDB 识别记录表
31 it_acs_recog_record_2030 0 InnoDB 识别记录表
32 send_record_time 2 InnoDB 记录推送时间戳
33 send_record_timebak 2 InnoDB 记录推送时间戳
34 tenant_visitor_floor_policy 1 InnoDB 租户访客默认楼层策略(与组织 floorList 求交)
@@ -0,0 +1,27 @@
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/api/ApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppBusinessMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/ApplicationApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/ApplicationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppResMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthorizationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/dict/DictMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/dict/DictTypeMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/enterprise/EnterpriseMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/group/GroupInfoMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/group/GroupRoleMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/resource/ResourceApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/resource/ResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleAuthMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/service/ServiceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserAccountMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserApplicationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserGroupMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserResMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserRoleMapper.xml
+89
View File
@@ -0,0 +1,89 @@
./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/mapper/AcsElevatorCodeMapper.xml
./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/device/mapper/AcsDeviceTaskMapper.xml
./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/device/mapper/AcsElevatorDeviceMapper.xml
./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/device/mapper/DeviceImageStoreMapper.xml
./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/mapper/TenantVisitorFloorPolicyMapper.xml
./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/AcsElevatorRecordMapper.xml
./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/AcsPassRuleMapper.xml
./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/AcsRecogRecordMapper.xml
./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/ImageRuleRefMapper.xml
./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/SendRecordTimeMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/api/ApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/AppApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/ApplicationApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/ApplicationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/AppResMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/authorization/AuthApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/authorization/AuthorizationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/authorization/AuthResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/dict/DictMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/dict/DictTypeMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/enterprise/EnterpriseMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/group/GroupInfoMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/group/GroupRoleMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/resource/ResourceApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/resource/ResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleAuthMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/service/ServiceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserAccountMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserApplicationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserGroupMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserResMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserRoleMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/api/ApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppBusinessMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/ApplicationApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/ApplicationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppResMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthorizationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/dict/DictMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/dict/DictTypeMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/enterprise/EnterpriseMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/group/GroupInfoMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/group/GroupRoleMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/resource/ResourceApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/resource/ResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleAuthMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/service/ServiceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserAccountMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserApplicationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserGroupMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserResMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserRoleMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/api/ApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/AppApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/ApplicationApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/ApplicationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/AppResMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/authorization/AuthApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/authorization/AuthorizationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/authorization/AuthResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/dict/DictMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/dict/DictTypeMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/enterprise/EnterpriseMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/group/GroupInfoMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/group/GroupRoleMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/resource/ResourceApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/resource/ResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleApiMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleAuthMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleResourceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/service/ServiceMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserAccountMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserApplicationMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserGroupMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserResMapper.xml
./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserRoleMapper.xml
+89
View File
@@ -0,0 +1,89 @@
maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/mapper/AcsElevatorCodeMapper.xml
maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/device/mapper/AcsDeviceTaskMapper.xml
maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/device/mapper/AcsElevatorDeviceMapper.xml
maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/device/mapper/DeviceImageStoreMapper.xml
maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/mapper/TenantVisitorFloorPolicyMapper.xml
maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/AcsElevatorRecordMapper.xml
maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/AcsPassRuleMapper.xml it_acs_pass_rule
maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/AcsRecogRecordMapper.xml
maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/ImageRuleRefMapper.xml image_rule_ref
maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/SendRecordTimeMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/api/ApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/AppApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/ApplicationApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/ApplicationMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/AppResMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/authorization/AuthApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/authorization/AuthorizationMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/authorization/AuthResourceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/dict/DictMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/dict/DictTypeMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/enterprise/EnterpriseMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/group/GroupInfoMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/group/GroupRoleMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/resource/ResourceApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/resource/ResourceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleAuthMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleResourceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/service/ServiceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserAccountMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserApplicationMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserGroupMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserResMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserRoleMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/api/ApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppBusinessMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/ApplicationApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/ApplicationMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppResMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthorizationMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthResourceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/dict/DictMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/dict/DictTypeMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/enterprise/EnterpriseMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/group/GroupInfoMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/group/GroupRoleMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/resource/ResourceApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/resource/ResourceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleAuthMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleResourceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/service/ServiceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserAccountMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserApplicationMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserGroupMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserResMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserRoleMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/api/ApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/AppApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/ApplicationApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/ApplicationMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/AppResMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/authorization/AuthApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/authorization/AuthorizationMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/authorization/AuthResourceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/dict/DictMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/dict/DictTypeMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/enterprise/EnterpriseMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/group/GroupInfoMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/group/GroupRoleMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/resource/ResourceApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/resource/ResourceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleApiMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleAuthMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleResourceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/service/ServiceMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserAccountMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserApplicationMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserGroupMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserResMapper.xml
maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserRoleMapper.xml
1 maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/codeElevatorArea/mapper/AcsElevatorCodeMapper.xml
2 maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/device/mapper/AcsDeviceTaskMapper.xml
3 maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/device/mapper/AcsElevatorDeviceMapper.xml
4 maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/device/mapper/DeviceImageStoreMapper.xml
5 maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/mapper/TenantVisitorFloorPolicyMapper.xml
6 maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/AcsElevatorRecordMapper.xml
7 maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/AcsPassRuleMapper.xml it_acs_pass_rule
8 maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/AcsRecogRecordMapper.xml
9 maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/ImageRuleRefMapper.xml image_rule_ref
10 maven-cw-elevator-application ./maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/record/mapper/SendRecordTimeMapper.xml
11 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/api/ApiMapper.xml
12 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/AppApiMapper.xml
13 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/ApplicationApiMapper.xml
14 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/ApplicationMapper.xml
15 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/application/AppResMapper.xml
16 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/authorization/AuthApiMapper.xml
17 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/authorization/AuthorizationMapper.xml
18 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/authorization/AuthResourceMapper.xml
19 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/dict/DictMapper.xml
20 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/dict/DictTypeMapper.xml
21 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/enterprise/EnterpriseMapper.xml
22 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/group/GroupInfoMapper.xml
23 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/group/GroupRoleMapper.xml
24 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/resource/ResourceApiMapper.xml
25 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/resource/ResourceMapper.xml
26 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleApiMapper.xml
27 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleAuthMapper.xml
28 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleMapper.xml
29 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/role/RoleResourceMapper.xml
30 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/service/ServiceMapper.xml
31 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserAccountMapper.xml
32 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserApplicationMapper.xml
33 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserGroupMapper.xml
34 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserMapper.xml
35 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserResMapper.xml
36 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/db2/user/UserRoleMapper.xml
37 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/api/ApiMapper.xml
38 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppApiMapper.xml
39 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppBusinessMapper.xml
40 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/ApplicationApiMapper.xml
41 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/ApplicationMapper.xml
42 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/application/AppResMapper.xml
43 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthApiMapper.xml
44 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthorizationMapper.xml
45 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/authorization/AuthResourceMapper.xml
46 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/dict/DictMapper.xml
47 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/dict/DictTypeMapper.xml
48 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/enterprise/EnterpriseMapper.xml
49 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/group/GroupInfoMapper.xml
50 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/group/GroupRoleMapper.xml
51 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/resource/ResourceApiMapper.xml
52 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/resource/ResourceMapper.xml
53 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleApiMapper.xml
54 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleAuthMapper.xml
55 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleMapper.xml
56 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/role/RoleResourceMapper.xml
57 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/service/ServiceMapper.xml
58 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserAccountMapper.xml
59 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserApplicationMapper.xml
60 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserGroupMapper.xml
61 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserMapper.xml
62 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserResMapper.xml
63 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/mysql/user/UserRoleMapper.xml
64 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/api/ApiMapper.xml
65 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/AppApiMapper.xml
66 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/ApplicationApiMapper.xml
67 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/ApplicationMapper.xml
68 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/application/AppResMapper.xml
69 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/authorization/AuthApiMapper.xml
70 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/authorization/AuthorizationMapper.xml
71 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/authorization/AuthResourceMapper.xml
72 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/dict/DictMapper.xml
73 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/dict/DictTypeMapper.xml
74 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/enterprise/EnterpriseMapper.xml
75 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/group/GroupInfoMapper.xml
76 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/group/GroupRoleMapper.xml
77 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/resource/ResourceApiMapper.xml
78 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/resource/ResourceMapper.xml
79 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleApiMapper.xml
80 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleAuthMapper.xml
81 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleMapper.xml
82 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/role/RoleResourceMapper.xml
83 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/service/ServiceMapper.xml
84 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserAccountMapper.xml
85 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserApplicationMapper.xml
86 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserGroupMapper.xml
87 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserMapper.xml
88 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserResMapper.xml
89 maven-cwos-resource ./maven-cwos-resource/cwos-component-resource-data/src/main/java/cn/cloudwalk/data/resource/mapper/oracle/user/UserRoleMapper.xml
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,396 @@
# 数据库表结构参考手册 — 实施计划
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 走查全部 5 个数据库(2 库直连 + 3 库代码推导),输出带 Mermaid ER 图 + 脱敏样本数据的 Markdown 参考手册。
**Architecture:** 分三层执行 — 数据库查询层(直连 INFORMATION_SCHEMA + SELECT 样本)、代码扫描层(并行读取全部 MyBatis Mapper XML 提取表/列/JOIN)、文档生成层(交叉验证 + 组装 Markdown)。直连库与代码扫描完全并行。
**Tech Stack:** MySQL CLI (`mysql`), Bash, Python 3JSON 缓存), Mermaid erDiagram
**Spec:** `docs/superpowers/specs/2026-05-01-database-schema-reference-design.md`
---
## 前置检查
- [ ] **Step 0: 确认数据库可达**
```bash
mysql -h 192.168.3.12 -P 3307 -u root -p123456 -e "SELECT VERSION(); SHOW DATABASES LIKE '%component%'; SHOW DATABASES LIKE '%elevator%';"
```
期望输出: MySQL 版本号 + `component-organization``cw-elevator-application` 两个库存在。
> 若失败:全量降级为代码推导模式(见 Task 4 备选路径)。
---
### Task 1: 采集组件组织库 schema + 样本
**Files:**
- Create: `docs/superpowers/data/component-organization/schema_raw.json`
- Create: `docs/superpowers/data/component-organization/tables.json`
- Create: `docs/superpowers/data/component-organization/samples/`
- [ ] **Step 1: 导出表清单**
```bash
mkdir -p docs/superpowers/data/component-organization/samples
mysql -h 192.168.3.12 -P 3307 -u root -p123456 component-organization -N -e \
"SELECT TABLE_NAME, IFNULL(TABLE_ROWS,0), ENGINE, IFNULL(TABLE_COMMENT,'') \
FROM INFORMATION_SCHEMA.TABLES \
WHERE TABLE_SCHEMA='component-organization' AND TABLE_TYPE='BASE TABLE' \
ORDER BY TABLE_NAME;" > docs/superpowers/data/component-organization/tables.tsv
```
- [ ] **Step 2: 导出全部列定义**
```bash
mysql -h 192.168.3.12 -P 3307 -u root -p123456 component-organization -N -e \
"SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, IFNULL(COLUMN_DEFAULT,'NULL'), COLUMN_KEY, EXTRA, IFNULL(COLUMN_COMMENT,'') \
FROM INFORMATION_SCHEMA.COLUMNS \
WHERE TABLE_SCHEMA='component-organization' AND TABLE_NAME NOT LIKE 'QRTZ_%' AND TABLE_NAME NOT LIKE 'quartz_%' \
ORDER BY TABLE_NAME, ORDINAL_POSITION;" > docs/superpowers/data/component-organization/columns.tsv
```
- [ ] **Step 3: 导出索引**
```bash
mysql -h 192.168.3.12 -P 3307 -u root -p123456 component-organization -N -e \
"SELECT TABLE_NAME, INDEX_NAME, COLUMN_NAME, NON_UNIQUE, SEQ_IN_INDEX \
FROM INFORMATION_SCHEMA.STATISTICS \
WHERE TABLE_SCHEMA='component-organization' \
ORDER BY TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX;" > docs/superpowers/data/component-organization/indexes.tsv
```
- [ ] **Step 4: 逐表采集样本(每表 3 行)**
```bash
# 读取表清单,排除系统表,对每张表执行 SELECT * LIMIT 3
while IFS=$'\t' read -r table_name rest; do
if [[ "$table_name" != QRTZ_* ]] && [[ "$table_name" != quartz_* ]]; then
echo "--- Extracting: $table_name ---"
mysql -h 192.168.3.12 -P 3307 -u root -p123456 component-organization -t -e \
"SELECT * FROM \`$table_name\` ORDER BY 1 DESC LIMIT 3;" \
> "docs/superpowers/data/component-organization/samples/${table_name}.txt" 2>&1
fi
done < <(cut -f1 docs/superpowers/data/component-organization/tables.tsv)
```
- [ ] **Step 5: 提交中间产物**
```bash
git add docs/superpowers/data/component-organization/
git commit -m "data: add component-organization schema raw dump and samples"
```
---
### Task 2: 采集电梯应用库 schema + 样本
**Files:**
- Create: `docs/superpowers/data/cw-elevator-application/schema_raw.json`
- Create: `docs/superpowers/data/cw-elevator-application/tables.json`
- Create: `docs/superpowers/data/cw-elevator-application/samples/`
- [ ] **Step 1: 导出表清单**
```bash
mkdir -p docs/superpowers/data/cw-elevator-application/samples
mysql -h 192.168.3.12 -P 3307 -u root -p123456 cw-elevator-application -N -e \
"SELECT TABLE_NAME, IFNULL(TABLE_ROWS,0), ENGINE, IFNULL(TABLE_COMMENT,'') \
FROM INFORMATION_SCHEMA.TABLES \
WHERE TABLE_SCHEMA='cw-elevator-application' AND TABLE_TYPE='BASE TABLE' \
ORDER BY TABLE_NAME;" > docs/superpowers/data/cw-elevator-application/tables.tsv
```
- [ ] **Step 2: 导出全部列定义**
```bash
mysql -h 192.168.3.12 -P 3307 -u root -p123456 cw-elevator-application -N -e \
"SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, IFNULL(COLUMN_DEFAULT,'NULL'), COLUMN_KEY, EXTRA, IFNULL(COLUMN_COMMENT,'') \
FROM INFORMATION_SCHEMA.COLUMNS \
WHERE TABLE_SCHEMA='cw-elevator-application' AND TABLE_NAME NOT LIKE 'QRTZ_%' AND TABLE_NAME NOT LIKE 'quartz_%' \
ORDER BY TABLE_NAME, ORDINAL_POSITION;" > docs/superpowers/data/cw-elevator-application/columns.tsv
```
- [ ] **Step 3: 导出索引**
```bash
mysql -h 192.168.3.12 -P 3307 -u root -p123456 cw-elevator-application -N -e \
"SELECT TABLE_NAME, INDEX_NAME, COLUMN_NAME, NON_UNIQUE, SEQ_IN_INDEX \
FROM INFORMATION_SCHEMA.STATISTICS \
WHERE TABLE_SCHEMA='cw-elevator-application' \
ORDER BY TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX;" > docs/superpowers/data/cw-elevator-application/indexes.tsv
```
- [ ] **Step 4: 逐表采集样本(每表 3 行)**
```bash
while IFS=$'\t' read -r table_name rest; do
if [[ "$table_name" != QRTZ_* ]] && [[ "$table_name" != quartz_* ]]; then
echo "--- Extracting: $table_name ---"
mysql -h 192.168.3.12 -P 3307 -u root -p123456 cw-elevator-application -t -e \
"SELECT * FROM \`$table_name\` ORDER BY 1 DESC LIMIT 3;" \
> "docs/superpowers/data/cw-elevator-application/samples/${table_name}.txt" 2>&1
fi
done < <(cut -f1 docs/superpowers/data/cw-elevator-application/tables.tsv)
```
- [ ] **Step 5: 提交中间产物**
```bash
git add docs/superpowers/data/cw-elevator-application/
git commit -m "data: add cw-elevator-application schema raw dump and samples"
```
---
### Task 3: 扫描所有 MyBatis Mapper XML 提取表/列/JOIN
**Files:**
- Create: `docs/superpowers/data/mapper_tables.tsv`
- [ ] **Step 1: 枚举所有 Mapper XML 文件**
```bash
find ./maven-cw-elevator-application ./maven-cwos-resource ./maven-ninca-crk ./maven-ninca-qk-alarm \
-name "*Mapper.xml" -path "*/src/main/*" 2>/dev/null | sort \
> docs/superpowers/data/mapper_files.txt
wc -l docs/superpowers/data/mapper_files.txt
```
期望输出: ~80+ 个 Mapper XML 文件。
- [ ] **Step 2: 从 Mapper XML 提取 INSERT/UPDATE/FROM 表名**
```bash
# 提取 INSERT INTO / UPDATE / FROM / JOIN 后的表名
> docs/superpowers/data/mapper_tables.tsv
while IFS= read -r xmlfile; do
module=$(echo "$xmlfile" | cut -d'/' -f2)
tablenames=$(grep -oP '(INSERT\s+INTO\s+|UPDATE\s+|FROM\s+|JOIN\s+)\s*\`?\K[a-z_][a-z0-9_]*' "$xmlfile" 2>/dev/null | sort -u | tr '\n' ',')
echo -e "$module\t$xmlfile\t$tablenames"
done < docs/superpowers/data/mapper_files.txt > docs/superpowers/data/mapper_tables.tsv
```
- [ ] **Step 3: 提取 resultMap 列映射**
对每个 Mapper XML,读取 `<resultMap>` 中的 `<result column="..." property="...">` 提取列名。用下面脚本:
```bash
> docs/superpowers/data/mapper_columns.tsv
while IFS= read -r xmlfile; do
cols=$(grep -oP '<result\s+column="\K[^"]+' "$xmlfile" 2>/dev/null | sort -u | tr '\n' ',')
ids=$(grep -oP '<id\s+column="\K[^"]+' "$xmlfile" 2>/dev/null | sort -u | tr '\n' ',')
echo -e "${xmlfile}\t${ids}|${cols}"
done < docs/superpowers/data/mapper_files.txt > docs/superpowers/data/mapper_columns.tsv
```
- [ ] **Step 4: 提取 JOIN 关系**
```bash
> docs/superpowers/data/mapper_joins.tsv
while IFS= read -r xmlfile; do
joins=$(grep -oP '(LEFT\s+|RIGHT\s+|INNER\s+)?JOIN\s+\`?\K[a-z_][a-z0-9_]*\s+ON\s+\K[^;]+' "$xmlfile" 2>/dev/null | tr '\n' '|')
if [ -n "$joins" ]; then
echo -e "${xmlfile}\t${joins}"
fi
done < docs/superpowers/data/mapper_files.txt > docs/superpowers/data/mapper_joins.tsv
```
- [ ] **Step 5: 扫描 ShardingSphere 分表配置**
```bash
grep -r "actual-data-nodes\|sharding-column\|table-strategy" \
--include="*.properties" --include="*.yml" --include="*.yaml" \
./maven-cw-elevator-application/ ./maven-ninca-crk/ 2>/dev/null \
> docs/superpowers/data/sharding_config.txt
```
- [ ] **Step 6: 提交**
```bash
git add docs/superpowers/data/mapper_*.tsv docs/superpowers/data/mapper_files.txt docs/superpowers/data/sharding_config.txt
git commit -m "data: add MyBatis mapper table/column/join extraction"
```
---
### Task 4: 代码推导不可达库的表结构
**Files:**
- Create: `docs/superpowers/data/ninca-crk-std/mapper_tables.tsv`
- Create: `docs/superpowers/data/alarm-deploy/mapper_tables.tsv`
- Create: `docs/superpowers/data/cwos-resource/mapper_tables.tsv`
**ninca_crk_std****alarm_deploy** 的 MyBatis mapper 路径在 `application.properties` 中声明:
- ninca-crk: `classpath*:cn/cloudwalk/data/**/mysql/*.xml,classpath*:cn/cloudwalk/task/data/**/mysql/*.xml`
- alarm: `classpath:cn/cloudwalk/data/**/mysql/*.xml`
- cwos-resource: Mapper XML 已在 Task 3 中扫描
- [ ] **Step 1: 从 ninca-crk 的 Mapper XML 提取表信息**
```bash
# ninca-crk 的 Mapper XML 位于 src/main/java 下(非 resources/mapper
find ./maven-ninca-crk -name "*.xml" -path "*/mysql/*" 2>/dev/null | sort > docs/superpowers/data/ninca-crk-std/mapper_files.txt
while IFS= read -r xmlfile; do
tablenames=$(grep -oP '(INSERT\s+INTO\s+|UPDATE\s+|FROM\s+|JOIN\s+)\s*\`?\K[a-z_][a-z0-9_]*' "$xmlfile" 2>/dev/null | sort -u | tr '\n' ',')
echo -e "ninca-crk-std\t$xmlfile\t$tablenames"
done < docs/superpowers/data/ninca-crk-std/mapper_files.txt > docs/superpowers/data/ninca-crk-std/mapper_tables.tsv
```
- [ ] **Step 2: 从 alarm 的 Mapper XML 提取表信息**
```bash
find ./maven-ninca-qk-alarm -name "*.xml" -path "*/mysql/*" 2>/dev/null | sort > docs/superpowers/data/alarm-deploy/mapper_files.txt
while IFS= read -r xmlfile; do
tablenames=$(grep -oP '(INSERT\s+INTO\s+|UPDATE\s+|FROM\s+|JOIN\s+)\s*\`?\K[a-z_][a-z0-9_]*' "$xmlfile" 2>/dev/null | sort -u | tr '\n' ',')
echo -e "alarm-deploy\t$xmlfile\t$tablenames"
done < docs/superpowers/data/alarm-deploy/mapper_files.txt > docs/superpowers/data/alarm-deploy/mapper_tables.tsv
```
- [ ] **Step 3: 从 cwos-resource 的 Mapper XML 提取表信息**
```bash
# cwos-resource 有 db2/mysql/oracle 三个方言目录,以 mysql/ 为准
find ./maven-cwos-resource -name "*.xml" -path "*/mysql/*" 2>/dev/null | sort > docs/superpowers/data/cwos-resource/mapper_files.txt
while IFS= read -r xmlfile; do
tablenames=$(grep -oP '(INSERT\s+INTO\s+|UPDATE\s+|FROM\s+|JOIN\s+)\s*\`?\K[a-z_][a-z0-9_]*' "$xmlfile" 2>/dev/null | sort -u | tr '\n' ',')
echo -e "cwos-resource\t$xmlfile\t$tablenames"
done < docs/superpowers/data/cwos-resource/mapper_files.txt > docs/superpowers/data/cwos-resource/mapper_tables.tsv
```
- [ ] **Step 4: 提交**
```bash
git add docs/superpowers/data/ninca-crk-std/ docs/superpowers/data/alarm-deploy/ docs/superpowers/data/cwos-resource/
git commit -m "data: add code-derived table info for unreachable databases"
```
---
### Task 5: 交叉验证与生成最终 Markdown 文档
**Files:**
- Create: `docs/superpowers/specs/2026-05-01-database-schema-reference.md`(最终产物)
此任务通过 subagent 执行——将 Task 1-4 采集的原始数据 + 现有架构文档 + Mapper 扫描结果汇总为最终手册。
- [ ] **Step 1: 交付 subagent 生成文档**
委托 `deep` agent,传入以下 prompt
```
TASK: 根据以下原始数据生成数据库表结构参考手册 Markdown 文件。
EXPECTED OUTCOME:
- 文件写入 docs/superpowers/specs/2026-05-01-database-schema-reference.md
- 包含 9 个章节(见设计说明 §2)
- 每库有 Mermaid erDiagram ER 图
- 每表有列清单(列名、类型、可空、键、注释)
- 可连库的表有脱敏样本数据(Markdown 表格,≤3 行)
- 跨库关系总图
- 代码-表映射索引
REQUIRED TOOLS: Read, Write, Bash
MUST DO:
1. 读取设计说明: docs/superpowers/specs/2026-05-01-database-schema-reference-design.md
2. 读取现有架构文档: docs/architecture/租户组织人员访客-数据模型与用例.md
3. 读取 Task 1-2 的 schema 原始数据: docs/superpowers/data/component-organization/ 和 cw-elevator-application/ 下的 tables.tsv, columns.tsv, indexes.tsv
4. 读取 Task 1-2 的样本数据: samples/ 目录下各 .txt 文件
5. 读取 Task 3-4 的 Mapper 扫描结果: docs/superpowers/data/mapper_tables.tsv, mapper_columns.tsv, mapper_joins.tsv
6. 对每张表应用脱敏规则(设计说明 §5.3):姓名截断、手机号截断、IP替换、密码列跳过、时间戳转换
7. 按设计说明 §4 规范绘制 Mermaid ER 图:业务关键列、三种关系线(约束/JOIN/跨库)、subgraph 分包
8. 交叉验证:列出「库中有但代码无 Mapper」的表(标注为运维/外部表),对比 DDL 与实际列
9. 对不可达库(ninca-crk-std, alarm-deploy, cwos-resource)显式标注「⚠️ 未连接生产库,从代码推导」
10. Mermaid 语法必须可渲染(erDiagram 关键字、正确的 {} 语法、||--o{ 关系线)
11. 文档中不出现 "TBD"、"TODO"、"待补充"
MUST NOT DO:
- 不要编造未在原始数据中出现的表名或列名
- 不要对不可达库声称有样本数据
- 不要包含系统表(QRTZ_*, quartz_*
- 不要包含未脱敏的姓名/手机号/IP
CONTEXT:
- 仓库路径: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/源码
- 数据库环境: 192.168.3.12:3307 (MySQL), user=root, password=123456
- 数据库: component-organization, cw-elevator-application (直连); ninca_crk_std, alarm_deploy, cwos_resource (代码推导)
- 现有架构文档已有 organization 库 5 表 + elevator 库 2 表的 ER 模型,以此为起点扩展
- MyBatis Mapper XML 路径已在 mapper_files.txt 中列出
```
- [ ] **Step 2: 验证文档完整性**
```bash
# 检查文档存在且非空
wc -l docs/superpowers/specs/2026-05-01-database-schema-reference.md
# 检查 Mermaid 块数量(应有 ≥5 个 erDiagram 块)
grep -c 'erDiagram' docs/superpowers/specs/2026-05-01-database-schema-reference.md
# 检查无占位符
! grep -n 'TBD\|TODO\|待补充' docs/superpowers/specs/2026-05-01-database-schema-reference.md
echo "Exit: $?"
```
期望: 文件 ≥ 500 行,≥ 5 个 erDiagram 块,无占位符匹配(exit 0)。
- [ ] **Step 3: 提交**
```bash
git add docs/superpowers/specs/2026-05-01-database-schema-reference.md
git commit -m "docs: add full database schema reference manual with ER diagrams and sample data"
```
---
### Task 6: 收尾清理
- [ ] **Step 1: 取消中间数据跟踪(可选)**
若中间数据不应入库,更新 `.gitignore`
```bash
# 如需排除原始数据
echo "docs/superpowers/data/" >> .gitignore
```
- [ ] **Step 2: 最终提交**
```bash
git add -A
git status
git commit -m "chore: finalize database schema reference delivery"
```
---
## 备选路径
### 若 192.168.3.12 不可达
跳过 Task 1 和 Task 2。所有表结构从代码 Mapper XML 推导,标注「⚠️ 数据库不可达,全部信息从代码推导」。在 Task 5 的 subagent prompt 中移除「读取样本数据」步骤。
### 若某个库的 Mapper XML 为空
对应章节仅输出「该模块未发现 MyBatis Mapper XML,无法从代码推导表结构」,不生成 ER 图。
---
## 完成检查清单
- [ ] 产物文件 `docs/superpowers/specs/2026-05-01-database-schema-reference.md` 存在且 ≥ 500 行
- [ ] 5 个数据库各有独立章节 + ER 图
- [ ] 跨库关系总图存在
- [ ] 代码-表映射索引覆盖全部 Mapper XML
- [ ] 可连库的每张表有 1-3 行脱敏样本
- [ ]`TBD` / `TODO` / `待补充`
- [ ] 所有 Mermaid 块语法正确可渲染
- [ ] 脱敏规则已应用(姓名截断、手机号截断等)
@@ -0,0 +1,647 @@
# 租户访客楼层策略 org_id 粒度修复 — 实施计划
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:**`tenant_visitor_floor_policy` 的策略键从 `business_id` 改为 `org_id`,实现二选一语义(有策略用 allow,无策略用 floorList),修复 F1/F2/W2 问题。
**Architecture:** DDL 先上线(加列+改约束,不影响行为)→ 代码切换(Mapper/DAO/Service 三层的 business_id → org_id + 二选一逻辑)→ 数据迁移(运维 SQL 填 org_id)。整体改动控制在 7 个文件内,最小风险。
**Tech Stack:** Java 8, Spring Boot, MyBatis, MySQL 5.7
**Spec:** `docs/superpowers/specs/2026-05-01-org-id-policy-fix-design.md`
---
## 前置条件
- [ ] **Step 0: 确认分支与编译环境**
```bash
git checkout -b fix/org-id-policy-granularity
cd maven-cw-elevator-application && mvn formatter:validate -Dformatter-maven-plugin.version=2.16.0
```
期望: formatter 校验通过。
---
### Task 1: DDL — 策略表结构变更
**Files:**
- Create: `docs/sql/tenant_visitor_floor_policy_v2.sql`
- [ ] **Step 1: 编写 DDL 脚本**
```sql
-- 租户访客楼层策略:org_id 粒度修复
-- 执行顺序:先 DDL → 数据迁移(Task 5)→ 发应用包
-- 回滚:DROP INDEX uk_org_building, DROP COLUMN org_id, ADD UNIQUE KEY uk_biz_building (business_id, building_id)
USE `cw-elevator-application`;
-- 1. 新增 org_id 列
ALTER TABLE tenant_visitor_floor_policy
ADD COLUMN org_id VARCHAR(32) NULL COMMENT '组织节点ID(cw_is_organization.ID)'
AFTER business_id;
-- 2. 替换唯一约束(business_id → org_id
ALTER TABLE tenant_visitor_floor_policy
DROP INDEX uk_biz_building,
ADD UNIQUE KEY uk_org_building (org_id, building_id);
-- 3. 标记 business_id 为废弃
ALTER TABLE tenant_visitor_floor_policy
MODIFY COLUMN business_id VARCHAR(64) NULL COMMENT 'DEPRECATED: 已废弃,以 org_id 为准';
-- 验证
SELECT COLUMN_NAME, COLUMN_KEY, COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'cw-elevator-application'
AND TABLE_NAME = 'tenant_visitor_floor_policy'
ORDER BY ORDINAL_POSITION;
```
- [ ] **Step 2: 在开发库执行 DDL**
```bash
mysql -h 192.168.3.12 -P 3307 -u root -p123456 cw-elevator-application < docs/sql/tenant_visitor_floor_policy_v2.sql
```
期望: 无错误,`org_id` 列存在,`uk_org_building` 索引存在,`uk_biz_building` 已删除。
- [ ] **Step 3: 提交**
```bash
git add docs/sql/tenant_visitor_floor_policy_v2.sql
git commit -m "feat: add org_id column and uk_org_building constraint to tenant_visitor_floor_policy"
```
---
### Task 2: DTO — 新增 orgId 字段
**Files:**
- Modify: `maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/dto/TenantVisitorFloorPolicyDto.java`
- [ ] **Step 1: 添加 orgId 字段 + getter/setter**
`businessId` 的 setter 之后插入:
```java
// 新增字段
private String orgId;
public String getOrgId() {
return orgId;
}
public void setOrgId(String orgId) {
this.orgId = orgId;
}
```
> 注意:`businessId` 字段保留不删,兼容旧序列化。
- [ ] **Step 2: 验证编译**
```bash
cd maven-cw-elevator-application && mvn compile -pl cw-elevator-application-data -am -DskipTests
```
期望: BUILD SUCCESS。
- [ ] **Step 3: 提交**
```bash
git add maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/dto/TenantVisitorFloorPolicyDto.java
git commit -m "feat: add orgId field to TenantVisitorFloorPolicyDto"
```
---
### Task 3: Mapper — SQL 切换 business_id → org_id
**Files:**
- Modify: `maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/mapper/TenantVisitorFloorPolicyMapper.xml`
- Modify: `maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/mapper/TenantVisitorFloorPolicyMapper.java`
- [ ] **Step 1: 修改 Mapper XML — WHERE 条件 + 映射**
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.cloudwalk.elevator.person.mapper.TenantVisitorFloorPolicyMapper">
<select id="selectEnabledByOrgId" resultType="cn.cloudwalk.elevator.person.dto.TenantVisitorFloorPolicyDto">
SELECT id,
org_id AS orgId,
policy_type AS policyType,
allow_zone_ids AS allowZoneIds,
building_id AS buildingId,
enabled AS enabled,
policy_version AS policyVersion
FROM tenant_visitor_floor_policy
WHERE org_id = #{orgId,jdbcType=VARCHAR}
AND enabled = 1
AND policy_type = 'INTERSECT_ALLOWLIST'
AND (building_id IS NULL OR building_id = '')
ORDER BY updated_at DESC, policy_version DESC
LIMIT 1
</select>
<!-- 旧方法保留作历史参考(可选删除)
<select id="selectEnabledTenantDefault" resultType="...">
... business_id ...
</select>
-->
</mapper>
```
- [ ] **Step 2: 修改 Mapper 接口**
```java
package cn.cloudwalk.elevator.person.mapper;
import cn.cloudwalk.elevator.person.dto.TenantVisitorFloorPolicyDto;
import org.apache.ibatis.annotations.Param;
public interface TenantVisitorFloorPolicyMapper {
/**
* 按组织节点 ID 查询启用中的 INTERSECT_ALLOWLIST 策略(building_id 为空)。
*/
TenantVisitorFloorPolicyDto selectEnabledByOrgId(@Param("orgId") String orgId);
// 旧方法(废弃,保留以兼容编译)
// TenantVisitorFloorPolicyDto selectEnabledTenantDefault(@Param("businessId") String businessId);
}
```
- [ ] **Step 3: 验证编译**
```bash
cd maven-cw-elevator-application && mvn compile -pl cw-elevator-application-data -am -DskipTests
```
期望: BUILD SUCCESS。
- [ ] **Step 4: 提交**
```bash
git add maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/mapper/TenantVisitorFloorPolicyMapper.xml
git add maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/mapper/TenantVisitorFloorPolicyMapper.java
git commit -m "feat: change policy query from business_id to org_id in TenantVisitorFloorPolicyMapper"
```
---
### Task 4: DAO — 接口与实现切换
**Files:**
- Modify: `maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/dao/TenantVisitorFloorPolicyDao.java`
- Modify: `maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/impl/TenantVisitorFloorPolicyDaoImpl.java`
- [ ] **Step 1: 修改 DAO 接口**
```java
package cn.cloudwalk.elevator.person.dao;
import cn.cloudwalk.elevator.person.dto.TenantVisitorFloorPolicyDto;
public interface TenantVisitorFloorPolicyDao {
/**
* 按组织节点 ID 查询启用中的 INTERSECT_ALLOWLIST 策略(building_id 为空)。
*
* @param orgId 组织节点 IDcw_is_organization.ID
* @return 无配置时 null
*/
TenantVisitorFloorPolicyDto selectEnabledByOrgId(String orgId);
// 旧方法(废弃)
// TenantVisitorFloorPolicyDto selectEnabledTenantDefault(String businessId);
}
```
- [ ] **Step 2: 修改 DAO 实现**
```java
package cn.cloudwalk.elevator.person.impl;
import cn.cloudwalk.elevator.person.dao.TenantVisitorFloorPolicyDao;
import cn.cloudwalk.elevator.person.dto.TenantVisitorFloorPolicyDto;
import cn.cloudwalk.elevator.person.mapper.TenantVisitorFloorPolicyMapper;
import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
@Repository
public class TenantVisitorFloorPolicyDaoImpl implements TenantVisitorFloorPolicyDao {
@Resource
private TenantVisitorFloorPolicyMapper tenantVisitorFloorPolicyMapper;
@Override
public TenantVisitorFloorPolicyDto selectEnabledByOrgId(String orgId) {
return this.tenantVisitorFloorPolicyMapper.selectEnabledByOrgId(orgId);
}
}
```
- [ ] **Step 3: 验证编译**
```bash
cd maven-cw-elevator-application && mvn compile -pl cw-elevator-application-data -am -DskipTests
```
期望: BUILD SUCCESS。
- [ ] **Step 4: 提交**
```bash
git add maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/dao/TenantVisitorFloorPolicyDao.java
git add maven-cw-elevator-application/cw-elevator-application-data/src/main/java/cn/cloudwalk/elevator/person/impl/TenantVisitorFloorPolicyDaoImpl.java
git commit -m "feat: update DAO interface and impl to use org_id query"
```
---
### Task 5: Service — addVisitor 核心逻辑重写
**Files:**
- Modify: `maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/person/impl/PersonRuleServiceImpl.java`
这是改动最大的文件。分 3 个子步骤。
- [ ] **Step 1: 重写 addVisitor 方法(第 174-275 行)**
完整替换:
```java
@CloudwalkParamsValidate
public CloudwalkResult<Boolean> addVisitor(AcsPersonAddVisitorParam param, CloudwalkCallContext context)
throws ServiceException {
this.logger.info("根据被访人添加访客派梯权限开始,AcsPersonAddVisitorParam=[{}], CloudwalkCallContext=[{}]",
JSONObject.toJSONString(param), JSONObject.toJSONString(context));
try {
// ===== Step 1: 获取被访人信息(UC-01/02 都需要) =====
PersonDetailParam detailParam = new PersonDetailParam();
detailParam.setId(param.getPersonId());
detailParam.setBusinessId(context.getCompany().getCompanyId());
CloudwalkResult<PersonResult> detail = this.personService.detail(detailParam, context);
if (detail == null || !detail.isSuccess()) {
String code = detail != null ? detail.getCode() : "76260531";
String msg = detail != null ? detail.getMessage() : getMessage("76260531");
return CloudwalkResult.fail(code, msg);
}
PersonResult personResult = (PersonResult) detail.getData();
if (personResult == null) {
return CloudwalkResult.fail("76260531", getMessage("76260531"));
}
List<String> hostFloors = personResult.getFloorList();
if (CollectionUtils.isEmpty(hostFloors)) {
return CloudwalkResult.fail("76260531", getMessage("76260531"));
}
// ===== Step 2: 按 org_id 查找策略 =====
TenantVisitorFloorPolicyDto policy = findPolicyByOrgIds(personResult.getOrganizationIds());
// ===== Step 3: 确定生效楼层(二选一,不求交) =====
List<String> effectiveFloors;
boolean callerProvidedFloors = !CollectionUtils.isEmpty(param.getFloorIds());
if (policy != null) {
// 有策略:直接用 allow,忽略调用方 floorIds
effectiveFloors = resolveEffectiveFloors(
callerProvidedFloors ? param.getFloorIds() : hostFloors,
hostFloors, policy, param.getPersonId());
} else {
// 无策略:用调用方 floorIds 或 hostFloors
effectiveFloors = callerProvidedFloors ? param.getFloorIds() : hostFloors;
if (callerProvidedFloors) {
// UC-02 软校验:记录不在 hostFloors 中的楼层
Set<String> hostSet = new HashSet<>(hostFloors);
List<String> outliers = param.getFloorIds().stream()
.filter(f -> !hostSet.contains(f))
.collect(Collectors.toList());
if (!outliers.isEmpty()) {
this.logger.warn("UC-02 传入非被访人授权楼层 businessId={} personId={} outliers={}",
context.getCompany().getCompanyId(), param.getPersonId(), outliers);
}
}
}
if (CollectionUtils.isEmpty(effectiveFloors)) {
return CloudwalkResult.fail("76260531", getMessage("76260531"));
}
param.setFloorIds(effectiveFloors);
// ===== Step 4: 落库(不变) =====
ZoneQueryParam zoneQueryParam = new ZoneQueryParam();
zoneQueryParam.setId(param.getFloorIds().get(0));
zoneQueryParam.setRowsOfPage(10);
zoneQueryParam.setCurrentPage(1);
CloudwalkResult<CloudwalkPageAble<ZoneResult>> zonePage = this.zoneService.page(zoneQueryParam, context);
List<ZoneResult> zoneResults = (List<ZoneResult>) ((CloudwalkPageAble) zonePage.getData()).getDatas();
String imageStoreId =
this.deviceImageStoreDao.getByBuildingId(((ZoneResult) zoneResults.get(0)).getParentId());
List<ImageRuleRefAddDto> insertList = new ArrayList<>();
for (String floorId : param.getFloorIds()) {
ImageRuleRefResultDto defaultRule = this.imageRuleRefDao.getDefaultByZoneId(floorId);
ImageRuleRefAddDto addDto = new ImageRuleRefAddDto();
addDto.setId(genUUID());
addDto.setBusinessId(context.getCompany().getCompanyId());
addDto.setPersonId(param.getVisitorId());
addDto.setParentRule(defaultRule.getId());
addDto.setName(defaultRule.getName());
addDto.setZoneId(defaultRule.getZoneId());
addDto.setZoneName(defaultRule.getZoneName());
addDto.setCreateTime(Long.valueOf(System.currentTimeMillis()));
addDto.setLastUpdateTime(Long.valueOf(System.currentTimeMillis()));
addDto.setPersonDelete(Integer.valueOf(0));
insertList.add(addDto);
}
this.logger.info("访客添加派梯权限开始,数据为=[{}]", JSONObject.toJSONString(insertList));
if (!CollectionUtils.isEmpty(insertList)) {
this.imageRuleRefDao.insertList(insertList);
}
ImageStorePersonBindParam imageStorePersonBindParam = new ImageStorePersonBindParam();
imageStorePersonBindParam.setImageStoreId(imageStoreId);
imageStorePersonBindParam.setPersonIds(Collections.singletonList(param.getVisitorId()));
imageStorePersonBindParam.setNullDateIsLongTerm(Boolean.valueOf(true));
imageStorePersonBindParam.setExpiryBeginDate(param.getBegVisitorTime());
imageStorePersonBindParam.setExpiryEndDate(param.getEndVisitorTime());
this.logger.info("远程调用绑定人员图库开始,imageStorePersonBindParam=[{}], CloudwalkCallContext=[{}]",
JSONObject.toJSONString(imageStorePersonBindParam), JSONObject.toJSONString(context));
CloudwalkResult<ImgStoreBatchBindPersonResult> bindResult =
this.imageStorePersonService.batchBind(imageStorePersonBindParam, context);
if (!bindResult.isSuccess()) {
this.logger.error("远程调用绑定人员图库异常,原因:[{}],失败人员id:[{}]", bindResult.getMessage(), param.getVisitorId());
return CloudwalkResult.fail(bindResult.getCode(), bindResult.getMessage());
}
UpdateGroupPersonRefParam refParam = new UpdateGroupPersonRefParam();
refParam.setBusinessId(context.getCompany().getCompanyId());
refParam.setPersonIds(Collections.singletonList(param.getVisitorId()));
refParam.setImageStoreId(imageStoreId);
this.imageStorePersonService.updateGroupPersonRef(refParam, context);
} catch (ServiceException e) {
throw e;
} catch (Exception e) {
this.logger.error("根据被访人添加访客派梯权限失败,原因:[{}]", e);
throw new ServiceException("76260530", getMessage("76260530"));
}
return CloudwalkResult.success(Boolean.valueOf(true));
}
```
- [ ] **Step 2: 添加两个新辅助方法 + 修改 W2(JSON 日志升级)**
`addVisitor` 方法之后插入:
```java
/**
* 按 org_id 查找策略,遍历 organizationIds 取第一个命中。
*/
private TenantVisitorFloorPolicyDto findPolicyByOrgIds(List<String> orgIds) {
if (CollectionUtils.isEmpty(orgIds)) return null;
for (String orgId : orgIds) {
TenantVisitorFloorPolicyDto p = this.tenantVisitorFloorPolicyDao.selectEnabledByOrgId(orgId);
if (p != null && p.getEnabled() != null && p.getEnabled().intValue() == 1) {
List<String> allow = parseAllowZoneIds(p.getAllowZoneIds());
if (!CollectionUtils.isEmpty(allow)) return p;
}
}
return null;
}
/**
* 二选一:用 allow 替换 fallbackFloors。
* 约束:allow 必须是 hostFloors 的子集,否则拒绝(76260533)。
*/
private List<String> resolveEffectiveFloors(
List<String> fallbackFloorsUnused, List<String> hostFloors,
TenantVisitorFloorPolicyDto policy, String personId) {
List<String> allow = parseAllowZoneIds(policy.getAllowZoneIds());
if (CollectionUtils.isEmpty(allow)) return fallbackFloorsUnused;
// 安全校验:allow 中每个值必须在 hostFloors 中存在
Set<String> hostSet = new HashSet<>(hostFloors);
List<String> unknownAllow = allow.stream()
.filter(a -> !hostSet.contains(a))
.collect(Collectors.toList());
if (!unknownAllow.isEmpty()) {
this.logger.error("策略配置错误:allow 包含不在被访人 floorList 中的 zoneId"
+ "orgId={} policyId={} personId={} unknownAllow={} hostFloors={}",
policy.getOrgId(), policy.getId(), personId, unknownAllow, hostFloors);
throw new ServiceException("76260533",
"策略配置了被访人无权访问的楼层,请联系管理员");
}
this.logger.info("策略生效 orgId={} policyId={} v={} allowSize={} hostSize={}",
policy.getOrgId(), policy.getId(), policy.getPolicyVersion(),
allow.size(), hostFloors.size());
return allow;
}
```
同时修改 `parseAllowZoneIds` 的 catch 块(W2 修复):
```java
// 旧代码:
// this.logger.warn("allow_zone_ids JSON 无效,按无策略处理: {}", e.getMessage());
// 新代码:
this.logger.error("allow_zone_ids JSON 无效,策略失效!policyId={} raw={}",
"policy.id", json, e); // 注意:此处无法获取 policy.id,改用实际可用字段
```
> 实际实现时,`parseAllowZoneIds` 不持有 `policyId`,可以在 `resolveEffectiveFloors` 中调用 `parseAllowZoneIds` 之前先做 null 检查,将 ERROR 日志放在调用处:
```java
private List<String> resolveEffectiveFloors(...) {
String rawJson = policy.getAllowZoneIds();
List<String> allow = parseAllowZoneIds(rawJson);
if (CollectionUtils.isEmpty(allow)) {
if (!StringUtils.isBlank(rawJson)) {
this.logger.error("allow_zone_ids JSON 无效或为空,策略失效!orgId={} policyId={} raw={}",
policy.getOrgId(), policy.getId(), rawJson);
}
return fallbackFloorsUnused;
}
// ... 后续校验
}
```
- [ ] **Step 3: 删除旧辅助方法 `intersectPreserveHostOrder`(不再需要)**
该方法已被 `resolveEffectiveFloors` 替代,可删除或保留(无调用方即可)。
- [ ] **Step 4: 验证编译**
```bash
cd maven-cw-elevator-application && mvn compile -DskipTests
```
期望: BUILD SUCCESS。
- [ ] **Step 5: 提交**
```bash
git add maven-cw-elevator-application/cw-elevator-application-service/src/main/java/cn/cloudwalk/elevator/person/impl/PersonRuleServiceImpl.java
git commit -m "feat: rewrite addVisitor with org_id policy lookup and either-or semantics
- Replace business_id policy key with org_id from PersonResult.getOrganizationIds()
- Change from intersection (floorList ∩ allow) to either-or (policy? allow : floorList)
- Add resolveEffectiveFloors with allow ⊆ floorList safety check (76260533)
- UC-02 now also checks policy (policy takes precedence over caller floorIds)
- Upgrade JSON parse failure log from WARN to ERROR
- Remove unused intersectPreserveHostOrder method"
```
---
### Task 6: 错误码注册(76260533
**Files:**
- Check: `maven-cw-elevator-application/cw-elevator-application-starter/src/main/resources/access-control.properties`(或对应的 messages 资源文件)
- [ ] **Step 1: 查找错误码资源文件**
```bash
grep -rn "76260531\|76260532" --include="*.properties" --include="*.xml" maven-cw-elevator-application/
```
- [ ] **Step 2: 在对应的 messages 文件中新增**
```properties
76260533=策略配置了被访人无权访问的楼层,请联系管理员
```
- [ ] **Step 3: 提交**
```bash
git add <错误码资源文件路径>
git commit -m "feat: add error code 76260533 for policy-host floor mismatch"
```
---
### Task 7: 数据迁移 SQL
**Files:**
- Create: `docs/sql/tenant_visitor_floor_policy_migrate_org_id.sql`
- [ ] **Step 1: 编写迁移脚本**
```sql
-- 租户访客楼层策略:business_id → org_id 数据迁移
-- 前提:DDLTask 1)已执行
-- 执行方式:人工确认 org_id 对应关系后逐行执行
USE cw-elevator-application;
-- 1. 列出所有公司级组织节点(供确认)
-- 在 component-organization 库执行:
-- SELECT o.ID, o.NAME, o.PARENT_ID
-- FROM `component-organization`.cw_is_organization o
-- WHERE o.BUSINESS_ID = '2524639890ba4f2cba9ba1a4eeaa4015'
-- AND o.IS_DEL = 0
-- ORDER BY o.NAME;
-- 2. 为现有策略行填入 org_id(示例:广发基金)
-- 请先确认 NAME 匹配正确
UPDATE tenant_visitor_floor_policy
SET org_id = '<广发基金的 org_id>',
business_id = NULL -- 可选:标记 business_id 已废弃
WHERE id = 'gf_vstr_policy_guangfa_fund_001x';
-- 3. 为其他公司新增策略行(模板)
-- INSERT INTO tenant_visitor_floor_policy
-- (id, org_id, policy_type, allow_zone_ids, building_id, enabled, policy_version, remark, created_at, updated_at)
-- VALUES
-- (REPLACE(UUID(),'-',''), '<公司 org_id>', 'INTERSECT_ALLOWLIST',
-- '["<zone_id>"]', NULL, 1, 1, '', UNIX_TIMESTAMP(NOW())*1000, UNIX_TIMESTAMP(NOW())*1000);
-- 4. 验证迁移结果
SELECT id, org_id, business_id, policy_type, allow_zone_ids, enabled
FROM tenant_visitor_floor_policy
ORDER BY org_id;
```
- [ ] **Step 2: 提交**
```bash
git add docs/sql/tenant_visitor_floor_policy_migrate_org_id.sql
git commit -m "docs: add org_id data migration SQL for tenant_visitor_floor_policy"
```
---
### Task 8: 构建验证 + 发布准备
- [ ] **Step 1: 全量构建**
```bash
cd maven-cw-elevator-application && mvn clean install -DskipTests
```
期望: BUILD SUCCESS,无编译错误。
- [ ] **Step 2: formatter 校验**
```bash
cd maven-cw-elevator-application && mvn formatter:validate -Dformatter-maven-plugin.version=2.16.0
```
期望: 无格式化违规。
- [ ] **Step 3: 生成发布包**
```bash
bash scripts/release-cw-elevator-application.sh 2.0.10
```
- [ ] **Step 4: 提交发布包**
```bash
git add releases/
git commit -m "release: cw-elevator-application v2.0.10 with org_id policy fix"
```
---
## 回滚方案
| 步骤 | 操作 |
|------|------|
| 1. 回滚应用包 | 部署旧版本 JAR(用 `business_id` 查询的代码) |
| 2. 回滚 DDL(可选) | `DROP INDEX uk_org_building; ALTER TABLE ... DROP COLUMN org_id; ADD UNIQUE KEY uk_biz_building (business_id, building_id);` |
| 3. 恢复数据(可选) | `UPDATE tenant_visitor_floor_policy SET business_id = '252463...' WHERE org_id IS NOT NULL;` |
> DDL 回滚不影响旧代码行为(旧代码不查 `org_id` 列)。
---
## 发布顺序(生产环境)
```
1. DDL 上线(Task 1) → 表结构变更,不影响线上行为
2. 数据迁移(Task 7) → 运维手工填 org_id
3. 发应用包(Task 8) → 代码切换到 org_id 查询
4. 验证(Task 8 后) → 抽样确认策略生效
```
---
## 完成检查清单
- [ ] DDL 在开发库执行成功
- [ ] `TenantVisitorFloorPolicyDto``orgId` 字段
- [ ] Mapper XML/Java 使用 `org_id` 查询
- [ ] DAO 接口/实现已切换
- [ ] `addVisitor` 使用 `findPolicyByOrgIds` + `resolveEffectiveFloors`
- [ ] W2 修复:JSON 解析失败打 ERROR 而非 WARN
- [ ] 错误码 76260533 已在资源文件注册
- [ ] 数据迁移 SQL 已编写
- [ ] `mvn clean install` 通过
- [ ] `mvn formatter:validate` 通过
@@ -0,0 +1,544 @@
# org_id 策略修复验证脚本 — 实施计划
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 编写 Python 无鉴权验证脚本 `verify_org_policy_fix.py`,自动准备测试数据、执行 7 个用例、清理数据、输出 JSON 报告。
**Architecture:** 单脚本 4 个 PhasePhase0 健康检查 → Phase1 MySQL 准备数据 → Phase2 HTTP 逐用例调用 add/visitor + passRule/image → Phase3 MySQL 清理 → Phase4 输出 JSON。复用现有 `quick_verify_visitor_floor_policy.py` 的 noauth 调用模式。
**Tech Stack:** Python 3.8+, `requests`, `pymysql`, JSON
**Spec:** `docs/superpowers/specs/2026-05-01-org-policy-verify-design.md`
---
### Task 1: 脚本骨架与配置
**Files:**
- Create: `maven-cw-elevator-application/tools/visitor_floor_verification/scripts/verify_org_policy_fix.py`
- [ ] **Step 1: 写入脚本骨架**
```python
#!/usr/bin/env python3
"""org_id 策略修复 — 无鉴权验证脚本"""
import argparse
import json
import sys
import time
from datetime import datetime, timedelta
from typing import Any, Dict, List, Optional
import pymysql
import requests
# ===== 配置常量 =====
DB_CONFIG = {
"host": "192.168.3.12",
"port": 3307,
"user": "root",
"password": "123456",
"db_org": "component-organization",
"db_elevator": "cw-elevator-application",
}
BUSINESS_ID = "2524639890ba4f2cba9ba1a4eeaa4015"
# 测试用组织节点
ORG_1403 = "72fb65ec5de94201b909a98b8bae1892"
ORG_1405 = "2095de3d541f44eba686c78fda68336f"
ORG_GUANGFA = "488b8ad049bb43408a6fbcc50bcb89ac"
# 被访人
HOST_CHEN = "1060601019894960128" # 陈国辉 (1403+星中心)
HOST_WANG = "1090779433129840640" # 王姣 (1405)
HOST_QIN = "1072908835884208128" # 秦夏 (广发基金)
# 访客(测试专用号段)
VISITOR_IDS = [
"9199000100000000001", "9199000100000000002", "9199000100000000003",
"9199000100000000004", "9199000100000000005", "9199000100000000006",
"9199000100000000007",
]
ZONE_28F = "605560545117995008"
ZONE_99F = "605560540000000000" # 不存在,用于 T3
OK_CODES = {"0", "200"}
TEST_CASES = [
{
"id": "T1", "name": "有策略→allow替换floorList",
"host_id": HOST_CHEN, "visitor_id": VISITOR_IDS[0],
"policy_id": "policy_t1_1403", "expected_pass": True,
"expected_floors": [ZONE_28F],
},
{
"id": "T2", "name": "无策略→floorList",
"host_id": HOST_WANG, "visitor_id": VISITOR_IDS[1],
"policy_id": None, "expected_pass": True,
"expected_floors": None, # 不做楼层精确比对,只验证成功
},
{
"id": "T3", "name": "allow含无效zone→拒绝",
"host_id": HOST_CHEN, "visitor_id": VISITOR_IDS[2],
"policy_id": "policy_t3_invalid", "expected_pass": False,
"expected_code": "76260533",
},
{
"id": "T4", "name": "多组织命中第一个策略",
"host_id": HOST_CHEN, "visitor_id": VISITOR_IDS[3],
"policy_id": "policy_t1_1403", "expected_pass": True,
"expected_floors": [ZONE_28F],
},
{
"id": "T5", "name": "enabled=0等同无策略",
"host_id": HOST_CHEN, "visitor_id": VISITOR_IDS[4],
"policy_id": "policy_t5_disabled", "expected_pass": True,
"expected_floors": None,
},
{
"id": "T6", "name": "UC-02策略优先",
"host_id": HOST_CHEN, "visitor_id": VISITOR_IDS[5],
"policy_id": "policy_t1_1403", "expected_pass": True,
"expected_floors": [ZONE_28F],
"floor_ids_override": ["605560541473144832"], # 传6F,策略应覆盖为28F
},
{
"id": "T7", "name": "广发基金迁移验证",
"host_id": HOST_QIN, "visitor_id": VISITOR_IDS[6],
"policy_id": "gf_vstr_policy_guangfa_fund_001x", "expected_pass": True,
"expected_floors": [ZONE_28F],
},
]
def parse_args():
p = argparse.ArgumentParser(description="org_id 策略修复验证")
p.add_argument("--elevator-base-url", default="http://127.0.0.1:18081")
p.add_argument("--skip-db", action="store_true", help="跳过数据库准备/清理")
return p.parse_args()
if __name__ == "__main__":
args = parse_args()
print(f"elevator: {args.elevator_base_url}")
print(f"skip-db: {args.skip_db}")
print(f"cases: {len(TEST_CASES)}")
```
- [ ] **Step 2: 验证导入可用**
```bash
cd maven-cw-elevator-application/tools/visitor_floor_verification
python3 -c "import requests; import pymysql; print('OK')"
```
期望: `OK`
- [ ] **Step 3: 提交**
```bash
git add maven-cw-elevator-application/tools/visitor_floor_verification/scripts/verify_org_policy_fix.py
git commit -m "test: scaffold verify_org_policy_fix.py with config and test cases"
```
---
### Task 2: Phase 0 — 健康检查 + Phase 1 — 数据准备/清理
**Files:**
- Modify: `verify_org_policy_fix.py` (追加函数)
- [ ] **Step 1: 添加健康检查函数**
```python
def health_check(base_url: str) -> bool:
"""GET /actuator/health"""
try:
r = requests.get(f"{base_url}/actuator/health", timeout=10)
ok = r.status_code == 200
print(f"[HEALTH] {base_url} -> {r.status_code} {'OK' if ok else 'FAIL'}")
return ok
except Exception as e:
print(f"[HEALTH] {base_url} -> ERROR: {e}")
return False
```
- [ ] **Step 2: 添加数据库连接函数**
```python
def get_db_conn():
return pymysql.connect(
host=DB_CONFIG["host"], port=DB_CONFIG["port"],
user=DB_CONFIG["user"], password=DB_CONFIG["password"],
database=DB_CONFIG["db_elevator"],
charset="utf8mb4", autocommit=True,
)
def execute_sql(sql: str, params=None):
conn = get_db_conn()
try:
with conn.cursor() as cur:
cur.execute(sql, params)
finally:
conn.close()
```
- [ ] **Step 3: 添加数据准备函数**
```python
def prepare_test_data():
"""INSERT 测试策略 + UPDATE 广发基金 org_id"""
policies = [
("policy_t1_1403", ORG_1403, f'["{ZONE_28F}"]', 1),
("policy_t3_invalid", ORG_1403, f'["{ZONE_28F}","{ZONE_99F}"]', 1),
("policy_t5_disabled", ORG_1403, f'["{ZONE_28F}"]', 0),
]
for pid, oid, zones_json, enabled in policies:
execute_sql("DELETE FROM tenant_visitor_floor_policy WHERE id=%s", (pid,))
execute_sql(
"INSERT INTO tenant_visitor_floor_policy "
"(id, org_id, business_id, policy_type, allow_zone_ids, building_id, enabled, policy_version, created_at, updated_at) "
"VALUES (%s, %s, NULL, 'INTERSECT_ALLOWLIST', %s, NULL, %s, 1, UNIX_TIMESTAMP(NOW())*1000, UNIX_TIMESTAMP(NOW())*1000)",
(pid, oid, zones_json, enabled),
)
print(f" INSERT policy {pid} org={oid} enabled={enabled}")
# 广发基金迁移
execute_sql(
"UPDATE tenant_visitor_floor_policy SET org_id=%s WHERE id='gf_vstr_policy_guangfa_fund_001x'",
(ORG_GUANGFA,),
)
print(f" UPDATE 广发基金 org_id={ORG_GUANGFA}")
```
- [ ] **Step 4: 添加数据清理函数**
```python
def cleanup_test_data():
"""DELETE 测试策略 + 回滚广发基金 org_id"""
for pid in ["policy_t1_1403", "policy_t3_invalid", "policy_t5_disabled"]:
execute_sql("DELETE FROM tenant_visitor_floor_policy WHERE id=%s", (pid,))
print(f" DELETE {pid}")
execute_sql(
"UPDATE tenant_visitor_floor_policy SET org_id=NULL WHERE id='gf_vstr_policy_guangfa_fund_001x'"
)
print(" UPDATE 广发基金 org_id=NULL (回滚)")
```
- [ ] **Step 5: 测试 DB 函数**
```bash
python3 -c "
import verify_org_policy_fix as v
v.prepare_test_data()
print('prepared')
v.cleanup_test_data()
print('cleaned')
"
```
期望: 看到 INSERT/DELETE 输出,无异常。
- [ ] **Step 6: 提交**
```bash
git add verify_org_policy_fix.py
git commit -m "test: add Phase 0-1: health check + DB prepare/cleanup"
```
---
### Task 3: Phase 2 — noauth HTTP 调用 + 回读验证
**Files:**
- Modify: `verify_org_policy_fix.py` (追加函数)
- [ ] **Step 1: 添加 noauth 请求头构建**
```python
def build_noauth_headers() -> Dict[str, str]:
return {
"Content-Type": "application/json",
"businessid": BUSINESS_ID,
}
def now_ms() -> int:
return int(time.time() * 1000)
def tomorrow_ms() -> int:
return int((time.time() + 86400) * 1000)
```
- [ ] **Step 2: 添加 add_visitor 调用函数**
```python
def call_add_visitor(base_url: str, person_id: str, visitor_id: str,
floor_ids: Optional[List[str]] = None) -> Dict[str, Any]:
"""POST /elevator/person/add/visitor"""
body = {
"personId": person_id,
"visitorId": visitor_id,
"floorIds": floor_ids if floor_ids is not None else [],
"begVisitorTime": now_ms(),
"endVisitorTime": tomorrow_ms(),
}
try:
r = requests.post(
f"{base_url}/elevator/person/add/visitor",
json=body, headers=build_noauth_headers(), timeout=30,
)
return {
"http_status": r.status_code,
"body": r.json() if r.headers.get("content-type", "").startswith("application/json") else r.text,
}
except Exception as e:
return {"http_status": 0, "error": str(e)}
```
- [ ] **Step 3: 添加 passRule/image 回读函数**
```python
def call_passrule_image(base_url: str, visitor_id: str) -> Dict[str, Any]:
"""POST /elevator/passRule/image"""
body = {"personId": visitor_id}
try:
r = requests.post(
f"{base_url}/elevator/passRule/image",
json=body, headers=build_noauth_headers(), timeout=30,
)
return {
"http_status": r.status_code,
"body": r.json() if r.headers.get("content-type", "").startswith("application/json") else r.text,
}
except Exception as e:
return {"http_status": 0, "error": str(e)}
def extract_zone_ids(passrule_response: Dict) -> List[str]:
"""从 passRule/image 响应中提取 zoneId 列表"""
try:
datas = passrule_response["body"]["data"]["datas"]
return [d["zoneId"] for d in datas if "zoneId" in d]
except (KeyError, TypeError):
return []
```
- [ ] **Step 4: 测试 HTTP 调用(需 V2 运行中)**
```bash
python3 -c "
import verify_org_policy_fix as v
r = v.call_add_visitor('http://127.0.0.1:18081', '1060601019894960128', '9199000100000000001')
print(json.dumps(r, indent=2, ensure_ascii=False))
"
```
期望: HTTP 200,响应中包含 `success` 字段。
- [ ] **Step 5: 提交**
```bash
git add verify_org_policy_fix.py
git commit -m "test: add Phase 2: noauth HTTP calls + passRule/image extraction"
```
---
### Task 4: Phase 2 — 用例执行器 + Phase 3-4 — 报告
**Files:**
- Modify: `verify_org_policy_fix.py` (追加函数 + main)
- [ ] **Step 1: 添加用例执行函数**
```python
def run_case(base_url: str, case: Dict[str, Any]) -> Dict[str, Any]:
"""执行单个用例,返回结果 dict"""
cid = case["id"]
print(f"\n[{cid}] {case['name']}")
floor_ids = case.get("floor_ids_override")
# Step A: 确保正确的策略行生效
pid = case.get("policy_id")
if pid:
# T3: 需要切换到 policy_t3_invalid(先停用 policy_t1_1403
if cid == "T3":
execute_sql("DELETE FROM tenant_visitor_floor_policy WHERE id='policy_t1_1403'")
print(f" [DB] 临时删除 policy_t1_1403 以启用 T3 策略")
result = {"id": cid, "name": case["name"]}
# Step B: add/visitor
r = call_add_visitor(base_url, case["host_id"], case["visitor_id"], floor_ids)
result["add_visitor"] = {
"http_status": r.get("http_status"),
"success": r.get("body", {}).get("success") if isinstance(r.get("body"), dict) else None,
"code": r.get("body", {}).get("code") if isinstance(r.get("body"), dict) else None,
"message": r.get("body", {}).get("message") if isinstance(r.get("body"), dict) else None,
"error": r.get("error"),
}
av = result["add_visitor"]
business_ok = av["http_status"] == 200 and str(av.get("code", "")) in OK_CODES
# Step C: 判定
if case["expected_pass"]:
if business_ok:
# 回读楼层
pr = call_passrule_image(base_url, case["visitor_id"])
actual_zones = extract_zone_ids(pr)
result["passrule_image"] = {"zones": actual_zones}
expected = case.get("expected_floors")
if expected is not None:
match = set(actual_zones) == set(expected)
result["floor_match"] = match
result["passed"] = match
print(f" add/visitor OK, floors: actual={actual_zones} expected={expected} match={match}")
else:
result["passed"] = True
print(f" add/visitor OK, floors={actual_zones} (no strict check)")
else:
result["passed"] = False
print(f" expected success but got code={av.get('code')} msg={av.get('message')}")
else:
# 期望失败
expected_code = case.get("expected_code")
actual_code = str(av.get("code", ""))
result["passed"] = (not business_ok) and (actual_code == expected_code)
print(f" expected fail code={expected_code} actual={actual_code} passed={result['passed']}")
# Step D: 恢复策略(T3 执行后)
if cid == "T3":
execute_sql(
"INSERT INTO tenant_visitor_floor_policy "
"(id, org_id, business_id, policy_type, allow_zone_ids, building_id, enabled, policy_version, created_at, updated_at) "
"VALUES ('policy_t1_1403', %s, NULL, 'INTERSECT_ALLOWLIST', %s, NULL, 1, 1, UNIX_TIMESTAMP(NOW())*1000, UNIX_TIMESTAMP(NOW())*1000)",
(ORG_1403, f'["{ZONE_28F}"]'),
)
print(f" [DB] 恢复 policy_t1_1403")
return result
```
- [ ] **Step 2: 添加报告生成函数**
```python
def generate_report(results: List[Dict], base_url: str) -> Dict:
passed = sum(1 for r in results if r.get("passed"))
failed = len(results) - passed
return {
"test": "org_id policy fix verification",
"timestamp": datetime.now().isoformat(),
"elevator_url": base_url,
"mode": "noauth-probe",
"business_id": BUSINESS_ID,
"summary": {"total": len(results), "passed": passed, "failed": failed},
"results": results,
}
```
- [ ] **Step 3: 完善 main 函数**
```python
if __name__ == "__main__":
args = parse_args()
base = args.elevator_base_url.rstrip("/")
# Phase 0
if not health_check(base):
print("FATAL: elevator service not reachable")
sys.exit(1)
# Phase 1
if not args.skip_db:
print("\n=== Phase 1: prepare test data ===")
prepare_test_data()
# Phase 2
print(f"\n=== Phase 2: run {len(TEST_CASES)} cases ===")
results = []
for case in TEST_CASES:
r = run_case(base, case)
results.append(r)
# Phase 3
if not args.skip_db:
print("\n=== Phase 3: cleanup ===")
cleanup_test_data()
# Phase 4
report = generate_report(results, base)
report_path = f"report/org-policy-fix-verify-{datetime.now().strftime('%Y%m%d-%H%M%S')}.json"
import os
os.makedirs("report", exist_ok=True)
with open(report_path, "w", encoding="utf-8") as f:
json.dump(report, f, indent=2, ensure_ascii=False)
print(f"\n=== Report: {report_path} ===")
print(f"Passed: {report['summary']['passed']}/{report['summary']['total']}")
for r in results:
status = "" if r.get("passed") else ""
print(f" {status} [{r['id']}] {r['name']}")
sys.exit(0 if report["summary"]["failed"] == 0 else 1)
```
- [ ] **Step 4: 提交**
```bash
git add verify_org_policy_fix.py
git commit -m "test: add Phase 2-4: case runner + report generation + main entry"
```
---
### Task 5: 端到端运行验证
- [ ] **Step 1: 确保 V2 运行中**
```bash
curl -s http://127.0.0.1:18081/actuator/health
```
期望: `{"status":"UP"}`
- [ ] **Step 2: 执行全量验证**
```bash
cd maven-cw-elevator-application/tools/visitor_floor_verification
python3 scripts/verify_org_policy_fix.py --elevator-base-url http://127.0.0.1:18081
```
- [ ] **Step 3: 检查报告**
```bash
ls -la report/org-policy-fix-verify-*.json | tail -1
python3 -c "import json; r=json.load(open('$(ls -t report/org-policy-fix-verify-*.json | head -1)')); print(f\"{r['summary']['passed']}/{r['summary']['total']} passed\")"
```
期望: `7/7 passed`
- [ ] **Step 4: 提交报告(可选,不提交 JSON 到 git)**
```bash
git status
```
---
## 完成检查清单
- [ ] `verify_org_policy_fix.py` 存在且可导入
- [ ] Phase 0: `health_check()` 返回 True
- [ ] Phase 1: `prepare_test_data()` 无异常
- [ ] Phase 2: 7 个用例全部执行
- [ ] Phase 3: `cleanup_test_data()` 无异常
- [ ] Phase 4: JSON 报告生成,7/7 passed
- [ ] 无脱敏泄露(报告中不出现真实姓名/手机号)
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,327 @@
# V2 完整环境部署 + V1/V2 对比测试 — 实施计划
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development or superpowers:executing-plans. Steps use checkbox (`- [ ]`) syntax.
**Goal:** 搭建 V2 电梯功能测试所需的最小服务集(infra + 3 Java 服务),运行 V1/V2 API 对拍及策略差异验证。
**Architecture:** Docker 提供 Consul/Redis/Nginx,复用 MySQL 192.168.3.12:3307,按 ninca-common → component-org → elevator V2 → elevator V1 顺序启动,最终执行 pytest 对拍 + curl 策略测试。
**Tech Stack:** Bash, Docker Compose v2, JDK 8, Maven 3.9, Python 3.10 + pytest, MySQL 5.7
**关联 Spec:** `docs/superpowers/specs/2026-05-01-v2-test-env-setup-design.md`
---
## 前置状态
```bash
MySQL: 192.168.3.12:3307 root/123456 ✅
Docker: Compose v2.40.3 可用 ✅
JDK 8: /usr/lib/jvm/java-8-openjdk-amd64 ✅
部署包: 13 个 tar.gz, 7.2 GB ✅
DB 数据: 11 个库已恢复, 策略表已创建 ✅
```
---
### Task 1: 启动基础设施 (Docker Compose)
**Files:**
- Use: `scripts/test-env/docker-compose.infra.yml`
- Use: `scripts/test-env/config/env.sh`
- [ ] **Step 1: 清理旧容器并启动**
```bash
source scripts/test-env/config/env.sh
cd scripts/test-env
docker rm -f v2test-consul v2test-redis v2test-nginx 2>/dev/null || true
docker compose -f docker-compose.infra.yml down --remove-orphans 2>/dev/null || true
docker compose -f docker-compose.infra.yml up -d
sleep 5
curl -sf http://127.0.0.1:9517/v1/status/leader && echo "Consul UP" || echo "FAIL"
redis-cli -p 6380 -a '1qaz!QAZ' PING && echo "Redis UP" || echo "FAIL"
```
- [ ] **Step 2: 验证 MySQL**
```bash
mysql -h 192.168.3.12 -P 3307 -u root -p123456 -e "SELECT 1" && echo "MySQL UP"
```
---
### Task 2: 启动 ninca-common (port 33010)
**Files:**
- Create: `scripts/test-env/config/ninca-common-override.properties`
- Use: `services/ninca-common/ninca_common_01-ninca_common_backend/ninca-common-backend-V2.9.2_20210730.jar`
**关键**: ninca-common 用 ShardingSphere,需覆盖 `spring.shardingsphere.datasource.ds0.jdbc-url`
- [ ] **Step 1: 创建 ShardingSphere 覆盖配置**
```bash
source scripts/test-env/config/env.sh
cat > $TEST_ENV_DIR/config/ninca-common-override.properties << EOF
spring.shardingsphere.datasource.names=ds0
spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://$MYSQL_HOST:$MYSQL_PORT/ninca_common?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds0.username=$MYSQL_USER
spring.shardingsphere.datasource.ds0.password=$MYSQL_PASS
spring.shardingsphere.sharding.default-data-source-name=ds0
EOF
```
- [ ] **Step 2: 启动**
```bash
NC_JAR="$SERVICE_DIR/ninca-common/ninca_common_01-ninca_common_backend/ninca-common-backend-V2.9.2_20210730.jar"
nohup /usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar -Xmx1024m "$NC_JAR" \
--server.port=33010 \
--spring.config.additional-location="$TEST_ENV_DIR/config/ninca-common-override.properties" \
--spring.cloud.consul.host=$CONSUL_HOST --spring.cloud.consul.port=$CONSUL_PORT \
--spring.redis.host=$REDIS_HOST --spring.redis.port=$REDIS_PORT --spring.redis.password=$REDIS_PASS \
&> /tmp/ninca-common-plan.log &
echo "PID=$!"
sleep 30
curl -sf http://127.0.0.1:33010/health && echo " ✅" || echo " ❌"
```
- [ ] **Step 3: 如启动失败 → Python stub**
```bash
# 若 ninca-common 无法启动,创建 stub 模拟 person 属性查询
# 组件 org 的 person/detail 内部调 ninca-common,可用空响应 stub 绕过
```
---
### Task 3: 启动 component-organization (port 33011)
**Files:**
- Use: `services/component-org/.../ninca-common-component-organization-V2.9.2_20210730.jar`
- [ ] **Step 1: 确保 Quartz 表存在**
```bash
mysql -h 192.168.3.12 -P 3307 -u root -p123456 -e "
CREATE TABLE IF NOT EXISTS \`component-organization\`.QRTZ_LOCKS (
SCHED_NAME VARCHAR(120) NOT NULL, LOCK_NAME VARCHAR(40) NOT NULL,
PRIMARY KEY (SCHED_NAME, LOCK_NAME)
) ENGINE=InnoDB;" 2>/dev/null
```
- [ ] **Step 2: 启动 (带 ninca-common Ribbon 路由)**
```bash
COMP_JAR="$SERVICE_DIR/component-org/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730.jar"
nohup /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dlogging.config=/tmp/logback-comp-org.xml -jar -Xmx1024m "$COMP_JAR" \
--server.port=33011 \
--spring.datasource.url="jdbc:mysql://$MYSQL_HOST:$MYSQL_PORT/component-organization?useSSL=false&characterEncoding=utf-8" \
--spring.datasource.username=$MYSQL_USER --spring.datasource.password=$MYSQL_PASS \
--spring.cloud.consul.host=$CONSUL_HOST --spring.cloud.consul.port=$CONSUL_PORT \
--spring.redis.host=$REDIS_HOST --spring.redis.port=$REDIS_PORT --spring.redis.password=$REDIS_PASS \
--ninca-common.ribbon.listOfServers=127.0.0.1:33010 \
&> /tmp/comp-org-plan.log &
echo "PID=$!"
sleep 30
curl -sf http://127.0.0.1:17116/actuator/health | python3 -c "import sys,json;print(json.load(sys.stdin)['status'])" && echo " ✅"
```
- [ ] **Step 3: 验证 person/detail**
```bash
curl -sf -X POST http://127.0.0.1:33011/component/person/detail \
-H "Content-Type: application/json" \
-d '{"id":"1072908835884208128"}' | python3 -c "import sys,json;d=json.load(sys.stdin);print(f'code={d[\"code\"]}')"
# 预期: code=00000000 (非 53014011)
```
- [ ] **Step 4: 如果 still 53014011**
放弃启动 ninca-common,改为 Python stub 方案:
- 创建 `scripts/test-env/stub-person-service.py`
- 监听 33010,响应 `/health` 和任意 person 查询
- 重启 comp-org(它只需 ninca-common 可达,不关心响应内容)
---
### Task 4: 启动 elevator V2 (port 18081)
**Files:**
- Use: `maven-cw-elevator-application/deploy/v2-maven/cw-elevator-application-2.0.9.jar`
- [ ] **Step 1: 重启 V2 带全量 Ribbon 路由**
```bash
pkill -f "elevator.*18081" 2>/dev/null; sleep 2
source scripts/test-env/config/env.sh
DEPLOY_DIR="$REPO_ROOT/maven-cw-elevator-application/deploy/v2-maven"
V2_JAR=$(ls -t "$DEPLOY_DIR"/cw-elevator-application-*.jar | head -1)
nohup /usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar -Xmx2048m "$V2_JAR" \
--server.port=18081 --spring.redis.port=6380 --spring.redis.password='1qaz!QAZ' \
--spring.cloud.consul.host=127.0.0.1 --spring.cloud.consul.port=9517 \
--ninca-common-component-organization.ribbon.listOfServers=127.0.0.1:33011 \
--spring.config.location="$DEPLOY_DIR/" \
&> /tmp/v2-plan.log &
echo "PID=$!"
sleep 35
curl -sf http://127.0.0.1:18081/health && echo " ✅"
```
---
### Task 5: 启动 elevator V1 (port 18080)
**Files:**
- Use: `maven-cw-elevator-application/deploy/v1-legacy/cw-elevator-application-V1.0.0.20211103.jar`
- [ ] **Step 1: 启动 V1**
```bash
pkill -f "elevator.*18080" 2>/dev/null; sleep 2
source scripts/test-env/config/env.sh
V1_DIR="$REPO_ROOT/maven-cw-elevator-application/deploy/v1-legacy"
V1_JAR=$(ls -t "$V1_DIR"/cw-elevator-application-*.jar | head -1)
nohup /usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar -Xmx2048m "$V1_JAR" \
--server.port=18080 --spring.redis.port=6380 --spring.redis.password='1qaz!QAZ' \
--spring.cloud.consul.host=127.0.0.1 --spring.cloud.consul.port=9517 \
--ninca-common-component-organization.ribbon.listOfServers=127.0.0.1:33011 \
--spring.config.location="$V1_DIR/" \
&> /tmp/v1-plan.log &
echo "PID=$!"
sleep 35
curl -sf http://127.0.0.1:18080/health && echo " ✅"
```
---
### Task 6: 对拍测试
**Files:**
- Use: `maven-cw-elevator-application/tools/elevator_api_parity/`
- [ ] **Step 1: 运行全量对拍**
```bash
cd maven-cw-elevator-application/tools/elevator_api_parity
ELEVATOR_BASE_OLD=http://127.0.0.1:18080 ELEVATOR_BASE_NEW=http://127.0.0.1:18081 \
python3 -m pytest tests/ -v --tb=short -p no:allure_pytest
# 预期: 8/8 passed
```
---
### Task 7: 策略差异验证
**Files:**
- DB: `tenant_visitor_floor_policy` (广发基金 org_id=488b8ad049bb43408a6fbcc50bcb89ac)
- 人员: `1072908835884208128` (秦夏)
- [ ] **Step 1: V1 add/visitor (无策略 → floorList 全集)**
```bash
curl -s -X POST http://127.0.0.1:18080/elevator/person/add/visitor \
-H "Content-Type: application/json" \
-d '{"personId":"1072908835884208128","businessId":"2524639890ba4f2cba9ba1a4eeaa4015","visitorName":"test","phone":"13800000000"}'
# 预期: code != 76260532, 使用 floorList 全集
```
- [ ] **Step 2: V2 add/visitor (策略 → allow_zone_ids 替换)**
```bash
curl -s -X POST http://127.0.0.1:18081/elevator/person/add/visitor \
-H "Content-Type: application/json" \
-d '{"personId":"1072908835884208128","businessId":"2524639890ba4f2cba9ba1a4eeaa4015","visitorName":"test","phone":"13800000000"}'
# 预期: 策略生效 → 返回 allow_zone_ids 交集 或 floorList 全集 (V1 无策略)
```
- [ ] **Step 3: 差异判定**
```bash
# V1_CODE != V2_CODE → STRATEGY DIVERGENCE CONFIRMED
# V1_CODE == V2_CODE → policy not triggered (check comp-org person/detail)
```
---
### Task 8: 失败回退 — Python stub 方案
**如果 Task 2-3 的 Java 服务无法启动:**
**Files:**
- Create: `scripts/test-env/stub-person-service.py`
- [ ] **Step 1: 创建 stub (模拟 ninca-common + comp-org)**
```python
#!/usr/bin/env python3
"""Stub: 模拟 component-organization person/detail,返回广发基金秦夏数据"""
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
class PersonStub(BaseHTTPRequestHandler):
def do_POST(self):
body_len = int(self.headers.get('Content-Length', 0))
body = json.loads(self.rfile.read(body_len)) if body_len > 0 else {}
person_id = body.get('id', body.get('personId', 'unknown'))
if self.path in ('/health', '/actuator/health'):
self._json(200, {"status": "UP"})
elif '/person/detail' in self.path or '/component/person/detail' in self.path:
self._json(200, {
"code": "00000000", "success": True, "message": "success",
"data": {
"id": person_id, "name": "秦夏", "businessId": "2524639890ba4f2cba9ba1a4eeaa4015",
"phone": "13666667067",
"organizationIds": ["488b8ad049bb43408a6fbcc50bcb89ac"],
"floorList": ["605560541473144832", "605560541657694208"],
"labelIds": [], "labelNames": []
}
})
elif '/component/person/page' in self.path:
self._json(200, {"code": "00000000", "success": True, "data": {"datas": [], "total": 0}})
else:
self._json(200, {"code": "00000000", "success": True, "data": None})
def do_GET(self):
self._json(200, {"status": "UP"})
def _json(self, status, data):
self.send_response(status)
self.send_header('Content-Type', 'application/json;charset=utf-8')
self.end_headers()
self.wfile.write(json.dumps(data, ensure_ascii=False).encode())
HTTPServer(('127.0.0.1', 33010), PersonStub).serve_forever()
```
- [ ] **Step 2: 启动 stub 并重新配置电梯**
```bash
python3 scripts/test-env/stub-person-service.py &
echo "Stub PID=$!"
# 重新启动 elevator V2Feign 路由到 stub:33010
```
---
## 实施依赖
```
Task 1 (infra) ──→ Task 2 (ninca-common)
↓ ↘ (fail → Task 8 stub)
Task 3 (comp-org)
Task 4 (elevator V2) + Task 5 (elevator V1)
Task 6 (对拍) + Task 7 (策略差异)
```
Task 4/5 可并行;Task 6/7 可在 4/5 完成后立即执行。
@@ -0,0 +1,920 @@
# 目录结构重组 Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Restructure the monorepo directory tree — rename to kebab-case English, separate source/runtime/packages/archive, consolidate scripts, remove naming inconsistencies — while preserving all files and git history.
**Architecture:** The project spans two git repos: `源码/` (submodule, ~29K files) and the parent repo (星中心/, 部署包/, data_backup/, etc.). Each task specifies which repo it operates in. Cross-repo moves use `mv` + separate `git add`/`git rm` in each repo. No files are deleted — outdated content is relocated to `archive/`.
**Tech Stack:** git, bash, Python (path update scripts)
---
### Task 0: Safety Preflight
**Context:** Verify workspace state before any changes.
- [ ] **Step 0.1: Check git status in parent repo**
Run: `git status`
Expected: clean working tree, or note ongoing work
- [ ] **Step 0.2: Check git status in submodule (源码/)**
Run: `git status`
Expected: clean working tree (last commit was the spec doc)
- [ ] **Step 0.3: Record the current tree state for rollback**
Run: `git rev-parse HEAD` (parent repo) and `git rev-parse HEAD` (submodule)
Expected: record these SHAs for rollback reference
---
### Phase 1: Parent Repo — Rename Top-Level Directories
---
### Task 1: Rename 星中心/ → runtime/
**Files:**
- Rename: `星中心/``runtime/`
- [ ] **Step 1.1: git mv 星中心 to runtime**
Run (from repo root):
```bash
git mv 星中心 runtime
```
Expected: directory renamed, no content changes
- [ ] **Step 1.2: Rename internal directories (remove `_01-` prefix)**
```bash
git mv runtime/cwos_manager_01-cwos_manager runtime/cwos-manager
git mv runtime/cwos_system_api_01-cwos_system_api runtime/cwos-system-api
git mv runtime/cw-elevator-application-V1.0.0.20211103 runtime/elevator-v1
git mv runtime/ninca_crk_std_01-ninca_crk_std_backend runtime/ninca-crk-std
git mv runtime/ninca_qk_alarm_app_01-ninca_qk_alarm_app runtime/ninca-qk-alarm
git mv runtime/ninca-crk-std-backend-V2.9.1_20210630 runtime/ninca-crk-std-lib
```
Expected: all 6 directories renamed
- [ ] **Step 1.3: Rename internal frontend subdirs (runtime/frontend/)**
```bash
git mv runtime/frontend/cwos_manager_frontend runtime/frontend/cwos-manager-frontend
```
Expected: dir renamed
- [ ] **Step 1.4: Verify**
Run: `ls runtime/`
Expected: `cwos-manager/ cwos-system-api/ elevator-v1/ frontend/ ninca-crk-std/ ninca-crk-std-lib/ ninca-qk-alarm/`
- [ ] **Step 1.5: Commit**
```bash
git add runtime/
git commit -m "refactor: rename 星中心/ => runtime/, normalize service dir names"
```
---
### Task 2: Rename 部署包/ → packages/
**Files:**
- Rename: `部署包/``packages/`
- [ ] **Step 2.1: git mv**
Run (from repo root):
```bash
git mv 部署包 packages
```
Expected: directory renamed
- [ ] **Step 2.2: Rename tar.gz files (remove `01-` prefix)**
List all files first:
```bash
ls packages/*.tar.gz
```
For each file, rename. Example pattern:
```bash
git mv packages/cwos_manager_01-cwos_manager.tar.gz packages/cwos-manager.tar.gz
git mv packages/cwos_system_api_01-cwos_system_api.tar.gz packages/cwos-system-api.tar.gz
git mv packages/ninca_common_backend_01-ninca_common_backend.tar.gz packages/ninca-common-backend.tar.gz
git mv packages/ninca_common_component_organization_01-ninca_common_component_organization.tar.gz packages/ninca-common-component-organization.tar.gz
git mv packages/ninca_common_monitor_app_01-ninca_common_monitor_app.tar.gz packages/ninca-common-monitor-app.tar.gz
git mv packages/ninca_common_snap_app_01-ninca_common_snap_app.tar.gz packages/ninca-common-snap-app.tar.gz
git mv packages/ninca_common_vehicle_app_01-ninca_common_vehicle_app.tar.gz packages/ninca-common-vehicle-app.tar.gz
git mv packages/ninca_crk_std_01-ninca_crk_std_backend.tar.gz packages/ninca-crk-std-backend.tar.gz
git mv packages/ninca_md_heat_analysis_01-ninca_md_heat_analysis_backend.tar.gz packages/ninca-md-heat-analysis-backend.tar.gz
git mv packages/ninca_qk_alarm_app_01-ninca_qk_alarm_app.tar.gz packages/ninca-qk-alarm-app.tar.gz
git mv packages/ninca-person-file-app-V2.9.2_20210216.tar.gz packages/ninca-person-file-app-v2.9.2.tar.gz
git mv packages/frontend.tar.gz packages/frontend.tar.gz
git mv packages/cw-elevator-application-V1.0.0.20211103.tar.gz packages/cw-elevator-application-v1.0.0.tar.gz
```
- [ ] **Step 2.3: Rename expanded component directory**
```bash
git mv packages/ninca_common_component_organization_01-ninca_common_component_organization packages/ninca-common-component-organization
```
Then rename sub-subdirs:
```bash
git mv packages/ninca-common-component-organization/ninca_common_component_organization_01-ninca_common_component_organization207 packages/ninca-common-component-organization/v207
git mv packages/ninca-common-component-organization/ninca_common_component_organization_01-ninca_common_component_organization208 packages/ninca-common-component-organization/v208
git mv packages/ninca-common-component-organization/ninca_common_component_organization_01-ninca_common_component_organization209 packages/ninca-common-component-organization/v209
```
- [ ] **Step 2.4: Verify**
Run: `ls packages/` and `ls packages/ninca-common-component-organization/`
- [ ] **Step 2.5: Commit**
```bash
git add packages/
git commit -m "refactor: rename 部署包/ => packages/, normalize tar.gz names"
```
---
### Task 3: Rename data_backup/ → data-backups/
**Files:**
- Rename: `data_backup/``data-backups/`
- [ ] **Step 3.1: git mv**
```bash
git mv data_backup data-backups
```
- [ ] **Step 3.2: Commit**
```bash
git add data-backups/
git commit -m "refactor: rename data_backup/ => data-backups/ (kebab-case)"
```
---
### Task 4: Move cn/ and media/ to archive/
**Files:**
- Move: `cn/``archive/miscellaneous/cn/`
- Move: `media/``archive/miscellaneous/media/`
- Create: `archive/miscellaneous/`
- [ ] **Step 4.1: Create archive directories**
```bash
mkdir -p archive/miscellaneous
```
- [ ] **Step 4.2: Move cn/ into archive**
```bash
git mv cn archive/miscellaneous/cn
```
- [ ] **Step 4.3: Move media/ into archive**
```bash
git mv media archive/miscellaneous/media
```
- [ ] **Step 4.4: Commit**
```bash
git add archive/
git commit -m "refactor: move cn/, media/ to archive/miscellaneous/"
```
---
### Phase 2: Submodule (源码/) — Maven & Scripts Restructure
---
### Task 5: Rename Maven projects (remove `maven-` prefix)
**Files (within 源码/):**
- Rename: `maven-cloudwalk-cloud/``source/backend/cloudwalk-cloud/`
- Rename: `maven-cloudwalk-device-manager/``source/backend/cloudwalk-device-manager/`
- Rename: `maven-cloudwalk-device-sdk/``source/backend/cloudwalk-device-sdk/`
- Rename: `maven-cloudwalk-intelligent-davinci-manager/``source/backend/intelligent-davinci-manager/`
- Rename: `maven-cloudwalk-legacy-public/``source/backend/cloudwalk-legacy-public/`
- Rename: `maven-cw-elevator-application/``source/backend/cw-elevator-application/`
- Rename: `maven-cwos-common-aks/``source/backend/cwos-common-aks/`
- Rename: `maven-cwos-device-authentication/``source/backend/cwos-device-authentication/`
- Rename: `maven-cwos-resource/``source/backend/cwos-resource/`
- Rename: `maven-intelligent-cwoscomponent/``source/backend/intelligent-cwoscomponent/`
- Rename: `maven-ninca-common-component-organization/``source/backend/ninca-common-component-organization/`
- Rename: `maven-ninca-crk-from-lib/``source/backend/ninca-crk-from-lib/`
- Rename: `maven-ninca-qk-alarm/``source/backend/ninca-qk-alarm/`
Note: `源码/` (submodule) already means "source code" in Chinese. Creating `源码/source/` inside it would be redundant. Instead, Maven projects go under `源码/backend/`.
- [ ] **Step 5.1: Create backend/ directory**
Run (from 源码/):
```bash
mkdir -p backend
```
- [ ] **Step 5.2: Move and rename all Maven projects**
```bash
git mv maven-cloudwalk-cloud backend/cloudwalk-cloud
git mv maven-cloudwalk-device-manager backend/cloudwalk-device-manager
git mv maven-cloudwalk-device-sdk backend/cloudwalk-device-sdk
git mv maven-cloudwalk-intelligent-davinci-manager backend/intelligent-davinci-manager
git mv maven-cloudwalk-legacy-public backend/cloudwalk-legacy-public
git mv maven-cw-elevator-application backend/cw-elevator-application
git mv maven-cwos-common-aks backend/cwos-common-aks
git mv maven-cwos-device-authentication backend/cwos-device-authentication
git mv maven-cwos-resource backend/cwos-resource
git mv maven-intelligent-cwoscomponent backend/intelligent-cwoscomponent
git mv maven-ninca-common-component-organization backend/ninca-common-component-organization
git mv maven-ninca-crk-from-lib backend/ninca-crk-from-lib
git mv maven-ninca-qk-alarm backend/ninca-qk-alarm
```
Expected: all 13 projects moved, check `ls backend/`
- [ ] **Step 5.3: Verify no broken symlinks or missing dirs**
Run:
```bash
ls backend/ | wc -l
```
Expected: 13
- [ ] **Step 5.4: Commit**
```bash
git add backend/ && git rm -r maven-cloudwalk-cloud maven-cloudwalk-device-manager maven-cloudwalk-device-sdk maven-cloudwalk-intelligent-davinci-manager maven-cloudwalk-legacy-public maven-cw-elevator-application maven-cwos-common-aks maven-cwos-device-authentication maven-cwos-resource maven-intelligent-cwoscomponent maven-ninca-common-component-organization maven-ninca-crk-from-lib maven-ninca-qk-alarm
git commit -m "refactor: move Maven projects to backend/, remove maven- prefix"
```
---
### Task 6: Create source/frontend/ from frontend-source/
**Files:**
- Move: `frontend-source/``source/frontend/`
Note: After Task 11 and Task 13, the old `frontend/` (runtime) is emptied. The actual frontend source (`frontend-source/`) takes its place.
- [ ] **Step 6.1: Remove empty frontend/ dir (runtime moved out)**
```bash
rmdir frontend 2>/dev/null || echo "not empty, check manually"
```
- [ ] **Step 6.2: Rename frontend-source to frontend**
```bash
git mv frontend-source frontend
```
- [ ] **Step 6.3: Commit**
```bash
git add frontend/
git commit -m "refactor: rename frontend-source/ => frontend/ (actual source)"
```
---
### Task 7: Consolidate scripts/ into submodule scripts/
**Files:**
- Move: `scripts/` (from 源码/ root) → `source/backend/cw-elevator-application/scripts/` (keep with elevator project)
- Create: `scripts/` (consolidated, at source/ root)
Actually, the design says to keep scripts at the parent source/ level, organized by function. Let me adjust.
- [ ] **Step 7.1: Create consolidated scripts/ structure**
```bash
mkdir -p scripts/build scripts/deploy scripts/tools
```
- [ ] **Step 7.2: Classify and move scripts**
Build/release scripts:
```bash
git mv scripts/release-cw-elevator-application.sh scripts/build/
git mv scripts/format_maven_formatter_all.sh scripts/build/
git mv scripts/check_maven_formatter_validate.sh scripts/build/
```
Tools/analysis scripts:
```bash
git mv scripts/check_elevator_fatjar_lib_parity.sh scripts/tools/
git mv scripts/compare_jar_to_sources.py scripts/tools/
git mv scripts/decompile_ninca_crk_lib_modules.py scripts/tools/
git mv scripts/generate_v1_v2_elevator_dependency_diff.py scripts/tools/
git mv scripts/run_full_elevator_api_suite.sh scripts/tools/
git mv scripts/run_v1v2_parity_automated.sh scripts/tools/
git mv scripts/scan_java_tail_block_comments.py scripts/tools/
git mv scripts/strip_jdcore_java_noise.py scripts/tools/
git mv scripts/verify_frontend_runtime.py scripts/tools/
git mv scripts/verify_v1_v2_config_load_order.sh scripts/tools/
git mv scripts/collect_elevator_runtime_evidence.sh scripts/tools/
git mv scripts/alibaba_heuristic_audit.py scripts/tools/
```
The `test-env/` directory stays as is under scripts/:
```bash
# test-env is already at scripts/test-env/, keep it
```
- [ ] **Step 7.3: Commit**
```bash
git add scripts/
git commit -m "refactor: consolidate scripts/ by function (build/deploy/tools)"
```
---
### Task 8: Move self-referencing 源码/源码/ to archive
**Files (in submodule):**
- Move: `源码/源码/` → parent repo `archive/miscellaneous/source-self-ref/`
This is a cross-repo move. The content is inside the submodule but should end up in the parent repo's archive.
- [ ] **Step 8.1: Create target directory in parent repo**
Run (from parent repo root):
```bash
mkdir -p archive/miscellaneous/source-self-ref
```
- [ ] **Step 8.2: Move content using regular mv**
Run (from parent repo root):
```bash
mv 源码/源码 archive/miscellaneous/source-self-ref/
```
- [ ] **Step 8.3: Register in parent repo**
```bash
git add archive/miscellaneous/source-self-ref/
git commit -m "archive: relocate 源码/源码/ (self-referencing dir)"
```
- [ ] **Step 8.4: Remove from submodule**
Run (from 源码/ submodule):
```bash
git rm -r 源码
git commit -m "refactor: remove self-referencing 源码/源码/ dir (moved to parent archive)"
```
---
### Task 9: Move decompiled sources (反1/) to parent archive
**Files:**
- Move: `反1/` (in submodule) → `archive/decompiled-sources/` (parent repo)
- [ ] **Step 9.1: Create target in parent repo**
```bash
mkdir -p archive/decompiled-sources
```
- [ ] **Step 9.2: Move via regular mv**
```bash
mv 源码/反1/* archive/decompiled-sources/
```
Verify: `ls archive/decompiled-sources/ | wc -l` should show 22 files
- [ ] **Step 9.3: Register in parent repo**
```bash
git add archive/decompiled-sources/
git commit -m "archive: add decompiled jar sources (from 反1/)"
```
- [ ] **Step 9.4: Remove from submodule**
```bash
git rm -r 反1
git commit -m "refactor: move 反1/ (decompiled sources) to parent archive"
```
---
### Task 10: Move root-level files to archive
**Files:**
- Move: `源码/visitor-noauth-verify-v20260430.zip``archive/miscellaneous/`
- Move: `源码/elevator-app.log``archive/miscellaneous/`
- [ ] **Step 10.1: Cross-repo move zip and log**
```bash
mv 源码/visitor-noauth-verify-v20260430.zip archive/miscellaneous/
mv 源码/elevator-app.log archive/miscellaneous/
```
- [ ] **Step 10.2: Register in parent repo**
```bash
git add archive/miscellaneous/
git commit -m "archive: add root-level zip and log files from 源码/"
```
- [ ] **Step 10.3: Remove from submodule**
```bash
git rm visitor-noauth-verify-v20260430.zip elevator-app.log
git commit -m "refactor: move root-level artifacts to parent archive"
```
---
### Task 11: Move .bak frontend dirs to archive
**Files (in submodule 源码/frontend/):**
- Move all `*.bak*` directories from `源码/frontend/` to parent `archive/frontend-backups/`
- [ ] **Step 11.1: Identify all .bak dirs**
```bash
ls -d 源码/frontend/*.bak* 2>/dev/null
```
Expected list (from earlier discovery):
```
front_acs.bak20231012 front_acs.bak20231018 front_acs.bak20231020
front_acs.bak20231027 front_acs.bak20231222
canoe-account.bak20230928 canoe-car.bak20231020
canoe-device.bak20231018 canoe-device.bak20231020
canoe-person.bak20231018 canoe-person.bak20231024
elevator-front.bak20231019
```
Also include tar.gz archives in 源码/frontend/:
```
alarm-front.tar.gz canoe-car.tar.gz canoe-device.tar.gz.20240515
heat-analysis-portal.tar.gz.zhongshanyi heat-analysis-portal.tar(4).gz
```
- [ ] **Step 11.2: Create target and move**
```bash
mkdir -p archive/frontend-backups
```
Move each .bak dir:
```bash
for d in 源码/frontend/*.bak*; do
name=$(basename "$d")
mv "$d" "archive/frontend-backups/$name"
done
```
Move tar.gz archives:
```bash
for f in 源码/frontend/*.tar.gz*; do
name=$(basename "$f")
mv "$f" "archive/frontend-backups/$name"
done
```
- [ ] **Step 11.3: Register in parent repo**
```bash
git add archive/frontend-backups/
git commit -m "archive: add frontend .bak backups from 源码/frontend/"
```
- [ ] **Step 11.4: Remove from submodule**
Run from 源码/:
```bash
for d in frontend/*.bak*; do git rm -r "$d"; done
for f in frontend/*.tar.gz*; do git rm "$f"; done
git commit -m "refactor: move frontend backups to parent archive"
```
---
### Task 12: Move .bak frontend dirs from runtime/ to archive
**Files (in parent repo runtime/frontend/):**
- Move all `*.bak*` directories from `runtime/frontend/` to `archive/frontend-backups/`
- [ ] **Step 12.1: Identify .bak dirs in runtime/frontend/**
```bash
ls -d runtime/frontend/*.bak*
```
- [ ] **Step 12.2: Move to archive**
```bash
for d in runtime/frontend/*.bak*; do
name=$(basename "$d")
git mv "$d" "archive/frontend-backups/runtime-$name"
done
```
- [ ] **Step 12.3: Verify and commit**
```bash
ls archive/frontend-backups/ | head -20
git add archive/
git commit -m "archive: add frontend backups from runtime/frontend/"
```
---
### Task 13: Move frontend runtime to runtime/frontend/
**Files:**
- Move: `源码/frontend/` (active non-.bak dirs) → `runtime/frontend/` (parent repo)
This merges the active frontend dirs from the submodule into the runtime.
- [ ] **Step 13.1: Identify non-.bak frontend dirs**
```bash
ls -d 源码/frontend/*/ 2>/dev/null | grep -v '\.bak' | grep -v '\.tar\.gz'
```
- [ ] **Step 13.2: Cross-repo move**
For each active frontend dir:
```bash
for d in 源码/frontend/*/; do
name=$(basename "$d")
# Skip .bak dirs
if [[ "$name" != *".bak"* ]]; then
rsync -a "$d" "runtime/frontend/$name"
fi
done
```
Use rsync/cp to copy, then verify, then remove from source.
- [ ] **Step 13.3: Check for duplicates with existing runtime/frontend/**
```bash
diff -rq 源码/frontend/alarm-front runtime/frontend/alarm-front 2>/dev/null | head -20
```
If identical, remove from 源码/:
```bash
git rm -r frontend/alarm-front
```
- [ ] **Step 13.4: Register new files in parent**
```bash
git add runtime/frontend/
git commit -m "refactor: merge active frontend dirs from submodule to runtime/frontend/"
```
- [ ] **Step 13.5: Remove from submodule**
```bash
git rm -r frontend/alarm-front frontend/area-front frontend/attendancepc ...
git commit -m "refactor: move frontend runtime to parent runtime/ (dedup)"
```
---
### Task 14: Move nginx/ to top level
**Files:**
- Move: `源码/nginx-r1.0425/``nginx/` (parent repo root)
- [ ] **Step 14.1: Cross-repo move**
```bash
cp -a 源码/nginx-r1.0425 nginx
```
Verify: `ls nginx/`
- [ ] **Step 14.2: Register in parent repo**
```bash
git add nginx/
git commit -m "refactor: move nginx config from submodule to top-level"
```
- [ ] **Step 14.3: Remove from submodule**
```bash
git rm -r nginx-r1.0425
git commit -m "refactor: move nginx config to parent repo top-level"
```
---
### Task 15: Move artifacts/ to top level
**Files:**
- Move: `源码/artifacts/``artifacts/` (parent repo root)
- [ ] **Step 15.1: Cross-repo move using cp**
```bash
cp -a 源码/artifacts artifacts
```
- [ ] **Step 15.2: Register in parent repo**
```bash
git add artifacts/
git commit -m "refactor: move artifacts/ from submodule to top-level"
```
- [ ] **Step 15.3: Remove from submodule**
```bash
git rm -r artifacts
git commit -m "refactor: move artifacts/ to parent repo top-level"
```
---
### Task 16: Move dev-support/ to docs/
**Files (in submodule):**
- Move: `dev-support/``docs/dev-support/`
- [ ] **Step 16.1: git mv**
```bash
git mv dev-support docs/dev-support
```
- [ ] **Step 16.2: Commit**
```bash
git add docs/
git commit -m "docs: merge dev-support/ into docs/ (per existing convention)"
```
---
### Task 17: Update AGENTS.md with new paths
**Files:**
- Modify: `AGENTS.md` (submodule root)
- Modify: `docs/AGENTS.md` (docs AGENTS.md)
- [ ] **Step 17.1: Update submodule AGENTS.md — OVERVIEW section**
Replace the OVERVIEW section to reflect new paths:
```markdown
## OVERVIEW
CloudWalk (云从科技) 电梯/门禁/报警/人脸识别系统。Maven 多模块单体仓库 + 独立部署运行包。
- **source/**: 可编辑的 Maven 源码树 (主要迭代区) + 前端源码
- **runtime/**: 运行时部署包 + 配置文件 (生产/预发镜像)
- **packages/**: 13 个组件的完整 tar.gz 压缩包
- **data-backups/**: 各服务数据库备份 (SQL gz)
- **archive/**: 历史/参考/遗留内容
- **docs/**: 文档中心
- **scripts/**: 统一脚本 (build/deploy/test-env/tools)
- **nginx/**: Nginx 配置
```
- [ ] **Step 17.2: Update AGENTS.md — 顶层目录结构 section**
Replace the tree:
```markdown
```
星河湾星中星/
├── source/ # 可编辑的源码
│ ├── backend/ # Maven 后端项目 (13 个)
│ │ ├── cw-elevator-application/ # 电梯应用 (主力迭代)
│ │ ├── intelligent-cwoscomponent/
│ │ └── ...
│ ├── frontend/ # 前端源码项目
│ └── scripts/ # 构建/工具脚本
├── runtime/ # 运行时部署包 (运行目录)
│ ├── elevator-v1/ # V1 电梯应用部署
│ ├── ninca-crk-std/ # CRK 人脸识别 GPU 后端
│ └── cwos-manager/ # CWOS Manager (Docker)
├── packages/ # 部署压缩包
├── data-backups/ # 数据库备份
├── archive/ # 历史/参考/遗留内容
├── docs/ # 文档中心
├── scripts/ # 统一脚本
├── artifacts/ # 构建/还原产物
├── nginx/ # Nginx 配置
└── logs/ # 运行日志
```
```
- [ ] **Step 17.3: Update all path references in AGENTS.md**
Replace remaining old paths:
- `maven-cw-elevator-application/``backend/cw-elevator-application/`
- `maven-intelligent-cwoscomponent/``backend/intelligent-cwoscomponent/`
- `deploy/v2-maven/``backend/cw-elevator-application/deploy/v2-maven/`
- `scripts/test-env/``scripts/test-env/` (already correct)
- [ ] **Step 17.4: Commit**
```bash
git add AGENTS.md
git commit -m "docs: update AGENTS.md paths for directory restructure"
```
---
### Task 18: Update test-env script paths
**Files:**
- Modify: `scripts/test-env/setup.sh`
- Modify: `scripts/test-env/config/env.sh`
- Modify: `scripts/test-env/start-all.sh`
- Modify: `scripts/test-env/stop-all.sh`
- Modify: `scripts/test-env/prepare-services.sh`
- Modify: `scripts/test-env/prepare-db.sh`
- Modify: `scripts/test-env/health-check.sh`
- Modify: `scripts/test-env/verify-functional.sh`
- [ ] **Step 18.1: Find all old path references in test-env/**
Run:
```bash
grep -rn "maven-cw-elevator-application\|cw-elevator-application-V1.0.0\|星中心\|部署包\|data_backup" scripts/test-env/ --include="*.sh" --include="*.yml" --include="*.py" --include="*.env"
```
Record all matches.
- [ ] **Step 18.2: Update each file**
For each reference found in step 18.1, replace:
- `maven-cw-elevator-application``backend/cw-elevator-application`
- `../../maven-cw-elevator-application``../backend/cw-elevator-application`
- `cw-elevator-application-V1.0.0.20211103``elevator-v1`
- `星中心``runtime`
- `部署包``packages`
- `data_backup``data-backups`
- `cwos_manager_01-cwos_manager``cwos-manager`
- `cwos_system_api_01-cwos_system_api``cwos-system-api`
- `ninca_crk_std_01-ninca_crk_std_backend``ninca-crk-std`
- `ninca_qk_alarm_app_01-ninca_qk_alarm_app``ninca-qk-alarm`
- [ ] **Step 18.3: Update docker-compose.infra.yml**
Run:
```bash
grep -n "maven-cw-elevator\|星中心\|部署包\|data_backup" scripts/test-env/docker-compose.infra.yml
```
Apply the same replacements.
- [ ] **Step 18.4: Commit**
```bash
git add scripts/test-env/
git commit -m "fix: update test-env script paths after directory restructure"
```
---
### Task 19: Update elevator API parity tool paths
**Files:**
- Modify: `backend/cw-elevator-application/tools/elevator_api_parity/` (Python test files, configs)
- [ ] **Step 19.1: Find old path references**
```bash
grep -rn "maven-cw-elevator-application\|deploy/v2-maven\|cw-elevator-application-V1.0.0" backend/cw-elevator-application/tools/ --include="*.py" --include="*.sh" --include="*.json" --include="*.yml" --include="*.cfg"
```
- [ ] **Step 19.2: Update references**
Replace paths as needed. Key replacements:
- `../../deploy/``../../deploy/` (relative path likely still works)
- Any absolute or hard-coded paths need updating
- [ ] **Step 19.3: Commit**
```bash
git add backend/cw-elevator-application/tools/
git commit -m "fix: update parity tool paths after directory restructure"
```
---
### Task 20: Clean up remaining submodule root
**Files (in submodule root 源码/):**
- Remove now-empty directories that had all content moved out
- [ ] **Step 20.1: Check what remains in submodule root**
```bash
ls -la
```
Expected remaining:
```
.editorconfig
.git/
.gitignore
.sisyphus/
AGENTS.md
docs/
source/
scripts/
logs/
frontend-source/ (moved to source/frontend/ - check if still exists)
```
If `frontend-source/` still exists as empty: `git rm -r frontend-source`
- [ ] **Step 20.2: Clean up empty dirs**
```bash
# Remove empty frontend-source if moved
git rm -r frontend-source 2>/dev/null || echo "already gone"
# Remove empty dev-support if moved
git rm -r dev-support 2>/dev/null || echo "already gone"
```
- [ ] **Step 20.3: Commit**
```bash
git commit -m "refactor: clean up empty directories after restructure"
```
---
### Task 21: Final verification — parent repo
- [ ] **Step 21.1: Check parent repo git status**
```bash
git status
```
Expected: clean tree, all changes committed
- [ ] **Step 21.2: Verify key directories exist**
```bash
ls -d runtime packages data-backups archive scripts nginx artifacts docs logs 2>/dev/null
```
- [ ] **Step 21.3: Verify no critical paths are broken**
```bash
ls runtime/elevator-v1 runtime/cwos-manager runtime/ninca-crk-std runtime/ninca-qk-alarm 2>/dev/null | head -5
```
---
### Task 22: Final verification — submodule (源码/)
- [ ] **Step 22.1: Check submodule git status**
```bash
git status
```
Expected: clean tree
- [ ] **Step 22.2: Verify key directories**
```bash
ls -d source/backend source/frontend docs scripts 2>/dev/null
```
- [ ] **Step 22.3: Verify submodule is committed and parent tracks new ref**
```bash
git log --oneline -3
```
Expected: shows 15+ commits for all restructuring work
- [ ] **Step 22.4: Update parent's submodule pointer**
```bash
git add 源码
git commit -m "chore: update submodule ref after directory restructure"
```
@@ -0,0 +1,209 @@
# frontend-source/ 反编译与重建方案设计
**日期**: 2026-04-29
**版本**: 1.0
**状态**: 待审查
## 1. 背景与目标
### 背景
- `frontend/` 目录包含 28 个 Vue 2 + Element UI 前端应用,均为 webpack 构建的 dist 产物
- 原始源码(.vue / webpack.config.js / package.json)已丢失,无法找到
- 当前迭代中前端工作被跳过,但长期需要恢复前端功能拓展能力
### 目标
创建 `frontend-source/` 同级目录,分两阶段将 dist 产物转化为可维护的源码:
| 阶段 | 范围 | 目标 | 输出质量 |
|------|------|------|----------|
| 阶段 1 | 全部 28 个应用 | 反编译为可读源码 | B 级:代码可理解、可修改 |
| 阶段 2 | 4 个核心应用 | 重建为可构建工程 | C 级:可 `npm run build` |
## 2. 目录结构
```
反编译/
├── frontend/ # 现有 dist 产物(只读)
└── frontend-source/ # 新建目标目录
├── AGENTS.md
├── .gitignore # node_modules/
├── decompiled/ # 阶段 1 产物(B 级反编译)
│ ├── cwos-portal/
│ ├── elevator-front/
│ ├── alarm-front/
│ ├── front_acs/
│ ├── ...(其余 24 个)
│ │
│ └── [每个应用结构]:
│ ├── README.md # API 清单 + 路由表 + 组件树
│ ├── src/
│ │ ├── views/ # 页面级模块
│ │ ├── components/ # 自定义组件
│ │ ├── api/ # API 端点清单
│ │ └── router/ # 路由定义
│ ├── static/ # CSS/img/font 复用
│ └── index.html # 原样
├── projects/ # 阶段 2 产物(C 级重建)
│ ├── cwos-portal/ # 物业管理门户
│ │ ├── package.json
│ │ ├── vue.config.js
│ │ ├── src/
│ │ │ ├── main.js
│ │ │ ├── App.vue
│ │ │ ├── views/
│ │ │ ├── components/
│ │ │ ├── api/
│ │ │ ├── router/
│ │ │ └── store/
│ │ └── public/
│ ├── elevator-front/ # 电梯管理
│ ├── alarm-front/ # 报警管理
│ └── front_acs/ # 门禁管理
└── scripts/ # 反编译工具
├── unpack-webpack.js # webpack bundle 解包
├── extract-api-calls.js # API 端点提取
├── extract-router.js # 路由表提取
├── beautify-all.sh # 批量格式化
└── compare-output.sh # 产物对比
```
## 3. 阶段 1:B 级反编译(全部 28 个)
### 3.1 反编译流水线
```
frontend/<app>/*.js ──► [1. 解包] ──► modules/*.raw.js
──► [2. 格式化] ──► modules/*.formatted.js
──► [3. 分析] ──► api-calls.json
router-tree.json
component-tree.json
──► [4. 组织] ──► decompiled/<app>/
```
### 3.2 各步骤详细说明
**步骤 1 — 解包**
- 识别 webpack bundle 的模块结构(`__webpack_modules__``__webpack_require__`
- 按模块 ID 拆分为独立文件
- 处理 chunk 文件的异步加载引用
**步骤 2 — 格式化**
- 使用 `js-beautify` 处理缩进、换行
- 使用 `prettier` 统一代码风格
- 保留注释(如有)
**步骤 3 — AST 分析**
- 使用 `@babel/parser` 解析格式化后的 JS
- 提取:
- **API 调用**`axios.get/post``this.$http` 等 HTTP 请求模式
- **路由定义**`vue-router``routes` 数组和 `path/component` 映射
- **组件注册**`Vue.component()``components: {}` 局部注册
- **Element UI 引用**`this.$message``el-form` 等使用点
**步骤 4 — 组织**
- 根据分析结果归类文件到 views/components/api/router
- 编写每应用的 README.md(API 清单、路由表、组件树)
- 原样复制 static/ 下的 CSS/img/font
### 3.3 28 个应用处理顺序
| 优先级 | 应用数 | 说明 |
|--------|--------|------|
| P0 | cwos-portal | 先跑通工具链验证 |
| P1 | elevator-front, alarm-front, front_acs | 阶段 2 目标 |
| P2 | canoe-account, canoe-car, canoe-device, canoe-person | Canoe 系列 |
| P3 | 其余 20 个 | 批量处理 |
## 4. 阶段 2:C 级重建(4 个核心)
### 4.1 技术栈
| 项 | 选用 | 理由 |
|----|------|------|
| 框架 | Vue 2.6 | 与原始一致(chunk-elementUI 确认) |
| UI 库 | Element UI 2.15 | 原始使用 Element UI |
| 构建 | Vue CLI 4.5 | 稳定版本 |
| HTTP | axios 0.21 | 与 V1 时代匹配 |
| 路由 | vue-router 3.x | 与 Vue 2 配套 |
| 状态管理 | vuex 3.x | 仅使用到的应用引入 |
### 4.2 重建流程(每个应用)
1. **工程脚手架**`vue create` 或手动搭建 Vue 2 + Element UI 项目结构
2. **路由重建**:根据阶段 1 提取的 router-tree.json 还原 `router/index.js`
3. **API 层**:根据 api-calls.json 建立 `api/` 模块(axios 封装)
4. **页面重建**:逐页面创建 `.vue` SFC,参考原 dist 的 CSS 样式
5. **组件重建**:抽取可复用组件为独立 `.vue` 文件
6. **构建验证**`npm run build` 并对比产物与原 dist
### 4.3 四个核心应用的重建重点
| 应用 | 预计页面数 | 核心功能 |
|------|-----------|----------|
| cwos-portal | 15-20 | 主框架布局、菜单树、仪表板、项目管理 |
| elevator-front | 10-15 | 电梯派梯、设备管理、楼层配置、通行规则 |
| alarm-front | 8-12 | 报警列表、规则配置、实时推送、统计 |
| front_acs | 10-15 | 门禁权限、区域管理、通行日志、人员管理 |
## 5. 工具脚本设计
### 5.1 `unpack-webpack.js`
```
输入: <app>/static/js/app.xxx.js
处理: 解析 webpack bundle 结构,按模块 ID 拆分
输出: modules/<module-id>.js
```
### 5.2 `extract-api-calls.js`
```
输入: modules/*.formatted.js
处理: AST 遍历查找 HTTP 调用模式
输出: api-calls.json (端点、方法、参数)
```
### 5.3 `extract-router.js`
```
输入: modules/*.formatted.js
处理: 查找 vue-router 的 routes 定义
输出: router-tree.json (path → component 映射)
```
### 5.4 `beautify-all.sh`
```
输入: modules/*.js
处理: 批量 js-beautify + prettier
输出: modules/*.formatted.js
```
## 6. 质量验证
### 阶段 1 验证
- [ ] 每个应用产出 README.md(含 API 清单、路由表)
- [ ] 代码通过 js-beautify 格式化
- [ ] 无原始混淆变量残留(至少重命名为有语义的名称)
- [ ] 与原 dist 的 CSS/img 完整对应
### 阶段 2 验证
- [ ] `npm install` 成功
- [ ] `npm run build` 成功
- [ ] 构建产物与原 dist 的页面数量一致
- [ ] API 端点覆盖与原一致
## 7. 风险与限制
| 风险 | 影响 | 缓解措施 |
|------|------|----------|
| 变量名无法完全还原 | 代码可读性下降 | 通过上下文推断 + 手工标注语义名 |
| Vue SFC 无法自动还原 | 阶段 1 产物为 .js 而非 .vue | 阶段 2 手工重建为 .vue |
| webpack 配置不可知 | 构建配置需猜测 | 参考 Vue CLI 默认配置,按需调整 |
| 部分 Chunk 为第三方库 | 浪费分析时间 | 用文件名规则(chunk-libs、chunk-elementUI)过滤 |
## 8. 与现有仓库的集成
- `frontend-source/` 为新建独立目录,不修改 `frontend/`
- 加入根 `.gitignore` 白名单(类似 `frontend/` 的显式 `!` 规则)
- 产出 `frontend-source/AGENTS.md` 作为本目录说明
- 产出 `docs/superpowers/specs/` 下的本设计文档
@@ -0,0 +1,308 @@
# 数据库表结构参考手册 — 设计说明
**文档性质**:设计说明(非最终产物)
**产物路径**`docs/superpowers/specs/2026-05-01-database-schema-reference.md`(待生成)
**设计日期**2026-05-01
**状态**:待评审
---
## 1. 目标与范围
走查代码和 .md 文档,梳理星河湾星中星仓库全部数据库表结构、关联关系,连接数据库提取数据样本,输出一份**带 Mermaid ER 图 + 样本数据的 Markdown 参考手册**。
### 1.1 范围
| 覆盖 | 不覆盖 |
|------|--------|
| 5 个数据库的全部业务表 | 系统表(如 `quartz_*``QRTZ_*` |
| 代码层 MyBatis Mapper 映射的表 | 纯运维/监控表 |
| 跨库业务关联(`business_id``personId`) | 数据库级外键(本项目不声明 FK) |
| 每表 1-3 行脱敏样本 | 全量数据导出 |
### 1.2 涉及数据库
| 数据库 | 主机 | 模块 | 采集方式 |
|--------|------|------|----------|
| `component-organization` | 192.168.3.12:3307 | 组织服务(独立微服务) | 🔗 直连查询 |
| `cw-elevator-application` | 192.168.3.12:3307 | maven-cw-elevator-application | 🔗 直连查询 |
| `ninca_crk_std` | 10.128.123.108:3306 | maven-ninca-crk | 📄 代码推导 |
| `alarm_deploy` | 10.128.161.95:3306 | maven-ninca-qk-alarm | 📄 代码推导 |
| `cwos_resource`(门户库) | 代码引用 | maven-cwos-resource | 📄 代码推导 |
---
## 2. 产物结构
文件:`docs/superpowers/specs/2026-05-01-database-schema-reference.md`
```
# 星河湾星中星 — 数据库表结构参考手册
## 1. 数据库概览
- 5 库表格:库名、主机、引擎版本、表数量、采集方式
## 2. 组件组织库 — component-organization
- ER 图(Mermaid
- 表清单(名称、行数、引擎、注释)
- 逐表详情(列名、类型、可空、默认值、键、注释)
- 关系说明
- 样本数据
## 3. 电梯应用库 — cw-elevator-application
- (同上结构)
## 4. 人脸识别库 — ninca_crk_std ⚠️ 代码推导
- ER 图(从 Mapper XML 推导)
- 逐表详情(从 Mapper `resultMap` / SQL 推导列)
- 标注「未连接生产库」
## 5. 报警库 — alarm_deploy ⚠️ 代码推导
- (同上结构)
## 6. 门户资源库 — cwos_resource ⚠️ 代码推导
- (同上结构)
## 7. 跨库关系总图
- 跨库 ER 图(虚线标注跨库关联)
- `business_id` 对齐路径:组织 → 电梯
- `personId` (API) ↔ `cw_is_person.ID` ↔ `image_rule_ref.person_id`
- Feign 调用链中的库切换点
## 8. 代码-表映射索引
- MyBatis Mapper XML → 表名
- Java DAO/DTO → 表名
- SQL DDL 文件位置
## 9. 附录
- 完整 INFORMATION_SCHEMA 原始输出(折叠)
- 脱敏样本数据完整集(折叠)
- 验证 SQL 模板
```
---
## 3. 数据采集策略
### 3.1 三步并行流程
```
Step 1 (并行) Step 2 (并行)
┌──────────────────┐ ┌─────────────────────┐
│ 连接 192.168.3.12 │ │ 扫描全部 Mapper XML │
│ INFORMATION_SCHEMA│ │ 提取表/列/JOIN 关系 │
│ + SELECT 样本 │ │ 扫描 SQL DDL 文件 │
└──────┬───────────┘ └──────────┬──────────┘
│ │
└──────────┬──────────────────────┘
Step 3 (汇总)
┌──────────────────┐
│ 交叉验证 │
│ 代码表 vs 库表 │
│ DDL vs 实际列 │
│ 生成 ER 图 + 文档 │
└──────────────────┘
```
### 3.2 Step 1:直连查询(可连库)
`component-organization``cw-elevator-application` 执行:
```sql
-- 表清单
SELECT TABLE_NAME, TABLE_ROWS, ENGINE, TABLE_COMMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = ?
ORDER BY TABLE_NAME;
-- 列定义
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT,
COLUMN_KEY, EXTRA, COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?
ORDER BY ORDINAL_POSITION;
-- 索引
SELECT INDEX_NAME, COLUMN_NAME, NON_UNIQUE
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?;
-- 样本(每表 3 行)
SELECT * FROM <table> ORDER BY 1 DESC LIMIT 3;
```
### 3.3 Step 2:代码推导(全部模块)
对每个 Maven 模块,读取 MyBatis Mapper XML 提取:
| 提取项 | XML 元素 | 用途 |
|--------|----------|------|
| 表名 | `INSERT INTO` / `UPDATE` / `FROM` / `JOIN` | 确定 Mapper 操作的表 |
| 列映射 | `<resultMap>` / `<result column="...">` | 列名与 Java 字段对应 |
| JOIN 关系 | SQL 中的 `JOIN ... ON` 子句 | 推导表间关联 |
| 分表逻辑 | ShardingSphere 配置中的 `actual-data-nodes` | 标注年度分表 |
`maven-cwos-resource`Mapper XML 分布在 `db2/``mysql/``oracle/` 三个目录下,代表三种数据库方言实现,以 `mysql/` 为准推导列。
### 3.4 不可达库的标注
`ninca_crk_std``alarm_deploy``cwos_resource`(无法从 192.168.3.12 访问):
- 表名从 Mapper XML 和应用配置文件推导
- 列定义从 Mapper 的 `<resultMap>` 和 SQL 语句推导
- 在文档中显式标注:**⚠️ 未连接生产库,以下信息从代码推导**
- 不提供样本数据
---
## 4. ER 图绘制规范
### 4.1 实体定义
每表仅列**业务关键列**
- 主键(PK
- 唯一键(UK
- 外键关联列
- 业务核心字段
- **跳过**审计列(`created_by``created_at``updated_by``updated_at`),除非该列参与唯一约束
```mermaid
erDiagram
tenant_visitor_floor_policy {
varchar id PK "主键"
varchar business_id UK "租户ID"
varchar policy_type "策略类型"
text allow_zone_ids "JSON数组"
tinyint enabled "1启用0停用"
bigint policy_version "版本号"
}
```
### 4.2 关系标注
| 关系类型 | Mermaid 语法 | 说明 |
|----------|-------------|------|
| 数据库 PK/FK/UK 约束 | `\|\|--o{` | 实线,有约束 |
| 代码层 JOIN(无 FK | `\|o--o{` | 虚线,逻辑关联 |
| 跨库关联 | `..` 虚线 + `: "跨库 label"` | 虚线,标注跨库 |
```mermaid
erDiagram
cw_is_organization ||--o{ cw_is_organization : "PARENT_ID 自引用"
cw_is_organization ||--o{ cw_is_person_organization_ref : "ORG_ID"
cw_is_person ||--o{ cw_is_person_organization_ref : "PERSON_ID"
tenant_visitor_floor_policy |o--o{ image_rule_ref : "business_id 对齐"
```
### 4.3 分包
`subgraph` 按数据库分组,避免单图过大:
```mermaid
erDiagram
subgraph orgLib [component-organization]
cw_is_organization {...}
cw_is_person {...}
cw_is_person_organization_ref {...}
end
subgraph elevLib [cw-elevator-application]
tenant_visitor_floor_policy {...}
image_rule_ref {...}
end
```
### 4.4 跨库关系图
第七节单独一张图,用虚线标出跨库对齐路径:
- `cw_is_organization.BUSINESS_ID``tenant_visitor_floor_policy.business_id`
- `cw_is_person.ID``image_rule_ref.person_id`(通过 API 字段 `personId`
- Feign 调用链:`AcsPersonController → PersonService_detail → PersonRuleServiceImpl → TenantVisitorFloorPolicyDao`
---
## 5. 样本数据规范
### 5.1 采集
每表执行 `SELECT * FROM <table> ORDER BY 1 DESC LIMIT 3;`
### 5.2 展示格式
主文档中每表嵌入 Markdown 表格:
```markdown
### image_rule_ref — 样本数据
| id | business_id | zone_id | zone_name | person_id | is_default |
|----|-------------|---------|-----------|-----------|------------|
| `abc123...` | `25246398...` | `60556054...` | 28F | `def456...` | 1 |
_共 3 行 × 15 列(12 列省略,完整数据见 §9 附录)_
```
### 5.3 脱敏规则
| 列内容 | 处理方式 |
|--------|---------|
| `id` / UUID 主键 | 完整展示(非 PII |
| `business_id` | 完整展示(已在公开文档中出现) |
| `person_id` / `visitor_id` | 完整展示(系统内部 ID |
| 人员姓名 `NAME` | 截断为 `张**` |
| 手机号 | 截断为 `138****1234` |
| IP 地址 | 替换为 `x.x.x.x` |
| 密码 / token | **跳过该列**SELECT 时排除) |
| Unix 毫秒时间戳 | 转换为 `2026-04-30 14:30:00` |
### 5.4 数据量
- 主文档每表 ≤ 3 行
- 附录完整样本(折叠块)≤ 500 行总计
- 不可达库不提供样本数据
---
## 6. 质量校验
### 6.1 交叉验证
| 校验项 | 方法 |
|--------|------|
| 代码表 vs 库表 | 列出「库中有但代码无 Mapper」的表(标注为运维/外部表) |
| DDL vs 实际列 | 对比 `docs/sql/*.sql` 与 INFORMATION_SCHEMA 列,标注差异 |
| 文档一致性 | 对照 `docs/architecture/租户组织人员访客-数据模型与用例.md` 中的列定义 |
### 6.2 完整性检查
- [ ] 每库有 ER 图
- [ ] 每表有列清单
- [ ] 可连库的表有样本数据
- [ ] 跨库关系图覆盖所有已识别关联
- [ ] 每表关联到至少一个 Mapper XML 或标注「无代码映射」
- [ ]`TBD``TODO``待补充` 占位符
---
## 7. 文件清单
| 文件 | 说明 |
|------|------|
| `docs/superpowers/specs/2026-05-01-database-schema-reference.md` | 最终产物 |
| `docs/superpowers/specs/2026-05-01-database-schema-reference-design.md` | 本设计说明 |
| `data/schema_raw/`(产物中引用) | INFORMATION_SCHEMA 原始 JSON 缓存 |
---
## 8. 已知风险
| 风险 | 缓解 |
|------|------|
| 192.168.3.12 不可达 | 降级为全代码推导,标注「库不可达」 |
| 分表(ShardingSphere `2020..2030`)导致 INFORMATION_SCHEMA 不完整 | 从 ShardingSphere 配置提取逻辑表名,标注物理表范围 |
| `alarm_deploy` 等库可能含 Elasticsearch 数据(非 MySQL | 标注 ES 索引,不纳入本次 MySQL 范围 |
| 样本数据量过大导致 token 消耗 | 严格限制每表 3 行 + 跳过宽表(> 30 列) |
---
*本设计说明待评审,评审通过后转入 implementation 阶段。*
@@ -0,0 +1,312 @@
# 星河湾星中星 — 数据库表结构参考手册
设计目标:基于现有信息,通过对五个数据库的核心业务表进行整理,提供 Mermaid ER 图、表级列定义、脱敏样例数据和跨库关系描述,便于后续走查和实现对照。以下内容依据设计设计文档、组织架构文档以及已收集的 mapper/表定义数据编排而成。文档中对不可达库使用明确标注。
本文件遵循以下约定:
- 只包含 BUSINESS 关键表,跳过审计字段(CREATE_TIME、LAST_UPDATE_TIME、CREATE_USER_ID、LAST_UPDATE_USER_ID 等)及系统表。
- ER 图以 Mermaid erDiagram 风格呈现,并按数据库分区显示为子图。
- 脱敏规则:对样本数据进行姓名、手机号、IP、时间戳等字段脱敏;UUID/ID 及业务主键保持不变。
- 跨库关系以虚线标注,文档末尾提供验证模板。
备注:ninca_crk_std 与 alarm_deploy 两个库在当前环境不可连通,文档将以“⚠️ 未连接生产库,以下信息从代码推导”标注,且不提供样本数据。cwos_resource 的 mapper 信息以代码引用为准。
-----------------------------------------------------------------------------
1) 数据库概览
以下表格汇总五个数据库的关键元信息与数据采集方式。
| 数据库 | 主机/来源 | 引擎 | 业务表数量 | 采集方式 | 备注 |
|--------|-----------|------|----------|----------|------|
| component-organization | 192.168.3.12:3307 | InnoDB | 21 | 直连查询 | 多租户组织/人员等核心表 |
| cw-elevator-application | 192.168.3.12:3307 | InnoDB | 8 (分片) | 直连查询 | 电梯策略与规则表 |
| ninca_crk_std | 10.128.123.108:3306 | InnoDB | 未连接 | 代码推导 | 人脸识别库(不可连通) |
| alarm_deploy | 10.128.161.95:3306 | InnoDB | 未连接 | 代码推导 | 报警/告警相关表(不可连通) |
| cwos_resource | — | InnoDB/其他 | 27 映射表 | 代码推导 | 门户资源库 mapper 映射表 |
> 注:上表中的“分片/年表”对 cw-elevator-application 的 it_acs_elevator_record_* 表表现为分区分组,实际 DDL 以最新DDL 为准。
-----------------------------------------------------------------------------
2) 组件组织库 component-organization
ER 图(Mermaid erDiagram
```mermaid
erDiagram
subgraph component-organization
cw_is_organization {
ID PK "机构节点ID"
PARENT_ID FK "父节点ID"
BUSINESS_IDUK "租户范围"
NAME "机构名称"
TYPE_ID "机构类型ID"
IS_DEL "是否删除"
}
cw_is_person {
ID PK "人员ID(API)"
BUSINESS_ID "租户ID"
NAME "姓名"
PHONE "手机号"
EMAIL "邮箱"
}
cw_is_person_organization_ref {
PERSON_ID FK "人员ID"
ORG_ID FK "机构ID"
}
cw_is_person_label_ref {
ID PK
PERSON_ID FK
LABEL_ID FK
}
cw_is_label {
ID PK
NAME "标签名称"
CODE "标签编码"
BUSINESS_ID "租户ID"
}
cw_is_image_store_associated_ref {
IMAGE_STORE_ID FK
ASSOCIATED_OBJECT_ID
ASSOCIATED_ACTION
ID PK
}
cw_is_device_image_store {
ID PK
DEVICE_ID FK
IMAGE_STORE_ID FK
TYPE
STATUS
}
end
cw_is_organization ||--o{ cw_is_organization : "parent_child"
cw_is_organization ||--o{ cw_is_person_organization_ref : "org_node"
cw_is_person ||--o{ cw_is_person_organization_ref : "membership"
cw_is_person_label_ref ||--o{ cw_is_label : "links to label"
```
核心表清单(业务关键列,已去除审计字段)
cw_is_organization
- ID (PK) | NAME | PARENT_ID | BUSINESS_ID | TYPE_ID | IS_DEL
cw_is_person
- ID (PK) | BUSINESS_ID | NAME | PHONE | EMAIL | SOURCE
cw_is_person_organization_ref
- PERSON_ID (FK) | ORG_ID (FK)
cw_is_person_label_ref
- ID (PK) | PERSON_ID (FK) | LABEL_ID (FK)
cw_is_label
- ID (PK) | NAME | CODE | BUSINESS_ID | IS_DEL | ADD_TYPE
cw_is_organization_area_ref
- ID (PK) | ORG_ID | AREA_ID | REf_Type | BUSINESS_ID
cw_is_organization_extend
- ID (PK) | ORGANIZATION_ID | BUSINESS_ID | REMARK
cw_is_organization_extend_detail
- ID (PK) | ORGANIZATION_ID | BUSINESS_ID
cw_is_organization_image_store
- APPLICATION_ID | ORG_ID | IMAGE_STORE_ID
cw_is_person_audit
- ID (PK) | BUSINESS_ID | NAME | PHONE | STATUS
cw_is_person_batch_detail
- ID (PK) | BATCH_ID | FILE_NAME | PERSON_NAME | STATUS
- 其他表同理,未在此处逐一展开,详见表列定义文件。
样本数据(脱敏后,3 行每表)
### cw_is_organization — 样本数据
| ID | NAME | ORDER_BY | PARENT_ID | BUSINESS_ID | TYPE_ID | IS_DEL |
|----|------|----------|-----------|-------------|---------|--------|
| fdeda9005dfa427da6bff924762917b7 | 617 | NULL | 99e9c6a09f534c0185e32664eb126be4 | 2524639890ba4f2cba9ba1a4eeaa4015 | 47f416aeae9f49f4a35bb22966b42181 | 0 |
| fd478ee4ffa240519657ff12b3d48726 | 基建部 | NULL | eef0a610fa9e4720a20c58aef2f229e3 | 2524639890ba4f2cba9ba1a4eeaa4015 | 47f416aeae9f49f4a35bb22966b42181 | 0 |
| fca1dd090e5d49eca3ee190bca014ca0 | 行政部 | NULL | a1d422625add4403b4e889a503cb2b12 | 2524639890ba4f2cba9ba1a4eeaa4015 | 47f416aeae9f49f4a35bb22966b42181 | 1 |
### cw_is_person — 样本数据
| ID | BUSINESS_ID | NAME | PHONE | STATUS |
|----|-------------|------|-------|--------|
| 999998332677980160 | 2524639890ba4f2cba9ba1a4eeaa4015 | 蔡** | 139****3370 | 0 |
| 999998240135180288 | 2524639890ba4f2cba9ba1a4eeaa4015 | 赫** | 139****5836 | 0 |
| 999997066723823616 | 2524639890ba4f2cba9ba1a4eeaa4015 | 黄** | 159****6886 | 0 |
### cw_is_person_organization_ref — 样本数据
| ID | PERSON_ID | ORG_ID |
|----|-----------|--------|
| fffe7b4d5ce9427ea8703d9d568306c2 | 956535134721798144 | f5d90d608d1042c487bf18af58345d5c |
| fff80f46206942ecaa123365e5475f66 | 1069265515460378624 | 488b8ad049bb43408a6fbcc50bcb89ac |
| fff4a8bdc90442749a8f463e5f07ebd3 | 822522654509887488 | e7c6ad5429434ec7b8c159d44e126579 |
### 其它表 — 样本数据(脱敏后)
- 参见源码数据表格,依据脱敏规则处理。若需扩展,请按同样模板添加。
-----------------------------------------------------------------------------
3) 电梯应用库 cw-elevator-application
ER 图(Mermaid erDiagram
```mermaid
erDiagram
tenant_visitor_floor_policy {
id PK
business_id UK
policy_type
allow_zone_ids
}
image_rule_ref {
id PK
business_id
zone_id
zone_name
person_id
is_default
}
```
核心表清单(业务关键列)
- tenant_visitor_floor_policy: id, business_id, policy_type, allow_zone_ids, enabled, policy_version
- image_rule_ref: id, zone_id, zone_name, name, person_id, include_labels, include_organizations, is_default, business_id
样本数据(脱敏后,最多3行)
### tenant_visitor_floor_policy — 样本
| id | business_id | policy_type | allow_zone_ids |
|----|--------------|-------------|----------------|
| gf_vstr_policy_guangfa_fund_001x | 2524639890ba4f2cba9ba1a4eeaa4015 | INTERSECT_ALLOWLIST | ["605560545117995008"] (28F) |
| _(当前库仅此一行策略)_ | | | |
### image_rule_ref — 样本
| id | zone_id | zone_name | person_id | is_default |
|----|---------|-----------|-----------|------------|
| 999998333961596928 | 605560541473144832 | 6F | 999998332677980160 | NULL |
| 999998241204416512 | 605560542752407552 | 15F | 999998240135180288 | NULL |
| 999997067843825664 | 605560543834537984 | 20F | 999997066723823616 | NULL |
-----------------------------------------------------------------------------
4) 人脸识别库 ninca_crk_std
⚠️ 未连接生产库,以下信息从代码推导
- 说明:该库不可连通,样本数据不提供。表与字段推导基于代码注释及 Mapper 命名推断,具体字段以生产环境为准。
- 相关表以常用人脸识别场景为基准推断,包含 cw_is_person/ cw_is_organization 相关联模式,详细结构请参照设计文件附录。
-----------------------------------------------------------------------------
5) 报警库 alarm_deploy
⚠️ 未连接生产库,以下信息从代码推导
- 说明:该库不可连通,样本数据不提供。推导基于 Alarm 领域常规表命名与 Mapper 文件结构。
- 具体表结构以代码为准,文档中仅给出 ER 零散草图及字段推导口径。
-----------------------------------------------------------------------------
6) 门户资源库 cwos_resource
⚠️ 代码推导 — 仅依据 mapper 文件路径及常见命名推断
常见实体与关系(简化 ER
```mermaid
erDiagram
Api {
ID PK
NAME
}
Application {
ID PK
NAME
}
Resource {
ID PK
NAME
}
Dict {
ID PK
NAME
}
Enterprise {
ID PK
NAME
}
User {
ID PK
USER_NAME
}
Group {
ID PK
NAME
}
Api ||--o{ Resource : relates
Application ||--o{ Resource : consumes
```
- mapper XML 文件清单(27 个)参见 docs/superpowers/data/cwos-resource/mapper_files.txt;对应的表名映射请以各 XML 内容为准。
- 27 个 mapper 列表:ApiMapper.xml、AppApiMapper.xml、ApplicationApiMapper.xml、ApplicationMapper.xml、AppResMapper.xml、AuthApiMapper.xml、AuthorizationMapper.xml、AuthResourceMapper.xml、DictMapper.xml、DictTypeMapper.xml、EnterpriseMapper.xml、GroupInfoMapper.xml、GroupRoleMapper.xml、ResourceApiMapper.xml、ResourceMapper.xml、RoleApiMapper.xml、RoleAuthMapper.xml、RoleMapper.xml、RoleResourceMapper.xml、ServiceMapper.xml、UserAccountMapper.xml、UserApplicationMapper.xml、UserGroupMapper.xml、UserMapper.xml、UserResMapper.xml、UserRoleMapper.xml、以及 Oracle/SqlServer 对应分支等。
备注:cwos_resource 的 ER 及列定义以 mapper 内容推导为主,实际情况请以 Mapper XML 文件为准。
-----------------------------------------------------------------------------
7) 跨库关系总图
跨库关系概要:cw_is_organization.BUSINESS_ID ↔ tenant_visitor_floor_policy.business_idcw_is_person.ID ↔ image_rule_ref.person_id(通过 API 字段 personId);cw_is_person.ID → cw_is_person_organization_ref.PERSON_ID → cw_is_organization.IDcw_is_person_label_ref 将 cw_is_person 与 cw_is_label 关联以支持访客标签。
```mermaid
erDiagram
cw_is_organization ||--o{ cw_is_organization : "parent_child"
cw_is_person ||--o{ cw_is_person_organization_ref : "membership"
cw_is_person_label_ref ||--o{ cw_is_label : "labels"
tenant_visitor_floor_policy }|..|| image_rule_ref : "policy_link"
%% 跨库对齐示意
cw_is_organization.BUSINESS_ID }|..|| tenant_visitor_floor_policy.BUSINESS_ID : "跨库 BUSINESS_ID 对齐"
cw_is_person.ID }|..|| image_rule_ref.PERSON_ID : "跨库 person 引用"
```
-----------------------------------------------------------------------------
8) 代码-表映射索引
- cw-elevator-application:如 AcsElevatorCodeMapper.xml、AcsDeviceTaskMapper.xml、AcsElevatorDeviceMapper.xml、DeviceImageStoreMapper.xml、TenantVisitorFloorPolicyMapper.xml、AcsElevatorRecordMapper.xml、AcsPassRuleMapper.xml、AcsRecogRecordMapper.xml、ImageRuleRefMapper.xml、SendRecordTimeMapper.xml 等,均映射到相应的 elevator/record/… 表。
- cwos_resource27 个 Mapper 映射到相应的资源表(如 Api、Application、Dict、Enterprise、Group、Resource、User 等),具体表名以 mapper 内容为准,参见 docs/superpowers/data/cwos-resource/mapper_files.txt。
- 代码表映射是动态的,请以 Mapper XML 实际内容为准进行对照。
附注:该部分为索引性描述,方便对照查阅。
-----------------------------------------------------------------------------
9) 附录 — 验证 SQL 模板
- 数据库概览查询
```
SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE, TABLE_ROWS
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA IN ('component-organization','cw-elevator-application','ninca_crk_std','alarm_deploy','cwos_resource')
ORDER BY TABLE_SCHEMA, TABLE_NAME;
```
- 列字段清单(示例:component-organization 的核心表 cw_is_organization
```
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_KEY
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'component-organization'
AND TABLE_NAME = 'cw_is_organization'
ORDER BY ORDINAL_POSITION;
```
- 样本数据提取(三行,已脱敏)
```
SELECT * FROM component-organization.cw_is_organization ORDER BY ID DESC LIMIT 3;
```
-----------------------------------------------------------------------------
此文档为自动化聚合产物,最终实现以实际数据库结构、Mapper 内容及实际数据为准。
@@ -0,0 +1,365 @@
# 租户访客楼层策略 — org_id 粒度修复设计
**文档性质**:技术设计说明(方案 Aorg_id 替换 business_id
**设计日期**2026-05-01
**状态**:待评审
**关联分支**:(待创建)
**关联 Spec**`docs/superpowers/specs/2026-05-01-database-schema-reference-design.md`
---
## 1. 问题陈述
### 1.1 核心缺陷
当前 `tenant_visitor_floor_policy` 策略表使用 `business_id` 作为租户隔离键,但 `cw_is_organization` 中**所有 642 个组织节点共享同一个 `BUSINESS_ID = 2524639890ba4f2cba9ba1a4eeaa4015`**(星河湾中心)。
**后果:整个星河湾中心只能存在一条访客楼层策略**,无法为广发基金(仅允许 28F)和另一入驻公司(仅允许 15F)配置不同的策略。
### 1.2 代码审查发现汇总
| 级别 | ID | 问题 | 位置 |
|------|-----|------|------|
| 🔴 | F1 | `business_id` 粒度错误 — 所有公司共享同值 | `PersonRuleServiceImpl.java:200` |
| 🔴 | F2 | UC-02 完全绕过策略,无安全兜底 | `PersonRuleServiceImpl.java:179-180` |
| 🔴 | F3 | `PersonResult.getOrganizationIds()` 可用但未用于策略匹配 | `PersonRuleServiceImpl.java:194` |
| 🟡 | W1 | `zoneService.page` 只查第一个楼层,后续盲写 | `PersonRuleServiceImpl.java:222-223` |
| 🟡 | W2 | JSON 解析失败静默降级(warn → 应 error | `PersonRuleServiceImpl.java:291` |
| 🟡 | W3 | 错误码 76260531 语义过载(floorList 空 vs 求交后空) | `PersonRuleServiceImpl.java:196,218` |
| 🟢 | O1 | 每次请求查库,无缓存 | `PersonRuleServiceImpl.java:200` |
| 🟢 | O2 | `image_rule_ref.person_id` 访客/员工语义混淆 | `PersonRuleServiceImpl.java:235` |
### 1.3 方案选择
| 方案 | 描述 | 选择 |
|------|------|------|
| A | `org_id` 直替 `business_id` | ✅ **选中** |
| B | 多级策略查找(org_id + business_id 双层) | ❌ 复杂度过高 |
| C | 组织树向上查找 | ❌ 依赖额外 Feign 调用 |
---
## 2. 数据模型变更
### 2.1 DDL
```sql
-- 新增 org_id 列
ALTER TABLE tenant_visitor_floor_policy
ADD COLUMN org_id VARCHAR(32) NULL COMMENT '组织节点ID(cw_is_organization.ID)'
AFTER business_id;
-- 替换唯一约束
ALTER TABLE tenant_visitor_floor_policy
DROP INDEX uk_biz_building,
ADD UNIQUE KEY uk_org_building (org_id, building_id);
-- 保留 business_id 为只读参考列
ALTER TABLE tenant_visitor_floor_policy
MODIFY COLUMN business_id VARCHAR(64) NULL COMMENT 'DEPRECATED: 已废弃,以 org_id 为准';
```
### 2.2 约束说明
- `UNIQUE(org_id, building_id)`:一个公司在同一楼栋只能有一条策略
- `org_id = NULL` 的行不参与查询,仅作历史数据保留
- `building_id = NULL` 表示租户级策略(当前唯一楼栋场景下均为 NULL)
- MySQL 中多行 `(org_A, NULL)``(org_B, NULL)` 不冲突
### 2.3 实际数据验证
```
tenant_visitor_floor_policy 当前: 1 行,building_id = NULL
elevator_device 当前: 126 台设备,全部 building_id = 605560539791228928(星河湾中心)
device_image_store 当前: 1 行,building_id = 605560539791228928
→ 当前只有一个楼栋,building_id 字段尚未启用多楼栋场景
```
---
## 3. 代码变更
### 3.1 Mapper SQL
**文件**`TenantVisitorFloorPolicyMapper.xml`
```xml
<select id="selectEnabledByOrgId" resultType="...TenantVisitorFloorPolicyDto">
SELECT id, org_id AS orgId, policy_type AS policyType,
allow_zone_ids AS allowZoneIds, building_id AS buildingId,
enabled, policy_version AS policyVersion
FROM tenant_visitor_floor_policy
WHERE org_id = #{orgId,jdbcType=VARCHAR}
AND enabled = 1
AND policy_type = 'INTERSECT_ALLOWLIST'
AND (building_id IS NULL OR building_id = '')
ORDER BY updated_at DESC, policy_version DESC
LIMIT 1
</select>
```
### 3.2 DAO 接口
**文件**`TenantVisitorFloorPolicyDao.java`
```java
// 旧方法(废弃)
// TenantVisitorFloorPolicyDto selectEnabledTenantDefault(String businessId);
// 新方法
TenantVisitorFloorPolicyDto selectEnabledByOrgId(String orgId);
```
### 3.3 DTO
**文件**`TenantVisitorFloorPolicyDto.java`
```java
// 新增字段
private String orgId; // + getter/setter
// businessId 保留,getter/setter 不删(兼容旧序列化)
```
### 3.4 Service 核心逻辑
**文件**`PersonRuleServiceImpl.java``addVisitor` 方法
关键改动:
```
旧: policy = dao.selectEnabledTenantDefault(context.getCompany().getCompanyId());
→ 所有公司返回同一条策略
新: orgIds = personResult.getOrganizationIds();
遍历 orgIds 查策略,取第一个命中
→ 不同公司返回各自策略
```
完整控制流见 §4。
### 3.5 W2 修复 — JSON 解析日志升级
```java
} catch (Exception e) {
this.logger.error("allow_zone_ids JSON 无效,策略失效!orgId={} policyId={} raw={}",
orgId, policy.getId(), json, e); // warn → error
return Collections.emptyList();
}
```
---
## 4. 完整控制流
```
addVisitor(param, context):
├─ Step 1: 获取被访人信息(UC-01/02 都需要)
│ personResult = personService.detail(param.personId)
│ hostFloors = personResult.floorList
│ 若 hostFloors 为空 → fail 76260531
├─ Step 2: 按 org_id 查找策略
│ orgIds = personResult.organizationIds
│ 遍历 orgIds:
│ policy = dao.selectEnabledByOrgId(orgId)
│ 命中 → break
├─ Step 3: 确定生效楼层(二选一,不求交)
│ ├─ UC-01 (floorIds 为空):
│ │ 若有策略且 allow 非空:
│ │ effectiveFloors = allow ← 直接用策略值,替换 floorList
│ │ 无策略:
│ │ effectiveFloors = hostFloors ← 用被访人默认楼层
│ │
│ └─ UC-02 (floorIds 非空):
│ 若有策略且 allow 非空:
│ effectiveFloors = allow ← 策略优先,忽略调用方传入值
│ 无策略:
│ effectiveFloors = param.floorIds ← 用调用方传入值
│ 软校验: floorId 不在 hostFloors 中 → WARN 日志
├─ Step 4: 约束校验(allow ⊆ floorList
│ 若 effectiveFloors 中任何值不在 hostFloors 中 → ERROR 日志 + fail 76260533
│ (策略配置了被访人无权访问的楼层 = 安全风险,拒绝)
└─ Step 5: 落库(不变)
zoneService.page → image_rule_ref insert → batchBind → updateGroupPersonRef
```
### 4.1 核心语义:二选一,不求交
| 条件 | 生效楼层 |
|------|----------|
| 策略存在且 allow 非空 | **`allow`**(直接替换,不做交集) |
| 无策略 / enabled=0 / allow 为空 | **被访人 floorList**UC-01)或 **调用方 floorIds**UC-02 |
| 维度 | 变更前 | 变更后 |
|------|--------|--------|
| 策略生效逻辑 | `floorList ∩ allow`(求交) | `allow` 直接替换 `floorList` |
| UC-02 是否查策略 | ❌ 不查 | ✅ 查(策略优先) |
| allow 含无效楼层 | 交集自动排除 | ERROR 日志 + fail 76260533 |
### 4.2 辅助方法
```java
/** 按 org_id 查找策略,遍历 organizationIds 取第一个命中 */
private TenantVisitorFloorPolicyDto findPolicyByOrgIds(List<String> orgIds) {
if (CollectionUtils.isEmpty(orgIds)) return null;
for (String orgId : orgIds) {
TenantVisitorFloorPolicyDto p = tenantVisitorFloorPolicyDao.selectEnabledByOrgId(orgId);
if (p != null && p.getEnabled() != null && p.getEnabled() == 1) {
List<String> allow = parseAllowZoneIds(p.getAllowZoneIds());
if (!CollectionUtils.isEmpty(allow)) return p;
}
}
return null;
}
/**
* 二选一:有策略用 allow,无策略用 fallbackFloors。
* 约束:allow 必须是 hostFloors 的子集,否则拒绝。
*/
private List<String> resolveEffectiveFloors(
List<String> fallbackFloors, List<String> hostFloors,
TenantVisitorFloorPolicyDto policy, String personId) {
if (policy == null) return fallbackFloors;
List<String> allow = parseAllowZoneIds(policy.getAllowZoneIds());
if (CollectionUtils.isEmpty(allow)) return fallbackFloors;
// 安全校验:allow 中每个值必须在 hostFloors 中存在
Set<String> hostSet = new HashSet<>(hostFloors);
List<String> unknownAllow = allow.stream()
.filter(a -> !hostSet.contains(a))
.collect(Collectors.toList());
if (!unknownAllow.isEmpty()) {
this.logger.error("策略配置错误:allow 包含不在被访人 floorList 中的 zoneId"
+ "orgId={} policyId={} personId={} unknownAllow={} hostFloors={}",
policy.getOrgId(), policy.getId(), personId, unknownAllow, hostFloors);
throw new ServiceException("76260533",
"策略配置了被访人无权访问的楼层,请联系管理员");
}
this.logger.info("策略生效 orgId={} policyId={} v={} allow={} hostSize={}",
policy.getOrgId(), policy.getId(), policy.getPolicyVersion(),
allow.size(), hostFloors.size());
return allow; // 直接用 allow,不求交
}
```
### 4.3 关键设计约束:allow ⊆ floorList(强制)
策略的 `allow_zone_ids` **必须是被访人 `floorList` 的子集**。因为生效逻辑是「有策略直接用 allow」,如果 allow 包含被访人无权访问的楼层 → 访客获得越权 → **直接拒绝**
| 场景 | 处理 |
|------|------|
| `allow = [28F]`, `floorList = [28F, 29F]` | ✅ 正常:allow ⊆ floorList,生效 [28F] |
| `allow = [28F, 99F]`, `floorList = [28F, 29F]` | ❌ 配置错误:99F 不在 floorList → ERROR + fail 76260533 |
| `allow = [28F]`, `floorList = [29F, 30F]` | ❌ 配置错误:28F 不在 floorList → ERROR + fail 76260533 |
- 校验在 `resolveEffectiveFloors` 中执行
- 不满足时 **`throw ServiceException("76260533")`**,请求失败
- 新增错误码 **76260533**:「策略配置了被访人无权访问的楼层,请联系管理员」
---
## 5. 数据迁移
### 5.1 执行顺序
```
Step 1: DDL 上线(表结构变更,不影响行为)
→ ALTER TABLE 加 org_id 列 + 新唯一约束
Step 2: 数据迁移(人工 SQL,按公司逐行执行)
→ 查询 cw_is_organization 获取各公司 org_id
→ UPDATE tenant_visitor_floor_policy SET org_id = ? WHERE ...
Step 3: 发应用包(代码切到 org_id 查询)
→ Mapper SQL: business_id → org_id
→ Service: 取 organizationIds 遍历查策略
Step 4(可选): 废弃 business_id 列
→ MODIFY COLUMN ... COMMENT 'DEPRECATED'
```
### 5.2 数据迁移 SQL 模板
```sql
-- 1. 列出所有公司级组织节点
SELECT o.ID, o.NAME, o.PARENT_ID
FROM component-organization.cw_is_organization o
WHERE o.BUSINESS_ID = '2524639890ba4f2cba9ba1a4eeaa4015'
AND o.IS_DEL = 0
ORDER BY o.NAME;
-- 2. 为指定公司设置策略
UPDATE cw-elevator-application.tenant_visitor_floor_policy
SET org_id = '<目标公司 org_id>'
WHERE business_id = '2524639890ba4f2cba9ba1a4eeaa4015'
AND org_id IS NULL;
-- 3. 为其他公司新增策略行
INSERT INTO tenant_visitor_floor_policy
(id, org_id, policy_type, allow_zone_ids, building_id, enabled, policy_version, remark, created_at, updated_at)
VALUES
(REPLACE(UUID(),'-',''), '<org_id>', 'INTERSECT_ALLOWLIST', '["<zone_id>"]', NULL, 1, 1, '', UNIX_TIMESTAMP(NOW())*1000, UNIX_TIMESTAMP(NOW())*1000);
```
### 5.3 向后兼容
| 场景 | 行为 |
|------|------|
| `org_id = NULL` 的行 | `WHERE org_id = ?` 不匹配,等同于无策略 |
| 旧 `business_id` 策略未迁移 | 全量 floorList(与现网一致) |
| 新代码 + 旧表结构 | SQL 报错 → 回滚应用包 |
| 应用回滚 | 旧代码仍用 `business_id` 查询,行为不变 |
---
## 6. 测试策略
| ID | 场景 | 期望结果 |
|----|------|----------|
| T1 | A公司有策略 allow=[28F],被访人 floorList=[28F,29F]UC-01 | effective=[28F](直接用 allow |
| T2 | A公司有策略 allow=[28F],被访人 floorList=[29F,30F]UC-01 | **fail 76260533**28F 不在 floorList 中) |
| T3 | B公司无策略,被访人 floorList=[15F,16F]UC-01 | effective=[15F,16F](用 floorList |
| T4 | 被访人属 [A公司, C公司]A有策略 allow=[28F] | 命中A策略→effective=[28F] |
| T5 | 被访人属 [B公司, D公司],均无策略 | effective=floorList 全集 |
| T6 | UC-02 传 [15F]B公司无策略 | effective=[15F](用调用方值) |
| T7 | UC-02 传 [15F]A公司有策略 allow=[28F] | effective=[28F](策略优先,忽略调用方) |
| T8 | 策略 enabled=0 | 等同无策略→用 floorList |
| T9 | `allow_zone_ids` 为非法 JSON `["28F"` | ERROR 日志 + 等同无策略 |
| T10 | 策略 allow=[28F,99F]floorList=[28F,29F] | **fail 76260533**99F 不在 floorList |
| T11 | 回滚:新 DDL + 旧代码 | 行为不变 |
---
## 7. 风险与缓解
| 风险 | 概率 | 缓解 |
|------|------|------|
| `organizationIds` 为空(被访人无组织归属) | 低 | 降级为无策略→全量 floorList |
| DBA 迁移时填错 org_id | 中 | 迁移前 `SELECT` 确认 NAME 匹配,迁移后抽样验证 |
| 多公司共用一个 org_id(父子组织) | 低 | 当前需求是公司级粒度;未来如需子树继承可升级到方案C |
| UC-02 调用方依赖旧行为(不查策略) | 中 | 发版说明明确标注行为变更;灰度发布 |
---
## 8. 文件清单
| 文件 | 操作 | 说明 |
|------|------|------|
| `docs/sql/tenant_visitor_floor_policy_v2.sql` | 新增 | DDL 变更脚本 |
| `TenantVisitorFloorPolicyMapper.xml` | 修改 | `business_id``org_id` |
| `TenantVisitorFloorPolicyMapper.java` | 修改 | 方法签名 |
| `TenantVisitorFloorPolicyDao.java` | 修改 | 接口方法 |
| `TenantVisitorFloorPolicyDaoImpl.java` | 修改 | 调用新 Mapper 方法 |
| `TenantVisitorFloorPolicyDto.java` | 修改 | 新增 `orgId` 字段 |
| `PersonRuleServiceImpl.java` | 修改 | `addVisitor` + 新增辅助方法 |
---
*本文档为 org_id 粒度修复的技术设计;实施以代码评审与安全评审结论为准。*
@@ -0,0 +1,356 @@
# org_id 策略修复 — 无鉴权验证方案设计
**文档性质**:验证方案设计说明
**设计日期**2026-05-01
**状态**:待评审
**关联 Spec**`docs/superpowers/specs/2026-05-01-org-id-policy-fix-design.md`
**被测应用**`cw-elevator-application`V2, port 18081
---
## 1. 目标
通过无鉴权 HTTP 调用 `POST /elevator/person/add/visitor``POST /elevator/passRule/image`,验证 org_id 策略修复的 7 个核心场景,确保业务逻辑满足需求。
**不验证**:鉴权正确性、Feign 调用链、图库绑定、Consul 服务发现。
---
## 2. 完整业务流程与接口调用链
### 2.1 业务全景
```
Step 0: 访客邀约(上游,非电梯侧)
┌─────────────────────────────────────────────────┐
│ 第三方业务系统(BFF / intelligent / 登记页) │
│ ├── 创建访客人员档案(cw_is_person + 访客标签) │
│ └── 确定被访人(host personId
└─────────────────────────────────────────────────┘
→ 访客已存在于组织库中,personId 可用
→ 本方案使用预置测试访客(919900... 号段),跳过此步
Step 1: 设置访客可访问楼层(电梯侧,核心验证目标)
POST /elevator/person/add/visitor
┌──────────────────────────────────────────────────────┐
│ ① Feign → /component/person/detail │
│ 取被访人 floorList + organizationIds │
│ │
│ ② 查 tenant_visitor_floor_policy │
│ WHERE org_id = ? (从 organizationIds 取) │
│ │
│ ③ 二选一: │
│ 有策略 → effectiveFloors = allow(直接替换) │
│ 无策略 → effectiveFloors = floorList │
│ allow 含无效值 → fail 76260533 │
│ │
│ ④ Feign → /sysetting/zone/page │
│ 取楼栋 + 图库 imageStoreId │
│ │
│ ⑤ 写 image_rule_ref(访客 personId ← visitorId
│ │
│ ⑥ Feign → /component/imagestore/person/batchBind │
│ 访客绑定到楼栋图库 │
└──────────────────────────────────────────────────────┘
Step 2: 回读验证(确认楼层写入正确)
POST /elevator/passRule/image
Body: { "personId": "<visitorId>" }
→ 返回该访客可访问的 zoneId 列表
→ 与期望楼层比对
```
### 2.2 接口调用细节
#### POST /elevator/person/add/visitor
| 项目 | 值 |
|------|-----|
| Method | POST |
| Path | `/elevator/person/add/visitor` |
| Content-Type | `application/json` |
| 鉴权模式 | noauth-probe(仅 `businessid` 头) |
**请求体:**
```json
{
"personId": "1060601019894960128",
"visitorId": "9199000100000000001",
"floorIds": [],
"begVisitorTime": 1751319780000,
"endVisitorTime": 1751406180000
}
```
| 字段 | 必填 | 说明 |
|------|------|------|
| `personId` | 是 | 被访人 ID(决定 floorList 和 org_id 来源) |
| `visitorId` | 是 | 访客 ID(落库 image_rule_ref 的 person_id |
| `floorIds` | 否 | **空数组**=UC-01 由电梯补全;**非空**=UC-02 调用方指定 |
| `begVisitorTime` | 是 | Unix 毫秒,访客有效期开始 |
| `endVisitorTime` | 是 | Unix 毫秒,访客有效期结束 |
**响应体(成功):**
```json
{ "success": true, "code": "0", "data": true }
```
**响应体(策略拒绝):**
```json
{ "success": false, "code": "76260533", "message": "策略配置了被访人无权访问的楼层,请联系管理员" }
```
#### POST /elevator/passRule/image(回读)
| 项目 | 值 |
|------|-----|
| Method | POST |
| Path | `/elevator/passRule/image` |
| Body | `{ "personId": "<visitorId>" }` |
**响应体:**
```json
{
"success": true,
"data": {
"datas": [
{ "zoneId": "605560545117995008", "zoneName": "28F" }
]
}
}
```
### 2.3 策略在流程中的位置
```
add/visitor 请求进入
├─ personId → Feign detail() → { floorList, organizationIds }
├─ organizationIds[0] → SELECT ... FROM tenant_visitor_floor_policy
│ WHERE org_id = ? ← 新:org_id 粒度
│ AND enabled = 1
├─ 有策略行 → effectiveFloors = allow ← 二选一,不求交
│ allow ⊆ floorList 校验
│ └─ 不通过 → 76260533
└─ 无策略行 → effectiveFloors = floorList ← 默认行为
```
---
## 3. 测试环境
| 项目 | 值 |
|------|-----|
| 电梯服务 | `http://127.0.0.1:18081` |
| MySQL 组织库 | `192.168.3.12:3307 / component-organization` |
| MySQL 电梯库 | `192.168.3.12:3307 / cw-elevator-application` |
| 租户 | `businessId = 2524639890ba4f2cba9ba1a4eeaa4015` |
| 调用方式 | noauth-probe(仅 businessid 头,无鉴权 token |
---
## 4. 测试矩阵(7 个用例)
### 4.1 测试数据
| 实体 | ID |
|------|-----|
| 1403艾斯 org | `72fb65ec5de94201b909a98b8bae1892` |
| 1405一博环保 org | `2095de3d541f44eba686c78fda68336f` |
| 星中心物业 org | `f216235e54ca42bfa0379e69b3754aff` |
| 广发基金 org | `488b8ad049bb43408a6fbcc50bcb89ac` |
| 陈国辉(1403+星中心) | `1060601019894960128` |
| 王姣(1405 | `1090779433129840640` |
| 秦夏(广发基金) | `1072908835884208128` |
| 28F zone | `605560545117995008` |
| 6F zone | `605560541473144832` |
### 4.1.1 访客数据
测试使用开发库中已预置的**专用测试访客**(号段 `9199000100000000001`~`9199000100000000020`,均已标注"访客"标签 `LABEL_ID = ed2dbab6d6234a7287106b80857c819e`)。这些是测试专用人员,非真实业务访客。
`add/visitor` 写入 `image_rule_ref` 时以 `visitorId` 为键,为避免同一访客的多次写入相互干扰,每个用例轮换使用不同测试访客。
| 用例 | visitorId | 访客标识 |
|------|-----------|----------|
| T1 | `9199000100000000001` | 测试访客AUTO-01 |
| T2 | `9199000100000000002` | 测试访客AUTO-02 |
| T3 | `9199000100000000003` | 测试访客AUTO-03 |
| T4 | `9199000100000000004` | 测试访客AUTO-04 |
| T5 | `9199000100000000005` | 测试访客AUTO-05 |
| T6 | `9199000100000000006` | 测试访客AUTO-06 |
| T7 | `9199000100000000007` | 测试访客AUTO-07 |
### 4.2 用例
| ID | 场景 | 被访人 | 策略 org | allow | enabled | 期望 |
|----|------|--------|----------|-------|---------|------|
| T1 | 有策略→allow 替换 floorList | 陈国辉 | 1403 | [28F] | 1 | passRule 返回仅 [28F] |
| T2 | 无策略→floorList | 王姣 | 1405 | 无 | — | passRule 返回 floorList 全集 |
| T3 | allow 含无效zone→拒绝 | 陈国辉 | 1403 | [28F, 99F] | 1 | code=76260533 |
| T4 | 多组织命中第一个策略 | 陈国辉 | 1403+星中心 | 1403有,星中心无 | 1 | 命中1403→[28F] |
| T5 | enabled=0 等同无策略 | 陈国辉 | 1403 | [28F] | 0 | passRule 返回 floorList 全集 |
| T6 | UC-02 策略优先 | 陈国辉 | 1403 | [28F] | 1 | 传floorIds被忽略→[28F] |
| T7 | 广发基金迁移验证 | 秦夏 | 广发基金 | [28F] | 1 | 迁移后→仅 [28F] |
---
## 5. 脚本结构
**文件**`maven-cw-elevator-application/tools/visitor_floor_verification/scripts/verify_org_policy_fix.py`
```
verify_org_policy_fix.py
├── Phase 0: health_check()
│ GET /actuator/health
├── Phase 1: prepare_test_data()
│ ① INSERT policy_t1_1403 (org=1403, allow=[28F], enabled=1)
│ ② INSERT policy_t3_invalid (org=1403, allow=[28F,99F], enabled=1)
│ ③ INSERT policy_t5_disabled (org=1403, allow=[28F], enabled=0)
│ ④ UPDATE 广发基金 SET org_id='488b8adb...' WHERE id='gf_vstr_...'
├── Phase 2: run_all_cases()
│ 每个用例:
│ POST add/visitor → 检查 HTTP 200 + code + success
│ 成功 → POST passRule/image → 比对 zoneIds
│ 失败 → 检查 code == 期望错误码
├── Phase 3: cleanup_test_data()
│ ① DELETE 测试策略行
│ ② UPDATE 广发基金 SET org_id=NULL
└── Phase 4: print_report()
输出 JSON 报告到 report/org-policy-fix-verify-{timestamp}.json
```
### 5.1 HTTP 请求格式(noauth-probe
```python
headers = {
"Content-Type": "application/json",
"businessid": "2524639890ba4f2cba9ba1a4eeaa4015"
}
# add/visitor
POST /elevator/person/add/visitor
{
"personId": "1060601019894960128",
"visitorId": "<轮换访客ID>",
"floorIds": [],
"begVisitorTime": <now_ms>,
"endVisitorTime": <now_ms + 86400000>
}
# passRule/image(回读)
POST /elevator/passRule/image
{
"personId": "<visitorId>"
}
```
---
## 6. 数据准备与清理
### 6.1 准备 SQL
```sql
-- T1/T4/T6 共用
INSERT INTO tenant_visitor_floor_policy
(id, org_id, business_id, policy_type, allow_zone_ids, building_id, enabled, policy_version, created_at, updated_at)
VALUES ('policy_t1_1403', '72fb65ec5de94201b909a98b8bae1892', NULL, 'INTERSECT_ALLOWLIST',
'["605560545117995008"]', NULL, 1, 1, UNIX_TIMESTAMP(NOW())*1000, UNIX_TIMESTAMP(NOW())*1000);
-- T3
INSERT INTO tenant_visitor_floor_policy
(id, org_id, business_id, policy_type, allow_zone_ids, building_id, enabled, policy_version, created_at, updated_at)
VALUES ('policy_t3_invalid', '72fb65ec5de94201b909a98b8bae1892', NULL, 'INTERSECT_ALLOWLIST',
'["605560545117995008","605560540000000000"]', NULL, 1, 1, UNIX_TIMESTAMP(NOW())*1000, UNIX_TIMESTAMP(NOW())*1000);
-- T5
INSERT INTO tenant_visitor_floor_policy
(id, org_id, business_id, policy_type, allow_zone_ids, building_id, enabled, policy_version, created_at, updated_at)
VALUES ('policy_t5_disabled', '72fb65ec5de94201b909a98b8bae1892', NULL, 'INTERSECT_ALLOWLIST',
'["605560545117995008"]', NULL, 0, 1, UNIX_TIMESTAMP(NOW())*1000, UNIX_TIMESTAMP(NOW())*1000);
-- T7: 广发基金迁移
UPDATE tenant_visitor_floor_policy
SET org_id = '488b8ad049bb43408a6fbcc50bcb89ac'
WHERE id = 'gf_vstr_policy_guangfa_fund_001x';
```
### 6.2 清理 SQL
```sql
DELETE FROM tenant_visitor_floor_policy WHERE id IN ('policy_t1_1403','policy_t3_invalid','policy_t5_disabled');
UPDATE tenant_visitor_floor_policy SET org_id = NULL WHERE id = 'gf_vstr_policy_guangfa_fund_001x';
```
### 6.3 执行顺序
```text
prepare:
INSERT policy_t1_1403 (T1/T4/T6 使用)
INSERT policy_t3_invalid (T3 使用)
INSERT policy_t5_disabled (T5 使用)
UPDATE 广发基金 SET org_id (T7 使用)
execute:
T1: 陈国辉 + policy_t1_1403 → allow=[28F]
T3: 陈国辉 + policy_t3_invalid → 76260533(需先改1403的org_id或先DELETE T1再切换)
T4: 陈国辉(多组织) + policy_t1 → allow=[28F]
T5: 陈国辉 + policy_t5_disabled → floorList全集
T2: 王姣(无策略) → floorList全集
T6: 陈国辉(UC-02) + policy_t1 → allow=[28F]
T7: 秦夏 + 广发基金策略 → allow=[28F]
cleanup:
DELETE 测试行
UPDATE 广发基金 SET org_id=NULL
```
> T3 执行前需确保 policy_t1_1403 不生效(相同 org_id 只能有一条启用策略)。方案:T3 前 DELETE policy_t1_1403T3 后恢复 INSERT。
---
## 7. 验证判定规则
| 判定项 | 通过条件 |
|--------|----------|
| HTTP 状态 | `add/visitor` 返回 200 |
| 业务成功 | `response.success == true` |
| 业务失败 | `response.code == "76260533"` |
| 楼层匹配 | `passRule/image` 返回的 zoneId 集合 == 期望集合(顺序无关) |
| 脱敏 | 报告中不出现 PII(姓名/手机号) |
---
## 8. 输出
```
report/org-policy-fix-verify-{timestamp}.json
```
包含:每个用例的请求/响应摘要、passRule 结果、期望 vs 实际对比、通过/失败汇总。
---
## 9. 文件清单
| 文件 | 操作 | 说明 |
|------|------|------|
| `tools/visitor_floor_verification/scripts/verify_org_policy_fix.py` | 新增 | 主验证脚本 |
| `tools/visitor_floor_verification/report/` | — | 报告输出目录(已有) |
---
*本设计说明待评审,通过后转入 implementation。*
@@ -0,0 +1,113 @@
# org_id 策略修复 — 人工验证操作手册
## 前置条件
- V2 JAR 已构建:`deploy/v2-maven/cw-elevator-application-V1.0.0.20211103.jar`v2.0.17
- 配置文件:`/tmp/v2-redis-fix.properties`
- Redis Docker`v2-test-redis`(端口 6380,密码 `1qaz!QAZ`
- 桩服务脚本:`stub_org_service.py`
---
## 步骤 1:启动 V2 电梯应用
打开**终端 1**,执行:
```bash
/usr/lib/jvm/java-8-openjdk-amd64/bin/java \
-jar /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/源码/maven-cw-elevator-application/deploy/v2-maven/cw-elevator-application-V1.0.0.20211103.jar \
--spring.config.location=file:/tmp/v2-redis-fix.properties
```
等待约 **35 秒**,看到 `Started AppApplication` 后验证:
```bash
curl http://127.0.0.1:18081/health
```
期望输出:`{"status":"UP"}`
---
## 步骤 2:启动组织服务桩
打开**终端 2**,执行:
```bash
python3 /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/源码/maven-cw-elevator-application/tools/stub_org_service.py
```
验证:
```bash
curl http://127.0.0.1:18082/health
```
期望输出:`{"status":"UP"}`
---
## 步骤 3:运行验证脚本
打开**终端 3**,执行:
```bash
cd /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/源码/maven-cw-elevator-application/tools/visitor_floor_verification
python3 scripts/verify_org_policy_fix.py --elevator-base-url http://127.0.0.1:18081
```
期望输出:
```
=== Phase 2: run 7 cases ===
[T1] 有策略→allow替换floorList → ✅
[T2] 无策略→floorList → ✅
[T3] allow含无效zone→拒绝 (76260533) → ✅
[T4] 多组织命中第一个策略 → ✅
[T5] enabled=0等同无策略 → ✅
[T6] UC-02策略优先 → ✅
[T7] 广发基金迁移验证 → ✅
Passed: 7/7
```
报告文件:`report/org-policy-fix-verify-YYYYMMDD-HHMMSS.json`
---
## 步骤 4:停止服务
```bash
# 终端1 按 Ctrl+C
# 终端2 按 Ctrl+C
```
---
## 故障排查
| 症状 | 原因 | 解决 |
|------|------|------|
| V2 启动报 `RedisConnectionException` | Redis 密码未配置或端口错误 | 确认 `v2-test-redis` 运行中:`docker ps \| grep v2-test-redis` |
| V2 报 `UnknownHostException: mysql_01` | ShardingSphere 数据源未覆盖 | 确认使用了 `--spring.config.location=file:/tmp/v2-redis-fix.properties` |
| 桩服务端口被占用 | 上次未正常退出 | `pkill -f stub_org_service` |
| 验证脚本 `Connection refused` | V2 或桩未启动 | 检查终端 1/2 的服务日志 |
| DB 连接失败 | MySQL 密码错误 | 确认 `192.168.3.12:3307 root/123456` 可达 |
---
## 本地 Docker 基础设施
| 服务 | 容器名 | 端口 | 说明 |
|------|--------|------|------|
| Redis | `v2-test-redis` | 6380 | 密码 `1qaz!QAZ` |
| Kafka | `ybs-kafka` | 9092 | 无认证 |
| Consul | — | 192.168.3.12:8500 | 远程 |
| MySQL | — | 192.168.3.12:3307 | root/123456 |
如需重建 Redis
```bash
docker rm -f v2-test-redis
docker run -d --name v2-test-redis -p 6380:6379 redis:7-alpine --requirepass "1qaz!QAZ"
```
@@ -0,0 +1,137 @@
# 电梯应用 — 服务发现架构设计
**日期**2026-05-01(初稿)/ 2026-05-05(基线更新)
**版本**v2.0.17(当前基线)
**状态**:已实施
> **说明**:本文档最初记录 Dubbo/ZooKeeper 发现方案(目标架构),但在实践中发现该方案与 V1 生产实际不符。下方 §1~§5 保留为历史方案记录,§6 起为 **实际实施态**。当前基线 v2.0.17 以 §6 为准。
---
## 实际实施态(v2.0.17
### §6. 实际服务发现架构
电梯应用(cw-elevator-application)的三个上游 Feign 客户端通过 **Ribbon + ConfigurationBasedServerList + 静态 IP 列表** 实现服务寻址,与 V1 生产行为一致。
| 上游服务 | Feign 名称 | 实际发现方式 |
|---------|-----------|------------|
| 人脸识别 GPU | `ninca-crk-std` | **ConfigurationBasedServerList**V1 同) |
| 组织组件 | `ninca-common-component-organization` | **ConfigurationBasedServerList**V1 同) |
| 公共组件 | `ninca-common` | **ConfigurationBasedServerList**V1 同) |
### §7. 实际发现链路
```
业务代码 → @FeignClient(name = "${feign.xxx.name:...}")
Feign → Ribbon LoadBalancer
ConfigurationBasedServerList ← discovery.enabled=false 时 Ribbon 默认
│ (无 Consul/ConsulServerList 参与)
{name}.ribbon.listOfServers ← 从 application.properties 读取
目标 HTTP 服务 (IP:Port)
```
**关键配置**
```properties
# bootstrap.properties — 与 V1 生产完全一致
spring.cloud.consul.discovery.enabled=false # 不启用 Consul 发现客户端
spring.cloud.consul.discovery.register=true # 仅注册自身到 Consul
```
```properties
# application.properties — 服务名映射(运行时需按环境配置)
feign.ninca-crk-std.name=ninca-crk-std
feign.component-organization.name=ninca-common-component-organization
feign.ninca-common.name=ninca-common
# 静态 IP 列表由环境中 application.properties 按需配置:
# ninca-crk-std.ribbon.listOfServers=10.0.22.102:16106
# ninca-common-component-organization.ribbon.listOfServers=...
```
### §8. V1 vs V2 对比(实施态)
| | V1 生产 | V2 v2.0.17 |
|------|---------|-----------|
| ninca-crk-std | ConfigurationBasedServerList | ConfigurationBasedServerList ✅ |
| ninca-common-component-organization | ConfigurationBasedServerList | ConfigurationBasedServerList ✅ |
| ninca-common | ConfigurationBasedServerList | ConfigurationBasedServerList ✅ |
| @RibbonClients | 无 | 无 ✅ |
| RibbonConfiguration 类 | 无 | 无 ✅ |
| bootstrap.properties | 见星中心 | **完全一致** ✅ |
| 主类名 | AppApplication | AppApplication ✅ |
| JAR 文件名 | cw-elevator-application-V1.0.0.20211103.jar | **一致** ✅ |
### §9. 关键设计决策
| 决策 | 选择 | 原因 |
|------|------|------|
| Consul 发现 | `discovery.enabled=false` | 与 V1 生产一致;只注册不发现 |
| 服务寻址 | ConfigurationBasedServerList | Ribbon 默认行为,无需额外配置 |
| ZK 发现依赖 | **已从 POM 移除** | V1 没有该依赖,V2 不需要引入 |
| 静态 IP 配置 | 通过 `{name}.ribbon.listOfServers` 注入 | 与 V1 生产实际部署方式一致 |
### §10. 运维说明
- **每台服务器需配置本机的 `listOfServers`**(三台服务器各自指向本机或对端实例)。
- 若使用 Consul 做健康检查,`discovery.enabled=false` 不影响 Consul 注册(`register=true`)。
- 测试环境可使用 `application-test.properties` 覆盖 `listOfServers` 指向本地桩服务。
---
## 历史方案记录(目标架构,未实施)
以下 §1~§5 为 2026-05-01 设计的目标架构,**实际 v2.0.17 未采用此方案**。保留以记录设计历史。
### §1. 原计划核心决策
电梯应用的三个上游 Feign 客户端 **统一走 Dubbo/ZooKeeper 动态发现**,不依赖任何 `@RibbonClient` 定制或 `ConfigurationBasedServerList` 静态列表。
| 上游服务 | Feign 名称 | 原计划发现方式 |
|---------|-----------|--------------|
| 人脸识别 GPU | `ninca-crk-std` | Dubbo/ZooKeeper(❌ 未实施) |
| 组织组件 | `ninca-common-component-organization` | Dubbo/ZooKeeper(❌ 未实施) |
| 公共组件 | `ninca-common` | Dubbo/ZooKeeper(❌ 未实施) |
### §2. 原计划服务发现链路(未实施)
```
ElevatorApplication
│ @EnableFeignClients(basePackages={...})
├── Feign Client ──→ Ribbon (默认) ──→ DiscoveryClient ──→ Dubbo Registry
│ zookeeper://10.0.22.207:2181
```
### §3. 原计划配置清单(未实施)
```properties
# bootstrap.properties — 原计划使用 ZK 发现
spring.cloud.consul.discovery.enabled=false
dubbo.registry.address=zookeeper://10.0.22.207:2181
# 实际 v2.0.17 已移除 ZK 发现依赖,此配置不生效
```
### §4. 原计划 V1 vs V2 对比(未实施)
| | V1 生产 | V2(原计划) |
|------|---------|------------|
| ninca-crk-std | ConfigurationBasedServerList | Dubbo/ZK(❌ 未实施) |
| ninca-common-component-organization | ConfigurationBasedServerList | Dubbo/ZK(❌ 未实施) |
| ninca-common | ConfigurationBasedServerList | Dubbo/ZK(❌ 未实施) |
### §5. 原计划删除清单(已执行)
| 文件 | 操作 | 状态 |
|------|------|------|
| `NincaCrkStdRibbonConfiguration.java` | 删除 | ✅ 已删除 |
| `OrgServiceRibbonConfiguration.java` | 从未存在 | — |
| `CommonServiceRibbonConfiguration.java` | 从未存在 | — |
| `ElevatorApplication.java``@RibbonClients` | 删除 | ✅ 已清理 |
@@ -0,0 +1,280 @@
# V2 全系统功能测试环境搭建 — 设计文档
**日期**: 2026-05-01
**状态**: 待实施
**关联**: AGENTS.md, maven-cw-elevator-application/deploy/
---
## 1. 目标
搭建 cw-elevator-application V2 (v2.0.7) 的全系统集成功能测试环境,包含电梯应用及其所有上下游依赖服务(CRK人脸识别、报警、cwos-manager、ninca-common、component-organization等),能够:
- 一键搭建全部 17 个组件
- 运行 V1 vs V2 API 对拍测试
- 验证 V2.0.7 租户访客固定楼层功能
- 验证 CRK 联动、报警联动等端到端链路
- 15-20 分钟内完成从零到全部验证
---
## 2. 环境约束
| 约束 | 值 |
|------|-----|
| 部署方式 | 本机进程 (Java服务) + Docker 容器 (基础组件) |
| MySQL | 复用现有: `192.168.3.12:3307`, `root/123456` |
| JDK | Java 8 (`/usr/lib/jvm/java-8-openjdk-amd64`) |
| Maven | 3.5+ |
| Docker | 已安装, `docker compose` 可用 |
| 代码分支 | `release/cw-elevator-v1-lib-min-risk` |
| 测试范围 | 全系统集成 — 全部 17 个组件 |
---
## 3. 组件清单
### 3.1 基础组件 (Docker)
| # | 组件 | 端口 | 来源 |
|---|------|------|------|
| I1 | Consul | 8500 | 已有 `deploy/consul-docker/docker-compose.yml` |
| I2 | Redis | 6379 | 需要新增 compose 条目 (`redis:7-alpine`) |
| I3 | Kafka + Zookeeper | 9092, 2181 | 需要新增 compose 条目 (`bitnami/kafka:3.6`) |
| I4 | Nginx (前端代理) | 8090 | 已有 `docker-compose.frontend-local.yml` |
### 3.2 应用服务 (本机进程)
| # | 组件 | 端口 | 来源 | 数据库 |
|---|------|------|------|--------|
| A1 | ninca-common-backend | 33010 | `星中心/ninca_common_01-ninca_common_backend.tar.gz` | `ninca_common` |
| A2 | component-organization | 33011 | `星中心/ninca_common_component_organization_01-...tar.gz` | `component-organization` |
| A3 | cwos-system-api | 3333 | `星中心/cwos_system_api_01-cwos_system_api/` (已解压) | — |
| A4 | cwos-manager | 3721 | Docker Harbor 镜像 (已有 compose) | `cwos_manager` |
| A5 | cwos-portal | 33008 | `星中心/cwos_portal` SQL 备份 → 重建 | `cwos_portal` |
| A6 | snap-app | 33012 | `星中心/ninca_common_snap_app_01-...tar.gz` | — |
| A7 | vehicle-app | 33013 | `星中心/ninca_common_vehicle_app_01-...tar.gz` | — |
| A8 | person-file-app | 33014 | `星中心/ninca-person-file-app-V2.9.2_20210216.tar.gz` | — |
| A9 | monitor-app | 33015 | `星中心/ninca_common_monitor_app_01-...tar.gz` | — |
| A10 | CRK-std | 16106 (app), 16114 (mgmt) | `星中心/ninca_crk_std_01-ninca_crk_std_backend/` (JAR已就绪) | `ninca_crk_std` |
| A11 | alarm-app | 17011 (app), 17211 (mgmt) | `星中心/ninca_qk_alarm_app_01-ninca_qk_alarm_app/` (JAR已就绪) | `alarm_deploy` |
| A12 | elevator V2 | 18081 | Maven 构建 `maven-cw-elevator-application` | `cw-elevator-application` |
| A13 | elevator V1 | 18080 | 对照基线 (已有 JAR) | `cw-elevator-application` |
### 3.3 数据库 (MySQL 192.168.3.12:3307)
| 数据库 | 备份文件 | 大小 |
|--------|---------|------|
| `cw-elevator-application` | `data_backup/12_*.sql.gz` + `34_*.sql.gz` | 158M + 2.5G |
| `ninca_crk_std` | (含在 CRK 配置中,需确认备份) | — |
| `alarm_deploy` | `data_backup/alarm_deploy_*.sql.gz` | 15M |
| `cwos_manager` | `data_backup/cwos_manager_*.sql.gz` | 51K |
| `cwos_portal` | `data_backup/cwos_portal_*.sql.gz` | 212M |
| `ninca_common` | `data_backup/ninca_common_*.sql.gz` | 6M |
| `component-organization` | `data_backup/component-organization_*.sql.gz` | 212M |
| `ods` | `data_backup/ods_*.sql.gz` | 485K |
| `cloudwalk_device_thirdparty` | `data_backup/cloudwalk_device_thirdparty_*.sql.gz` | 4K |
| `g` / `p` / `12` / `34` | 其他备份 | 小量 |
---
## 4. 配置统一化
### 4.1 环境变量 (`config/env.sh`)
```bash
# 基础设施
MYSQL_HOST=192.168.3.12
MYSQL_PORT=3307
MYSQL_USER=root
MYSQL_PASS=123456
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASS=1qaz!QAZ
CONSUL_HOST=127.0.0.1
CONSUL_PORT=8500
KAFKA_HOST=127.0.0.1
KAFKA_PORT=9092
ZK_HOST=127.0.0.1
ZK_PORT=2181
# 服务端口
PORT_ELEVATOR_V2=18081
PORT_ELEVATOR_V1=18080
PORT_CRK_STD=16106
PORT_CRK_MGMT=16114
PORT_ALARM=17011
PORT_ALARM_MGMT=17211
PORT_CWOS_PORTAL=33008
PORT_COMPONENT_ORG=33011
PORT_NINCA_COMMON=33010
PORT_CWOS_MANAGER=3721
PORT_SYSTEM_API=3333
PORT_SNAP=33012
PORT_VEHICLE=33013
PORT_PERSON_FILE=33014
PORT_MONITOR=33015
PORT_NGINX=8090
# Java
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
JAVA_OPTS="-Xmx2048m -Xms512m"
```
### 4.2 配置替换规则
每个 Java 服务的 `application.properties` / `bootstrap.properties` 中需要替换:
| 原始值 (生产) | 替换为 (测试) |
|--------------|-------------|
| `mysql_01.mysql_ip` | `192.168.3.12` |
| `redis_01.redis_ip` | `127.0.0.1` |
| `371bfca....` (Consul UUID host) | `127.0.0.1` |
| `44700995e....` (Kafka broker 1) | `127.0.0.1:9092` |
| `0837a70b5....` (Kafka broker 2) | (移除,仅保留一个 broker) |
| `10.128.161.95` (内网 IP 地址) | `127.0.0.1` |
| `10.0.22.207` (内网 ZK) | `127.0.0.1:2181` |
| `10.128.123.108` (内网 DB) | `192.168.3.12` |
| `10.0.22.102` (内网 CRK IP) | `127.0.0.1` |
| `3306` (生产 DB 端口) | `3307` |
---
## 5. 脚本设计
### 5.1 文件结构
```
源码/scripts/test-env/
├── docker-compose.infra.yml # 合并 Consul+Redis+Kafka+Nginx
├── config/
│ ├── env.sh # 统一环境变量
│ ├── consul/consul-config.json # Consul 初始化配置
│ └── service-templates/ # 配置文件模板 (.properties 模板)
├── setup.sh # 主入口: 一键搭建
├── start-all.sh # 启动全部服务
├── stop-all.sh # 停止全部服务
├── health-check.sh # 探活检查
├── prepare-db.sh # 数据库恢复
├── prepare-services.sh # 解压 + 配置注入
├── build-elevator-v2.sh # 编译 V2 电梯应用
└── verify-functional.sh # 功能验证
```
### 5.2 启动依赖拓扑
```
I1 Consul ──┐
I2 Redis ───┤ (Docker 并行启动)
I3 Kafka ───┤
I4 Nginx ───┘
A1 ninca-common ─────────────────────────┐
A2 component-org ←── common ─────────────┤
A3 system-api ←── manager ───────────────┤
A4 cwos-manager (Docker) ────────────────┤
A5 cwos-portal ←── org + manager ────────┤
A6 snap-app ←── portal + common ─────────┤
A7 vehicle-app ←── portal + common ──────┤
A8 person-file ←── portal ───────────────┤
A9 monitor-app (独立) ───────────────────┤
A10 CRK-std ←── portal + org + elevator ─┤
A11 alarm-app ←── portal + org + Kafka ──┤
A12 elevator-V2 ←── CRK + portal + org ──┤
A13 elevator-V1 (对拍对照) ───────────────┘
```
### 5.3 主入口执行流程
```
setup.sh:
Phase 1: 环境检查 (< 10s)
├── JDK 8 检查
├── Maven 检查
├── Docker 检查
├── MySQL 连通性检查 (192.168.3.12:3307)
└── 端口冲突检查
Phase 2: 数据库准备 (~5min)
├── 创建所有数据库 (如不存在)
├── 解压并导入 11 个 SQL 备份
└── 执行 V2 DDL (tenant_visitor_floor_policy.sql)
Phase 3: Docker 启动 (~30s)
├── docker compose up infra
├── 等待 Consul Ready
├── 等待 Kafka Ready
└── 启动 Nginx
Phase 4: 服务准备 (~5-10min)
├── 解压 5 个 tar.gz
├── 从模板生成各服务配置文件
├── 编译 V2 电梯应用
└── 同步 JAR 到 deploy/
Phase 5: 服务启动 (~2min)
├── 按拓扑序依次启动 13 个 Java 服务
├── 每个服务启动后探活确认
└── 失败自动重试 (max 3 次)
Phase 6: 验证 (~2min)
├── 全端口探活
├── Consul 注册检查
├── V1/V2 API 对拍 (pytest)
└── 输出验证报告
总耗时: ~15-20 分钟
```
---
## 6. 验证矩阵
| ID | 验证项 | 命令/方法 | 通过标准 |
|----|--------|----------|---------|
| H1 | 所有端口可达 | `nc -z 127.0.0.1 <port>` x 15 | 全部 open |
| H2 | 所有 HTTP 健康检查 | `curl /actuator/health` x 8 | 全部 200 + UP |
| H3 | Consul 服务注册 | `curl :8500/v1/agent/services` | 10+ 服务已注册 |
| F1 | V1/V2 API 对拍 | `pytest tools/elevator_api_parity/tests/` | 全部通过 |
| F2 | V2.0.7 UC-01 基线 | 不传 floorIds, 无策略 | floorList 全集 |
| F3 | V2.0.7 UC-01 固定楼层 | 不传 floorIds, 有策略 | detail.floorList(组织侧 **替代** 后;电梯不求交) |
| F4 | V2.0.7 无交集 | allow 与 floorList 无交集 | 错误码 76260532 |
| F5 | V2.0.7 被访人无楼层 | personId 无楼层 | 错误码 76260531 |
| F6 | V2.0.7 UC-02 | 显式传 floorIds | 不读策略表 |
| F7 | CRK 联动 | curl CRK → 电梯回调 | CRK 日志有 Feign 记录 |
| F8 | 报警 Kafka 消费 | 提交事件 → alarm 日志 | Kafka 消息到达 |
| F9 | Nginx 前端代理 | `curl :8090` | cwos-portal 首页 |
| I1 | MySQL 连通 | `mysql -h 192.168.3.12 -P3307 -e 'SELECT 1'` | 1 |
---
## 7. 已知风险与缓解
| 风险 | 影响 | 缓解 |
|------|------|------|
| `星中心/*.tar.gz` 内 JAR 版本与 DB 备份不匹配 | 启动失败 | 从同一时间点导出 (2026-04-23) 的 DB 备份对齐 |
| Docker Kafka 首次启动慢 | Phase 3 超时 | 脚本增加 60s 等待 + 重试逻辑 |
| V2 Maven 编译需 Nexus 私服 | 编译失败 | 已有 `build_nexus_only.sh` 降级方案 |
| cwos-portal 无独立 JAR | 无法启动 | 从 DB 备份 `cwos_portal` 库确认部署方式 |
| 端口冲突 (已有进程占用) | 启动失败 | Phase 1 预先检查, 用 `lsof` 检测并提示 |
| ES (Elasticsearch) 依赖 | alarm 启动可能失败 | alarm `application.properties` 配置 ES, 需 Docker 添加 |
---
## 8. 未解决问题
1. **cwos-portal 部署方式**: 星中心中没有 cwos-portal 的 JAR 或 tarball, 仅 DB 备份中有 `cwos_portal` 数据。需确认其部署形态 (fat JAR? war? Docker?)。
2. **cwos-system-api 启动入口**: `cwos_system_api_01-cwos_system_api/` 已解压, 需确认 JAR 入口和端口。
3. **Elasticsearch**: alarm 依赖 ES (`elasticsearch.ip`), 是否需要在 Docker Compose 中添加 ES 容器?
4. **Dubbo/ZK**: V1 电梯 bootstrap 配置有 Dubbo + ZK, V2 是否需要?可以在 Docker Compose 中添加 ZK。
---
## 9. 产出物
- `源码/scripts/test-env/docker-compose.infra.yml` — 基础组件 Docker Compose
- `源码/scripts/test-env/setup.sh` — 一键搭建脚本
- `源码/scripts/test-env/config/env.sh` — 统一环境变量
- `源码/scripts/test-env/config/service-templates/` — 14 个配置模板
- `源码/scripts/test-env/start-all.sh` / `stop-all.sh` — 启停脚本
- `源码/scripts/test-env/verify-functional.sh` — 功能验证脚本
@@ -0,0 +1,279 @@
# 租户访客默认楼层策略 — 业务逻辑设计
**日期**2026-05-05
**状态**:设计稿(待审核)
**基线版本**v2.0.20
---
## 1. 现有问题
`PersonRuleServiceImpl.addVisitor` 中策略查询被包裹在 `if (!callerProvidedFloors)` 条件内,导致调用方一旦传了 `floorIds`UC-02),策略被完全跳过。
**修正要求**:任何时候都应当查询策略,有策略且生效则以策略 `allow_zone_ids` **替代** 候选楼层。
---
## 2. 完整时序图
### 2.1 UC-01:调用方未传 floorIds(组织默认楼层)
```
调用方 电梯应用 组织服务 tenant_visitor_floor_policy
│ │ │ │
│ POST /add/visitor │ │ │
│ (无floorIds) │ │ │
│ ────────────────────→ │ │ │
│ │ │ │
│ │ ── Phase1: 查组织 ── │ │
│ │ POST /component/person/detail(personId) │
│ │ ─────────────────────→ │ │
│ │ ←───────────────────── │ │
│ │ PersonResult { │ │
│ │ floorList: [A,B,C], │ │
│ │ organizationIds:[...] │ │
│ │ } │ │
│ │ │ │
│ │ ── Phase2: 候选楼层 ── │ │
│ │ candidate = floorList │ │
│ │ = [A,B,C] │ │
│ │ │ │
│ │ ── Phase3: ALWAYS 查策略 ── │
│ │ SELECT * WHERE org_id=? AND enabled=1 │
│ │ ──────────────────────────────────────────→ │
│ │ ←────────────────────────────────────────── │
│ │ │ │
│ │ ┌─ policy存在? ─┐ │ │
│ │ │ │ │ │
│ │ YES NO │ │
│ │ │ │ │ │
│ │ ▼ ▼ │ │
│ │ effective= effective │ │
│ │ allow_zone_ids =candidate │ │
│ │ =[6F] =[A,B,C] │ │
│ │ │ │
│ │ ── Phase4: 空集校验 ── │ │
│ │ effective=[6F] │ │
│ │ │ │
│ │ ── Phase5: 写规则绑图库 ── │
│ ←──────────────────── │ │ │
│ success(6F) │ │ │
```
### 2.2 UC-02:调用方传了 floorIds
```
调用方 电梯应用 组织服务 tenant_visitor_floor_policy
│ │ │ │
│ POST /add/visitor │ │ │
│ floorIds=[7F,8F] │ │ │
│ ────────────────────→ │ │ │
│ │ │ │
│ │ ── Phase1: 查组织 ── │ │
│ │ POST /component/person/detail(personId) │
│ │ ─────────────────────→ │ │
│ │ ←───────────────────── │ │
│ │ PersonResult { │ │
│ │ organizationIds │ │
│ │ } ← 仅取orgIds,不用floorList │
│ │ │ │
│ │ ── Phase2: 候选楼层 ── │ │
│ │ candidate = param.floorIds │
│ │ = [7F,8F] │ │
│ │ │ │
│ │ ── Phase3: ALWAYS 查策略 ── │
│ │ SELECT * WHERE org_id=? AND enabled=1 │
│ │ ──────────────────────────────────────────→ │
│ │ ←────────────────────────────────────────── │
│ │ │ │
│ │ ┌─ policy存在? ─┐ │ │
│ │ │ │ │ │
│ │ YES NO │ │
│ │ │ │ │ │
│ │ ▼ ▼ │ │
│ │ effective= effective │ │
│ │ allow_zone_ids =candidate │ │
│ │ =[6F] =[7F,8F] │ │
│ │ │ │
│ │ ── Phase4: 空集校验 ── │ │
│ │ effective=[6F] │ │
│ │ │ │
│ │ ── Phase5: 写规则绑图库 ── │
│ ←──────────────────── │ │ │
│ success(6F) │ │ │
```
---
## 3. 完整控制流
```
addVisitor(param, context):
┌────────────────────────────────────────────────────────┐
│ Phase1: 查被访人组织(ALWAYS,用于策略获取) │
│ detail = personService.detail(personId, businessId) │
│ if detail fail → return detail.code/msg │
│ personResult = detail.getData() │
│ orgIds = personResult.getOrganizationIds() │
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ Phase2: 确定候选楼层 candidate │
│ if (param.floorIds 非空): ← UC-02 │
│ candidate = param.floorIds │
│ else: ← UC-01 │
│ candidate = personResult.getFloorList() │
│ if candidate 为空 → return 76260531 │
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ Phase3: ALWAYS 查策略,有策略则替代 │
│ policy = DAO.selectEnabledByOrgId(orgId) │
│ if (policy 存在 && enabled=1): │
│ effective = parseAllowZoneIds(policy.allow_zone_ids)│
│ ← 策略的 allow 直接替代,非求交 │
│ else: │
│ effective = candidate ← 无策略约束,原值 │
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ Phase4: 空集校验 │
│ if effective 为空 → return 76260531 │
│ param.setFloorIds(effective) │
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ Phase5: 写规则 + 绑图库(不变) │
│ zoneService.page → image_rule_ref → batchBind → ... │
└────────────────────────────────────────────────────────┘
```
---
## 4. 决策矩阵
| 场景 | caller传floorIds | 有生效策略 | 行为 | 最终楼层 |
|------|----------------|-----------|------|---------|
| **A** | 空 | 无 | 取组织 floorList | `floorList` |
| **B** | 空 | 有,allow=[6F] | 策略替代 | `[6F]` |
| **C** | `[7F]` | 无 | 用调用方传入值 | `[7F]` |
| **D** | `[7F]` | 有,allow=[6F] | 策略替代(忽略调用方) | `[6F]` |
| **E** | `[6F,7F]` | 有,allow=[6F] | 策略替代 | `[6F]` |
| **F** | 空 | 有,allow=[](无效或空) | 等同无策略 | `floorList` |
### 关键差异
| 场景 | 旧行为(v2.0.18 | 新行为(v2.0.20 |
|------|-----------------|-----------------|
| **D**:传 7F,策略 allow=6F | 开通 7F(绕过策略 ❌) | 开通 6F(策略替代 ✅) |
| **E**:传 6F+7F,策略 allow=6F | 开通 6F+7F(绕过策略 ❌) | 仅开通 6F(策略替代 ✅) |
---
## 5. 错误码
| 错误码 | 场景 | 说明 |
|--------|------|------|
| 76260531 | 无可用楼层 | Phase4 中 `effective` 为空(含被访人无楼层、策略 allow 为空等) |
| 76260533 | 策略配置错误 | `allow_zone_ids` JSON 解析失败(已有 `parseAllowZoneIds` 兜底返回空) |
---
## 6. 日志设计
| 路径 | 级别 | 内容 |
|------|------|------|
| 请求入口 | INFO | businessId, personId, visitorId, requestFloorSize |
| Phase1 detail 失败 | WARN | personId, code, msg |
| Phase2 UC-01 | INFO | candidate = floorList |
| Phase2 UC-02 | INFO | candidate = param.floorIds |
| Phase2 空 floorList | WARN | personId |
| Phase3 查策略 | INFO | orgIds |
| Phase3 策略存在 | INFO | policyId, orgId, allow_zone_ids |
| Phase3 策略不存在 | INFO | 使用候选楼层原值 |
| Phase4 空集 | WARN | businessId, personId, visitorId, candidate |
---
## 7. 初始化流程分析(登记页楼层展示)
### 7.1 调用路径
基于 `cwos-component-organization-service` 反编译分析,初始化时的 `/component/person/detail` 调用链:
```
登记页初始化
├─ GET/POST /component/person/detail ───→ 组织服务 (ninca-common-component-organization)
│ │
│ PersonController.java:132 │
│ → imgStorePersonService.detail() │
│ → ImgPersonServiceImpl.java │
│ line 639-650 │
│ → elevatorFeignClient │
│ .listByImageId(...) │ ← 调电梯查询人员授权楼层
│ → image_rule_ref 表查询 │
│ ← floorList (List<zoneId>) │
│ │
│ ← PersonResult { │
│ floorList: ["zoneId1","zoneId2",...], │ ← 被访人当前授权楼层
│ organizationIds: [...], │ ← 用于 addVisitor 策略查询
│ defaultFloor, chooseFloor, ... │
│ } │
│ │
└─ 展示 floorList → 用户选择 → POST /add/visitor
→ 策略替代(如有)
```
### 7.2 floorList 的数据来源
`ImgPersonServiceImpl.java``floorList` 的组装逻辑:
```java
// line 639-650 (ImgPersonServiceImpl.java)
ArrayList<String> floorList = new ArrayList<>();
// 调电梯 Feign 接口获取该人员在 image_rule_ref 中的授权区域
CloudwalkResult<List<AcsPassRuleImageResultDto>> images =
this.elevatorFeignClient.listByImageId(acsPassRuleImageForm);
for (int i = 0; i < acsPassRuleImageResultDtoList.size(); i++) {
floorList.add(((AcsPassRuleImageResultDto)acsPassRuleImageResultDtoList.get(i)).getZoneId());
}
personResult.setFloorList(floorList);
```
**结论**`floorList` 是被访人在电梯 `image_rule_ref` 中**已有授权的楼层集合**,不是全量楼层。所以初始化页展示的本身就是被访人有权限的楼层。
### 7.3 初始化和提交的联动关系
| 阶段 | 调用接口 | 返回数据 | 是否经过策略 |
|------|---------|---------|------------|
| 初始化 | `组织服务 /component/person/detail` | `floorList`(授权楼层)| ❌ 策略在组织服务中不存在 |
| 提交 | `电梯应用 /add/visitor` | 开通结果 | ✅ v2.0.20 已修复 |
### 7.4 潜在问题
由于初始化时不经过策略,存在展示与开通不一致的可能:
| 场景 | 初始化展示 | 用户选择 | addVisitor 实际开通 | 用户体验 |
|------|-----------|---------|-------------------|---------|
| 被访人授权多楼层,策略 allow=[6F] | floorList=[6F,7F,8F] | 选 7F | **6F(策略替代)** | 用户困惑 |
| 被访人授权多楼层,策略 allow=[6F] | floorList=[6F,7F,8F] | 不选(UC-01 | **6F(策略替代)** | 与预期一致 |
| 无策略 | floorList | 任意 | 与选择一致 | 正常 |
**解决方案建议**(后续阶段):
在电梯应用新增 `/elevator/person/effective-floors` 预览接口,供初始化时展示策略约束后的有效楼层。当前阶段可先通过前端交互说明,或由第三方 BFF 自行做策略感知。
---
## 8. 与现有文档的差异
| 文档 | 旧逻辑 | 新逻辑 |
|------|--------|--------|
| 数据库阶段技术设计 §5.2 | UC-02 不读策略表 | UC-02 读策略表,替代 |
| 数据库阶段技术设计 §5.3 | UC-02 以请求为准 | UC-02 以策略为准 |
| 当前代码 `if(!callerProvidedFloors)` | 策略仅在 UC-01 查 | 策略 ALWAYS 查 |
| `resolveEffectiveFrozens` 方法 | 历史:∩ + 校验 hostFloors | **废止**;规范语义为组织侧 **替代**,电梯透传 `floorList` |
@@ -0,0 +1,188 @@
# 租户访客默认楼层策略 — 业务逻辑重设计
> **废止 / 仅作历史归档(2026-05-06**
> **现行规范**以 **[租户访客默认楼层策略 — 迁入组织组件](./2026-05-06-tenant-visitor-policy-organization-implementation.md)** 为准:租户策略 **`allow_zone_ids` 只能在组织 `PersonService.detail` 以「**替代**」写入 `floorList`**;**禁止**将策略定义为与被访人楼层 **「求交(∩)」**。电梯 `addVisitor` **不再**读取策略表、**不再**做 ∩。
> 下文保留 **2026-05-05** 草稿中的电梯侧求交流程图,**仅供对照旧表述**,勿作为实现或验收依据。
**日期**2026-05-05
**状态**:已废止(见上)
**设计依据**:产品方案 [租户访客默认楼层技术产品方案](../../business/租户访客默认楼层技术产品方案.md)
**涉及代码**`PersonRuleServiceImpl.addVisitor`(现行代码已按 2026-05-06 规范移除电梯侧策略 ∩)
---
## 1. 业务规则(核心不变量)—— **历史草案,已被「替代语义」取代**
| 规则 | 说明(历史) |
|------|------|
| ~~**策略全时生效**~~ | **废止**:电梯侧不再全时查策略表;策略在组织 detail **替代** `floorList`。 |
| **策略即安全边界** | `allow_zone_ids` 仍表达租户允许的 zone 集合;落实方式为 **替代写入 detail**,而非 ∩。 |
| **无策略不禁锢** | 组织未命中策略时,`floorList` 仍为 `listByImageId` 遍历结果。 |
| ~~**交集为空必须拒绝**~~ | **废止**:不再使用 `candidate ∩ allow`;空 `floorList`/effective 走 **`76260531`**。 |
---
## 2. 总流程
### 2.1 UC-01:调用方未传 floorIds
```mermaid
sequenceDiagram
participant Caller as 调用方/BFF
participant Elevator as 电梯应用<br/>cw-elevator-application
participant Org as 组织服务<br/>ninca-common-component-organization
participant PolicyDB as 策略表<br/>tenant_visitor_floor_policy
Caller->>Elevator: POST /elevator/person/add/visitor<br/>{personId, visitorId}<br/>(不传 floorIds)
Note over Elevator: 阶段1:查被访人信息
Elevator->>Org: POST /component/person/detail<br/>{personId, businessId}
Org-->>Elevator: PersonResult<br/>{floorList, organizationIds}
Note over Elevator: 阶段2:候选楼层 = floorList
Note over Elevator: floorList 来自组织服务
Note over Elevator: 阶段3:查策略
Elevator->>PolicyDB: SELECT * FROM tenant_visitor_floor_policy<br/>WHERE org_id IN (organizationIds) AND enabled=1
PolicyDB-->>Elevator: policy 行 / 空
alt 策略存在且生效
Note over Elevator: 最终楼层 = floorList ∩ allow_zone_ids
alt 交集为空
Elevator-->>Caller: 失败 76260532<br/>(租户策略与被访人授权无交集)
else 交集非空
Note over Elevator: 继续开通流程
Elevator-->>Caller: 成功,仅开通交集内楼层
end
else 无策略或未启用
Note over Elevator: 最终楼层 = floorList(原值)
Elevator-->>Caller: 成功
end
```
### 2.2 UC-02:调用方传入 floorIds
```mermaid
sequenceDiagram
participant Caller as 调用方/BFF
participant Elevator as 电梯应用<br/>cw-elevator-application
participant Org as 组织服务<br/>ninca-common-component-organization
participant PolicyDB as 策略表<br/>tenant_visitor_floor_policy
Caller->>Elevator: POST /elevator/person/add/visitor<br/>{personId, visitorId, floorIds:[...]}
Note over Elevator: 阶段1:查被访人信息(仅取 organizationIds
Elevator->>Org: POST /component/person/detail<br/>{personId, businessId}
Org-->>Elevator: PersonResult<br/>{organizationIds}
Note over Elevator: 阶段2:候选楼层 = 调用方传入的 floorIds
Note over Elevator: 阶段3:查策略(ALWAYS
Elevator->>PolicyDB: SELECT * FROM tenant_visitor_floor_policy<br/>WHERE org_id IN (organizationIds) AND enabled=1
PolicyDB-->>Elevator: policy 行 / 空
alt 策略存在且生效
Note over Elevator: 最终楼层 = callerFloorIds ∩ allow_zone_ids
alt 交集为空
Elevator-->>Caller: 失败 76260532<br/>(请求楼层不在策略允许范围内)
else 交集非空
Elevator-->>Caller: 成功,仅开通交集内楼层
end
else 无策略或未启用
Note over Elevator: 最终楼层 = callerFloorIds(原值)
Elevator-->>Caller: 成功
end
```
---
## 3. 控制流伪代码
```
addVisitor(param, context):
// === 阶段1:查被访人组织信息(ALWAYS)===
detailResult = personService.detail(personId, businessId)
if failed: return detailResult.error
person = detailResult.data
// === 阶段2:确定候选楼层 ===
if param.floorIds 非空: ← UC-02
candidate = param.floorIds
else: ← UC-01
candidate = person.floorList
if candidate 为空: return 76260531
// === 阶段3ALWAYS 查策略 ===
policy = findEnabledPolicy(person.organizationIds)
if policy != null:
effective = intersect(candidate, policy.allow_zone_ids)
if effective 为空: return 76260532
else:
effective = candidate
// === 阶段4:空集校验 ===
if effective 为空: return 76260531
param.floorIds = effective
// === 阶段5:开通流程(不变)===
zoneService.page → image_rule_ref → batchBind → ...
```
---
## 4. 场景对照矩阵
| 场景 | 调用方 floorIds | 策略状态 | 候选楼层 | 最终结果 |
|------|----------------|---------|---------|---------|
| UC-01 无策略 | 空 | 无策略行 | `floorList` | `floorList` ✅ |
| UC-01 + 策略通过 | 空 | 有且生效 | `floorList` | `floorList ∩ allow` ✅ |
| UC-01 + 策略无交集 | 空 | allow 与 floorList 无交集 | `floorList` | 失败 76260532 ✅ |
| UC-01 被访人无楼层 | 空 | 任意 | `floorList`=空 | 失败 76260531 ✅ |
| UC-02 无策略 | [A,B] | 无策略行 | [A,B] | [A,B] ✅ |
| UC-02 + 策略包含 | [A,B] | allow=[A,C] | [A,B] | [A] ✅ |
| UC-02 + 策略不包含 | [A,B] | allow=[C,D] | [A,B] | 失败 76260532 ✅ |
### 与当前实现的差异
| 场景 | 当前实现 | 重设计后 |
|------|---------|---------|
| UC-02 + 策略存在 | 绕过策略,按请求楼层开通 ❌ | 策略求交 ✅ |
| UC-02 + 策略不包含请求楼层 | 成功开通(本应拒绝)❌ | 失败 76260532 ✅ |
---
## 5. 错误码
| 错误码 | 触发条件 | 说明 |
|--------|---------|------|
| 76260531 | 候选楼层为空 | 被访人 `floorList` 为空,或有效楼层为空 |
| 76260532 | `candidate ∩ allow` 无交集 | 策略约束了可访楼层,但候选楼层全部不在允许范围内 |
| 76260533 | 策略配置错误 | `allow_zone_ids` 包含被访人无权限的 zoneId |
---
## 6. 日志规范
| 关键路径 | 日志内容 |
|---------|---------|
| 入口 | `businessId, personId, visitorId, requestFloorSize` |
| UC-01 | `调用方未传楼层,取被访人默认楼层 floorList=xxx` |
| UC-02 | `调用方已指定楼层,候选楼层=candidate` |
| 策略查询 | `查询组织 orgIds=xxx` |
| 策略命中 | `找到启用策略 policyId=xxx allow=xxx` |
| 策略未命中 | `未找到启用策略,使用候选楼层原值` |
| 求交成功 | `策略生效,最终楼层=effective` |
| 求交为空 | `候选楼层与策略无交集,返回 76260532` |
| 空楼层 | `无可用楼层,返回 76260531` |
---
## 7. 实施范围
| 变更点 | 影响 | 风险 |
|--------|------|------|
| UC-02 增加 `personService.detail()` 调用 | 多一次 RPC(数百微秒) | 低 |
| UC-02 增加策略求交逻辑 | 对传入楼层做过滤 | 中——调用方可能不符合预期 |
| 删除 `callerProvidedFloors` 分支 | 简化代码结构 | 低 |
> **兼容性提醒**:UC-02 行为改变意味着:之前能开通的请求(传入策略允许范围外的楼层)现在会失败。需通知集成方。
@@ -0,0 +1,138 @@
# 租户访客默认楼层策略 — 日志完善方案
**日期**: 2026-05-06
**方案**: 统一 `[POLICY]` 日志前缀,确保部署后可通过单次 grep 判定策略是否生效
---
## 日志格式约定
| 前缀 | 含义 | 级别 |
|------|------|------|
| `[POLICY]` | 策略入口被调用 | INFO |
| `[POLICY-HIT]` | 策略命中,返回 allow_zone_ids | INFO |
| `[POLICY-MISS]` | 策略未命中(无策略/未启用/allow为空) | DEBUG |
| `[POLICY-DETAIL]` | detail() 方法中的策略结果 | INFO |
| `[POLICY-LIST]` | listByPage() 方法中的策略结果 | INFO |
## grep 速查
```bash
# 查看所有策略调用
grep "\[POLICY\]" component-organization.info.log
# 只看策略命中
grep "\[POLICY-HIT\]" component-organization.info.log
# 统计调用次数
grep -c "\[POLICY\]" component-organization.info.log
```
## 修改清单
### 1. TenantVisitorFloorPolicyService.java — 3 处修改
**L68-74 (replacementZoneIdsIfPolicyActive — 多 orgIds 入口)**:
```java
public Optional<List<String>> replacementZoneIdsIfPolicyActive(List<String> orgIds) {
if (CollectionUtils.isEmpty(orgIds)) {
return Optional.empty();
}
log.info("[POLICY] entry orgIds={}", orgIds); // ← 新增
for (String id : orgIds) {
Optional<List<String>> zones = replacementZoneIdsIfPolicyActive(id);
if (zones.isPresent()) {
return zones;
}
}
log.debug("[POLICY-MISS] no enabled policy for any org in {}", orgIds); // ← 新增
return Optional.empty();
}
```
**L83-98 (replacementZoneIdsIfPolicyActive — 单 orgId 查询)**:
```java
public Optional<List<String>> replacementZoneIdsIfPolicyActive(String orgId) {
try {
Optional<TenantVisitorFloorPolicy> policy = findEnabledPolicyByOrgId(orgId);
if (!policy.isPresent()) {
log.debug("[POLICY-MISS] orgId={} no policy row", orgId); // ← 新增
return Optional.empty();
}
List<String> allow = parseAllowZoneIds(policy.get().getAllowZoneIds());
if (allow.isEmpty()) {
log.info("[POLICY-MISS] orgId={} allow_zone_ids empty", orgId); // ← 新增
return Optional.empty();
}
log.info("[POLICY-HIT] orgId={} policyId={} zones={} count={}", // ← 新增
orgId, policy.get().getId(), allow, allow.size());
return Optional.of(new ArrayList<>(allow));
} catch (Exception e) {
log.warn("[POLICY-ERR] orgId={} query failed, fallback: {}", // ← 修改
orgId, e.toString());
return Optional.empty();
}
}
```
**L39-57 (parseAllowZoneIds)**:
```java
public List<String> parseAllowZoneIds(String allowZoneIdsJson) {
if (StringUtils.isBlank(allowZoneIdsJson)) {
return Collections.emptyList();
}
try {
// ... 原有逻辑不变 ...
} catch (Exception e) {
log.warn("[POLICY-ERR] allow_zone_ids JSON invalid: {}", e.getMessage()); // ← 修改前缀
return Collections.emptyList();
}
}
```
### 2. ImgPersonServiceImpl.java — 2 处修改
**L322-334 (listByPage — isVisitor 场景)**:
```java
if (policyZones.isPresent()) {
log.info("[POLICY-LIST] hit personId={} orgIds={} zones={}", // ← 新增
imgStorePersonResult.getId(),
imgStorePersonResult.getOrganizationIds(),
policyZones.get());
List<AcsPassRuleImageResultDto> policyFloorInfo =
buildFloorInfoListFromOrderedZoneIds(businessId, policyZones.get());
// ... 原有逻辑不变 ...
```
**L643-651 (detail — 详情场景)**:
```java
Optional<List<String>> replacementFloors =
this.tenantVisitorFloorPolicyService.replacementZoneIdsIfPolicyActive(
result.getOrganizationIds());
if (replacementFloors.isPresent()) {
log.info("[POLICY-DETAIL] hit personId={} orgIds={} zones={}", // ← 新增
result.getId(),
result.getOrganizationIds(),
replacementFloors.get());
floorList = new ArrayList<>(replacementFloors.get());
// ... 原有逻辑不变 ...
```
## 预期日志输出示例
```
# 策略命中(detail 场景)
[POLICY] entry orgIds=[605560545117995008, 605560541473144832]
[POLICY-HIT] orgId=605560545117995008 policyId=gf_vstr_xxx zones=[zone_28f, zone_6f] count=2
[POLICY-DETAIL] hit personId=1072908835884208128 orgIds=[605560545117995008, 605560541473144832] zones=[zone_28f, zone_6f]
# 策略未命中
[POLICY] entry orgIds=[some_org_id]
[POLICY-MISS] orgId=some_org_id no policy row
[POLICY-MISS] no enabled policy for any org in [some_org_id]
# 策略命中(listByPage 场景)
[POLICY] entry orgIds=[605560545117995008]
[POLICY-HIT] orgId=605560545117995008 policyId=gf_vstr_xxx zones=[zone_28f, zone_6f] count=2
[POLICY-LIST] hit personId=xxx orgIds=[605560545117995008] zones=[zone_28f, zone_6f]
```
@@ -0,0 +1,559 @@
# 租户访客默认楼层策略 — 迁入组织组件(组织侧唯一实现,电梯侧移除)
**日期**2026-05-06
**状态**:实施前梳理 / 待评审
**核心原则**:策略逻辑**只在** `maven-ninca-common-component-organization` 实现;`maven-cw-elevator-application` **完全移除**策略相关代码。
**业务约定(楼层清单)**:凡 **调用方 / 前端 / BFF** 需消费 **「被访人可派梯 / 可邀约访问的楼层集合」**(`PersonResult.floorList` 语义),**必须**走 intelligent **`PersonService.detail``PersonResult.getFloorList()`**(服务端路由至组织 `ImgPersonServiceImpl#detail`)。**禁止**用 **`listByPage`** 或其它接口**顶替**该契约来充当邀约页或 UC-01 的楼层主数据源。**说明**:组织服务 **内部**仍会 **`ElevatorFeignClient.listByImageId`** 组装原始楼层,再写入 `floorList`——这是 **实现细节****不等于**调用方可绕过 `PersonService.detail` 直连上述内部调用。另见 **§2.3** 与 UC-02 边界。
**术语(强制)——「替代」与禁止「求交」**
| 用语 | 含义 |
|------|------|
| **替代(Replacement** | 租户启用访客楼层策略时,**`allow_zone_ids` 整表替换**写入组织 `PersonService.detail` 返回的 **`PersonResult.floorList`**(及展示用 `floorNames` 等一致处理)。**不得**再将被访人 `listByImageId` 原始结果与 `allow_zone_ids` 做集合 **交集(∩)** 作为规范语义。 |
| **禁止表述** | 在需求/产品/排障文档中,**禁止**将本策略称为「与 floorList 求交」「 candidate ∩ allow」;若需描述历史实现,须标明 **「历史·电梯侧过滤(已废弃)」**。 |
| **电梯 `addVisitor`** | **只透传** UC-01 的 `personResult.floorList` 与 UC-02 的 `param.floorIds`**不**再读 `tenant_visitor_floor_policy`、**不**做 ∩。 |
---
## 硬约束:对外接口不变
| 约束 | 说明 |
|------|------|
| **HTTP 路径与动词** | 不新增、不废弃、不更名组织/电梯现网已发布的 REST 路径;不调整鉴权与 Header 约定。 |
| **请求/响应契约** | `cwos-component-organization-interface`、intelligent `PersonService` / `PersonResult` 等已对外暴露的 DTO 与 Feign 方法签名保持兼容:**不增删改字段、不增删方法**。 |
| **允许变更范围** | **组织侧**:新建 `TenantVisitorFloorPolicyService`、修改 `ImgPersonServiceImpl#detail` 内部 floorList 组装逻辑。**电梯侧**:删除 `PersonRuleServiceImpl` 中的策略相关代码(阶段3),删除策略 DAO/Mapper/DTO。 |
| **禁止** | 不在 `cwos-component-organization-interface` 中新增任何类/方法/字段。不在电梯侧新增对组织的 Feign 调用。 |
| **floorList 唯一主路径** | 获取 **`PersonResult.floorList`****必须**调用 **`PersonService.detail`**(与 **`addVisitor` UC-01**、访客邀约初始化**同源**)。**不适用**于 **`addVisitor` UC-02 的楼层候选来源**(见 §2.1、§2.3)。禁止用分页接口替代 detail 来充当邀约/UC-01 的楼层主数据来源。 |
---
## 场景说明:访客邀请初始化、detail 与 listByPage
**规范表述**:**访客邀约 / 派梯(UC-01)所依据的 `floorList`,业务上只认 `PersonService.detail` 的返回**;组织侧在 `ImgPersonServiceImpl#detail` 内完成 `listByImageId` 与租户策略**替代**后写入同一字段,对外仍通过 **`PersonResult.floorList`** 消费。
本节约定**产品 / 前端 / BFF**与后端实现对齐用语;**不引入新接口**,楼层清单仍来自既有契约中的字段(如 `floorList``floorNames``floorInfoList` 等)。
### 1)访客邀请初始化页面需要「可访问楼层清单」
| 项 | 说明 |
|------|------|
| **业务诉求** | 访客邀约/登记页在提交前,需要展示 **被访人侧允许访客选择的可达楼层**(或默认勾选逻辑所依赖的楼层集合),以便用户勾选或与派梯入口对齐。 |
| **数据来源(规定主路径)** | **必须**通过 **`PersonService.detail`** 获取 **`PersonResult.floorList` / 相关展示字段****被访人 `personId` + `businessId`** → intelligent **`PersonService.detail`**Feign 不变)→ 组织 **`ImgPersonServiceImpl#detail`** 内聚 **`listByImageId` + 租户策略替代** 后写入 **`floorList`**(见 §1「改造后」与 §4)。**禁止**将 **`listByPage`** 作为邀约页 **`floorList` 的规范来源**。 |
| **与派梯一致** | 电梯 **`addVisitor` UC-01**(未传 `floorIds`)以同一 **`PersonResult.floorList`** 为候选楼层;邀约页若使用该清单,可与 UC-01 **同源**,减少「页面选的层 ≠ 后台派的层」。 |
| **非本路径** | 邀约页若**仅**调人员分页、不调详情,则可能拿到 **另一套** 楼层展示(含星河湾 40F/6F 等),与 detail **不一定一致**——见下文 **3** 与 §4.0。 |
### 2`detail` 流程的作用
| 项 | 说明 |
|------|------|
| **定位** | **单人维度的被访人详情**:组织侧 `ImgPersonServiceImpl#detail`(对外经 `/component/person/detail` 等**既有**入口,契约不变)。 |
| **与楼层相关输出** | 在 **`listByImageId` 成功**时组装 **`floorList`zoneId 列表)与 `floorNames`**;改造后在此链路插入 **租户访客策略替代**(命中则 **`floorList` 以策略 `allow_zone_ids` 为准**,见 §4.2)。 |
| **明确不包含** | **不包含**星河湾分页里的 **40F / 6F 默认覆盖**(现网即如此);邀约页若只依赖 detail,则 **不会**从该接口拿到 XHW 那套默认楼层。 |
| **典型调用方** | 访客邀请初始化、被访人卡片、电梯 **`addVisitor` 阶段 1** 拉 **`PersonResult`** 等——凡需要 **「这一位被访人当前可用的楼层清单」** 的场景,应以 **detail** 为主数据源(在无不新增接口前提下)。 |
### 3`listByPage` 流程的作用
| 项 | 说明 |
|------|------|
| **定位** | **人员列表分页**:组织侧 `ImgPersonServiceImpl#listByPage`,面向 **批量行** 展示;可选参数 **`isVisitor` 非空** 时进入访客列表增强分支(见 §3.2)。 |
| **与楼层相关输出** | 行为 **`listByImageId`** 填 **`floorInfoList`**,再结合 **`OrgFloorMapper`**、**`xhwId` / `xhwDefaultFloorId` / `xhwSixFloorId`** 等写入 **默认选中楼层、跨日标记** 等(星河湾 **40F / 6F** 出现在此分支,见 §4.0)。 |
| **与邀约初始化的关系** | 适用于 **访客名单列表、运营筛选** 等「一行一人摘要」场景;**不是**邀约页「为主访人拉可选楼层清单」的首选数据源——除非产品设计明确要求列表与邀约共用同一套展示逻辑,并接受与 **detail** 的差异或另行对齐(§7 测试项)。 |
| **改造后** | 策略命中时应在 **L331–332 插入点**优先替代并 **跳过**原星河湾块(§4.3),避免与租户策略双重主编。 |
**小结**:**访客邀请初始化与 UC-01 派梯,均以 `PersonService.detail` 返回的 `PersonResult.floorList` 为权威楼层清单**(组织侧在 `ImgPersonServiceImpl#detail` 内完成策略替代);**`listByPage(isVisitor)`** 仅服务访客名单列表与项目定制默认层,**不作为**邀约页 `floorList` 的主数据路径。详情与分页并存时的差异见 §4.0。
---
## 访客邀约:完整业务流程图与代码流程图(改造后目标)
以下图表与仓库约定一致:**主数据访客登记**可能在第三方/BFF;**电梯 `addVisitor`** 仅负责「已有访客人员 ID 后的派梯授权」;策略在**组织库**、**替代**语义写入 **`detail``floorList`**。
### A. 业务视角 — 端到端(访客邀约 + 可选派梯)
```mermaid
flowchart TB
subgraph invite["访客邀约 / 登记(主流程)"]
A1[打开访客邀约页] --> A2[选定被访人 hostPersonId]
A2 --> A3[PersonService.detail<br/>取 PersonResult.floorList]
A3 --> A4[渲染可选楼层 / 默认勾选逻辑]
A4 --> A5[填写访客信息、访期等]
A5 --> A6[提交邀约 — 访客档案落库]
end
subgraph elevator_domain["电梯域 — 派梯授权(可与邀约异步或分步)"]
B1[触发派梯授权] --> B2[POST /elevator/person/add/visitor]
B2 --> B3[依赖 PersonResult.floorList 或显式 floorIds]
B3 --> B4[写通行规则引用 / 图库绑定]
end
A3 -.->|唯一规范源| A3note["PersonService.detail<br/>PersonResult.floorList<br/>与 addVisitor UC-01 同源"]
A6 -.->|可选后续| B1
```
**说明**:邀约页 **A3** **必须**通过 **`PersonService.detail``PersonResult.floorList`** 拉楼层清单(组织侧 `ImgPersonServiceImpl#detail` 实现);**禁止**用 **`listByPage(isVisitor)`** 替代 **A3** 作为 **`floorList` 规范来源**(见场景说明 **3**)。
### B. 代码视角 — 邀约初始化:拉「可访问楼层清单」(**唯一规范:`PersonService.detail` → `floorList`**
```mermaid
sequenceDiagram
autonumber
participant FE as 前端 / BFF
participant PS as PersonService<br/>Intelligent Feign
participant OC as PersonController<br/>/component/person/detail
participant IM as ImgPersonServiceImpl#detail
participant EF as ElevatorFeignClient<br/>listByImageId
participant TP as TenantVisitorFloorPolicyService<br/>组织库
FE->>PS: detail(personId, businessId)
PS->>OC: HTTP POST(契约不变)
OC->>IM: detail(param, context)
IM->>IM: selectByPrimaryKey、getImgStorePersonResults
IM->>EF: listByImageId(AcsPassRuleImageForm)
EF-->>IM: List AcsPassRuleImageResultDto(原始通行楼层)
IM->>TP: isEnabled(organizationIds)
TP-->>IM: true / false
alt 策略启用
IM->>TP: getAllowZoneIds(organizationIds)
TP-->>IM: allow_zone_ids 列表
IM->>IM: floorList = 策略替代结果
else 策略未启用
IM->>IM: floorList = 遍历 images 的 zoneId(现网 L613-626 语义)
end
IM->>IM: setFloorList / setFloorNames
IM-->>OC: ImgStorePersonGetResult
OC-->>PS: CloudwalkResult
PS-->>FE: PersonResult / 映射后 floorList
```
**落点**:组织 **`cwos-component-organization-service`** · **`ImgPersonServiceImpl`**;行号以 §3.1 为准(插入点在 **`listByImageId` 成功块内**)。
### C. 代码视角 — 派梯授权:`addVisitor`(电梯,改造后)
```mermaid
flowchart TD
START([AcsPersonController<br/>POST /elevator/person/add/visitor]) --> P1[PersonRuleServiceImpl.addVisitor]
P1 --> D1[PersonService.detail<br/>PersonResult.floorList]
D1 --> D2{param.floorIds<br/>非空?}
D2 -->|UC-02 是| E1[effective = param.floorIds]
D2 -->|UC-01 否| E2[effective = personResult.floorList<br/>组织 detail 已含策略替代]
E1 --> V{effective<br/>为空?}
E2 --> V
V -->|是| FAIL[失败 76260531 等]
V -->|否| P2[param.setFloorIds effective]
P2 --> Z1[zoneService.page 首楼层]
Z1 --> Z2[deviceImageStoreDao<br/>imageStoreId]
Z2 --> R1[按楼层写 ImageRuleRef]
R1 --> B1[imageStorePersonService.batchBind<br/>访期]
B1 --> G1[updateGroupPersonRef]
G1 --> OK([返回成功])
```
**要点**:改造后 **无** `TenantVisitorFloorPolicyDao`、**无** `candidate ∩ allow`**UC-01** 完全信任 **组织侧写入的 `floorList`**
### D. 代码视角 — 访客名单分页:`listByPage``isVisitor` 非空)
```mermaid
flowchart TD
LP([listByPage]) --> Q[PageHelper + imgStorePersonMapper.gets]
Q --> ENRICH[getImgStorePersonResults<br/>组织/用户姓名等]
ENRICH --> IV{param.isVisitor<br/>非空?}
IV -->|否| OUT1([直接分页返回])
IV -->|是| LOOP[逐行:listByImageId]
LOOP --> POL{TenantVisitorFloorPolicyService<br/>isEnabled?}
POL -->|是| POLSET[替代 floorInfoList / 默认楼层<br/>跳过星河湾块]
POL -->|否| DF[setDefaultChooseFloor defaultFloor]
DF --> OF[OrgFloorMapper.listByOrgIds]
OF --> EMPTY{orgFloorList<br/>为空?}
EMPTY -->|是| AD[setIsAcrossDay=1<br/>无 40/6 覆盖]
EMPTY -->|否| XHW{xhwId in<br/>organizationIds?}
XHW -->|是| F40[40F 默认 + floorInfoList]
XHW -->|否| F6[6F 默认 + floorInfoList]
POLSET --> FILTER[过滤标签含访客等<br/>现网逻辑]
F40 --> FILTER
F6 --> FILTER
AD --> FILTER
FILTER --> OUT2([CloudwalkPageAble 返回])
```
**要点**:**邀约初始化不要依赖本分支**作为主楼层清单;本图仅供列表页与 §4 优先级对照。
---
## 1. 数据流 — 改造前 vs 改造后
### 改造前(历史·已废弃)
```
addVisitor(floorIds)
→ personService.detail → PersonResult.floorList (listByImageId)
→ if UC-02: candidate = floorIds
→ if UC-01: candidate = floorList
→ 【电梯侧查策略表】findPolicyByOrgIds
→ 【错误语义·已废弃】candidate 与 allow_zone_ids 做 ∩ 过滤
→ 派梯
```
### 改造后(当前规范)
```
【访客邀约页 / UC-01 共用】PersonService.detail → PersonResult.floorList
(组织 ImgPersonServiceImpl#detaillistByImageId 后,策略命中则以 allow_zone_ids **替代** floorList
addVisitor(floorIds)
→ personService.detail → PersonResult.floorList ← 与邀约页同一契约来源
→ if UC-02: effective = floorIds
→ if UC-01: effective = floorList
→ effective = 上式(电梯侧 **无** 策略表、**无** ∩)
→ 派梯
```
### 关键变化
| 步骤 | 改造前(历史) | 改造后(规范) |
|------|--------|--------|
| 策略权威 | 电梯库读表 + **∩ 收窄**(错误表述:「求交」) | **组织库 / 组织 detail**:策略命中则 **`floorList` = `allow_zone_ids`(仅替代)** |
| **`PersonService.detail` → floorList** | 主要为 `listByImageId` 原始楼层 | **策略命中时 = allow_zone_ids(替代)**;未命中 = 原始遍历结果 |
| **`addVisitor`(电梯)** | 查电梯库策略 + **∩** | **删除策略运算**:仅透传 detail / 请求 |
| **effectiveUC-01** | 曾再度与 allow **∩** | **effective = `personResult.floorList`**(组织已替代,电梯不二次运算) |
| **effectiveUC-02** | 曾与 allow **∩**(若走策略分支) | **effective = `param.getFloorIds`**(显式楼层;规范上不由电梯做 ∩) |
---
## 2. 业务语义
### 2.1 UC-01 与 UC-02:业务场景说明(电梯「访客派梯授权」接口)
以下针对 **`POST /elevator/person/add/visitor`**`PersonRuleServiceImpl#addVisitor`)中 **`floorIds` 是否由调用方传入** 的两种业务模式;与 **访客邀约页拉楼层清单**(依赖 **`PersonService.detail`**)的关系见 **§2.3**。
| 代号 | 接口条件(代码侧) | 业务含义 | 典型场景举例 |
|------|-------------------|----------|--------------|
| **UC-01** | 请求体 **未传** `floorIds`,或传 **空列表**(以最终实现判定为准) | **由系统依据被访人维度推导要开通的楼层**:调用方不显式指定「开哪几层」,派梯授权使用的楼层集合应与 **被访人详情中的可达楼层清单**一致(经租户策略在组织侧写入 **`PersonResult.floorList`**)。 | ① 登记完成后 **一键开通派梯**,前台未做逐层勾选;② BFF 只带 `personId`/`visitorId`/访期,**楼层完全跟被访人档案 + 租户策略**走;③ 与 **访客邀约初始化页**使用同一 **`PersonService.detail``floorList`** 对齐 UC-01,避免「页面以为的层」与「后台开通的层」不一致。 |
| **UC-02** | 请求体 **`floorIds` 非空** | **由调用方明确指定要开通的楼层(zoneId 列表)**:业务上多为用户或上游系统 **已选定具体楼层**,派梯接口按 **显式列表** 写入通行规则,而 **不以** `PersonResult.floorList` 作为开通列表来源。 | ① 接待岗在终端 **勾选 7F、8F** 后提交派梯;② 第三方访客系统 **合同只允许指定楼层**;③ 邀约页提交时 **把用户勾选的楼层原样** 传给派梯(此时开通列表以请求为准,**不等于**邀约页展示用的 **`detail.floorList` 必须相同**,取决于产品设计)。 |
**一句话对照**:**UC-01 =「开通哪些层」交给系统(跟被访人 detail + 策略后的 floorList****UC-02 =「开通哪些层」由调用方在请求里写死(floorIds)**。
**与邀约页的关系**:邀约页展示 **可选楼层****规定**走 **`PersonService.detail`**(§「业务约定」);用户若在邀约或后续页面 **勾选了具体楼层** 再派梯,对接侧通常走 **UC-02**;若 **未勾选**、由后台直接派梯,则多为 **UC-01**
---
### 2.2 唯一规范语义:替代(Replacement);禁止「求交」作为策略定义
| | 禁止(历史·电梯侧 ∩) | 唯一规范(组织 detail·替代) |
|------|------|------|
| 逻辑 | ~~`candidate` ∩ `allow_zone_ids`~~ **不得**再写进需求/验收的主路径 | 策略命中时 **`floorList` := `allow_zone_ids`**(整表替换,**非**与原楼层求交) |
| 实现位置 | ~~`PersonRuleServiceImpl` 阶段 3~~ **已移除** | `ImgPersonServiceImpl#detail`(待接入 `TenantVisitorFloorPolicyService` 时在此 **替代** |
| 策略命中时含义 | ~~「收窄候选」~~(易误解为 ∩) | **`PersonResult.floorList` 完全由策略列表定义**;未命中策略时才保留 `listByImageId` 遍历结果 |
**核心语义**:租户访客楼层策略 **只能是替代**,**不是**与被访人电梯原始授权楼层 **求交**
### 2.3 `addVisitor` 实现要点:UC-02 与「必须 detail」的边界(代码与契约)
| 路径 | 是否必须 `PersonService.detail` | 说明 |
|------|----------------------------------|------|
| **访客邀约页初始化 / UC-01 派梯** | **是** | 楼层权威清单 = **`PersonService.detail``floorList`**(§「业务约定」)。 |
| **`addVisitor` UC-02** | **仍调用** `personService.detail`(阶段 1 校验被访人存在等),但 **effective 楼层**仅取自 **`param.getFloorIds()`****不**采用 `personResult.getFloorList()` | 用于 BFF/调用方**已替用户选定楼层**的派梯;**不是**邀约页拉清单的主路径。 |
电梯侧 `addVisitor` 生效楼层计算(**无** `TenantVisitorFloorPolicyDao`、**无** ∩)如下:
```java
// 改造后 addVisitor:阶段 2
List<String> effective;
if (!CollectionUtils.isEmpty(param.getFloorIds())) {
effective = param.getFloorIds(); // UC-02 — 显式楼层
} else {
effective = personResult.getFloorList(); // UC-01 — 与邀约页同源,来自 detail
}
// 无 TenantVisitorFloorPolicyDaoeffective 直接用于后续派梯
```
**避免误读**:上文「UC-02 不经 detail 的 floorList」仅指 **候选生效楼层字段**不取自 `PersonResult.floorList`**阶段 1 的 `detail` 调用仍可能存在**(取被访人元数据)。若产品要求 **显式 floorIds 也必须被租户策略约束**,属**新需求**,与本篇「对外接口不变」前提冲突时需另案评审。
---
## 3. 改造后业务时序图(含代码行号对照)
### 3.1 组织侧 `detail` 内策略插入 + 电梯 `addVisitor` 消费(对照)
> 下图左侧为 **`addVisitor` 内触发 `detail`** 的上下文;**楼层写入**发生在组织 **`ImgPersonServiceImpl#detail`**(策略插入点见 §3.3)。
```
Elevator Intelligent Component-Org Component-Org
PersonRuleImpl PersonService ImgPersonServiceImpl TenantVisitorPolicyService
(after removal) (Feign, unchanged) (L569 detail方法) (新建)
│ addVisitor() │ │ │
│──────────────────────────>│ │ │
│ │ detail(param) │ │
│ │───────────────────>│ │
│ │ │ │
│ │ │ ① selectByPrimaryKey L577 │
│ │ │ ② getVehicleIds L598 │
│ │ │ │
│ │ │ ③ elevatorFeignClient │
│ │ │ .listByImageId() L611 │
│ │ │ ← images (原始通行楼层) │
│ │ │ │
│ │ │ ╔═══════════════════════╗ │
│ │ │ ║ ★ 插入点 (L612之后) ║ │
│ │ │ ╚═══════════════════════╝ │
│ │ │ │
│ │ │ isEnabled(orgIds) │
│ │ │ ─────────────────────────────>│
│ │ │ ← true / false │
│ │ │ │
│ │ │ if true: │
│ │ │ getAllowZoneIds(orgIds) │
│ │ │ ─────────────────────────────>│
│ │ │ ← [zone1, zone2, ...] │
│ │ │ floorList = 策略结果 │
│ │ │ │
│ │ │ if false: │
│ │ │ floorList = L613-626 │
│ │ │ (原始images遍历组装) │
│ │ │ │
│ │ │ ④ setFloorList L628-629 │
│ │ │ │
│ │ ← PersonResult │ │
│ │ .floorList │ │
│ │ (已含策略替代) │ │
│ │ │ │
│ ← PersonResult │ │ │
│ UC-02: effective=param.floorIds │ │
│ 否则: effective=personResult.floorList │ │
│ (组织 detail 已替代;电梯不 ∩ allow) │ │
│ 派梯 │ │
▼ ▼ ▼ ▼
```
### 3.2 listByPage() 中的插入点(isVisitor 场景,L319-358
```
ImgPersonServiceImpl#listByPage
├─ L330: setFloorInfoList(images.getData()) ← listByImageId 原始结果
│ ╔═══════════════════════════════════════╗
│ ║ ★ 插入点 (L331-332 之间) ║
│ ╚═══════════════════════════════════════╝
│ │
│ │ if tenantVisitorFloorPolicyService.isEnabled(orgIds):
│ │ floorInfoList = 策略 allow_zone_ids
│ │ setFloorInfoList(floorInfoList)
│ │ setDefaultChooseFloor(策略默认楼层)
│ │ continue ← 跳过 XHW 分支 (L332-357)
│ │
│ ▼ (策略未命中时,继续原有逻辑)
├─ L332: setDefaultChooseFloor(defaultFloor) ← 原逻辑
├─ L334: orgFloorMapper.listByOrgIds(orgIds) ← 原逻辑
├─ L340: if xhwId → setDefaultChooseFloor(40F) ← 星河湾分支
└─ L349: else → setDefaultChooseFloor(6F) ← 星河湾分支
```
### 3.3 代码插入点与行号对照
| 方法 | 插入位置(与 §3.1 文字一致) | 上下文 | 变量来源 |
|------|------------------------------|--------|---------|
| `detail()` | **`images.getCode()` 为成功码、`floorList` 组装循环之前**(文中曾写 L612–613 间,以当前 `ImgPersonServiceImpl` 为准) | `if (Objects.equals(images.getCode(), "00000000"))` 块内 | `result.getOrganizationIds()` |
| `listByPage()` | **`setFloorInfoList(images.getData())` 之后、`setDefaultChooseFloor` 之前**(约 L331–332) | 访客分支内逐行处理 | `imgStorePersonResult.getOrganizationIds()` |
### 3.4 策略 Service 接口定义
```java
// 新建:cn.cloudwalk.service.organization.service.visitorpolicy.TenantVisitorFloorPolicyService
public class TenantVisitorFloorPolicyService {
// 查询是否存在启用策略(任一 orgId 命中即返回 true)
public boolean isEnabled(List<String> orgIds);
// 返回解析后的 allow_zone_idsJSON Array → List<String>
public List<String> getAllowZoneIds(List<String> orgIds);
}
```
---
## 4. 与星河湾并存:适用范围、优先级与伪代码
### 4.0 现网代码事实(走查结论,避免误实现)
| 方法 | 星河湾 40F / 6F`xhwDefaultFloorId` / `xhwSixFloorId` | 租户访客策略(拟插入) |
|------|----------------|----------------|
| **`ImgPersonServiceImpl#detail`** | **未实现**:仅 `listByImageId``floorList` / `floorNames`(见 §3.1 | 仅在 **`floorList` 组装处**做 **P1 策略替代****不要**在本方法内照搬 `listByPage` 的 XHW 分支,除非产品明确要求「详情与访客分页默认完全一致」(属**行为变更**,需单独评审)。 |
| **`ImgPersonServiceImpl#listByPage`**`param.getIsVisitor()` 非空时) | **已实现**:在 `OrgFloorMapper.listByOrgIds` 非空且 `isAcrossDay=0` 时,按是否含 `xhwId` 覆盖 `defaultChooseFloor``floorInfoList`40F vs 6F)(见 §3.2 | 在 **L331332 之间**插入:若 **P1 策略命中**,则用策略结果替换 `floorInfoList` / 默认楼层并 **跳过** 原 XHW 块(L332–357);若未命中则保持现有星河湾逻辑。 |
**详情 vs 分页的一致性**:改造前已存在「**detail 无 XHW、分页访客分支有 XHW**」差异;若在 **detail** 仅加 **策略替代**、在 **listByPage****策略优先于 XHW**,可能出现「同一被访人在详情 `floorList` 与分页默认展示仍不完全一致」。若需对齐,应在产品层明确是否要给 **`detail` 增加与分页相同的默认楼层规则**(接口字段不变,仅内部赋值变化)。
### 4.1 优先级总表(与现网 XHW 不冲突的前提)
| 优先级 | 条件 | 行为 |
|--------|------|------|
| **P1** | 租户访客策略命中且启用 | **替代**:① **`PersonService.detail``floorList`** = **`allow_zone_ids`**;② **`listByPage` 访客行**上用于展示的 `floorInfoList`/默认层(见 §4.3)。**访客邀约页只吃 ①**,不吃 ②。 |
| **P2** | 未命中策略,且走 **`listByPage` 访客分支** 且满足现网 XHW 前置条件(含 `orgFloorList` 非空等) | 保持现有 **40F / 6F** 逻辑(`xhwId` vs `xhwSixFloorId`)。 |
| **P3** | 兜底 | **`listByImageId`** 原始结果;**detail** 路径下无 P2(因现网无 XHW)。 |
### 4.2 伪代码:`detail()` — 仅 P1 与 P3(不要写入 XHW else-if
```java
// ImgPersonServiceImpl#detail — listByImageId 已成功返回后、setFloorList 之前(参见 §3.1 插入点)
List<String> orgIds = result.getOrganizationIds();
if (tenantVisitorFloorPolicyService.isEnabled(orgIds)) {
// P1:策略替代(PersonResult / 映射链最终消费的 floorList 与此一致)
List<String> allow = tenantVisitorFloorPolicyService.getAllowZoneIds(orgIds);
floorList = allow; // 另需同步 floorNames 等与契约一致的展示字段,实现自行拆解 zoneId→名称若需要
} else {
// P3:与现网一致 — 保留 listByImageId 遍历结果(L613-626
// 此处不要添加 else if (xhwId) — 现网 detail 本无星河湾分支
}
result.setFloorList(floorList);
```
### 4.3 伪代码:`listByPage` 访客分支 — P1 跳过 XHWP2)
```java
// 在 setFloorInfoList(images.getData()) 之后、setDefaultChooseFloor 之前(§3.2 L331-332 间)
if (tenantVisitorFloorPolicyService.isEnabled(orgIds)) {
// P1:用策略替代楼层展示;跳过下方 OrgFloor / 星河湾 40F/6F
applyPolicyToFloorInfoListAndDefault(imgStorePersonResult, orgIds);
continue; // 或等价结构,避免进入 L332-357 原 XHW 逻辑
}
// 未命中策略:保持现网顺序 — L332 起 defaultFloor、OrgFloor、xhwId→40F / else→6F
```
---
## 5. 组织组件 — 新增/修改清单
### 5.1 数据层(`cwos-component-organization-data`
| 工作项 | 详情 |
|--------|------|
| DDL | 从 `releases/cw-elevator-application-V2.0.20.20260505/ddl/tenant_visitor_floor_policy.sql` 迁移到 `docs/sql/tenant_visitor_floor_policy.sql` |
| Entity | `cn.cloudwalk.data.organization.entity.TenantVisitorFloorPolicy` |
| Mapper | `cn.cloudwalk.data.organization.mapper.TenantVisitorFloorPolicyMapper.java` + XML |
| 数据迁移 SQL | 从电梯库 `cwo_elevator_db.tenant_visitor_floor_policy` → 组织库(一次性,含回滚) |
### 5.2 服务层(`cwos-component-organization-service`
| 工作项 | 详情 |
|--------|------|
| **新建** | `TenantVisitorFloorPolicyService` |
| 方法 | `boolean isEnabled(List<String> orgIds)` — 是否存在启用策略 |
| 方法 | `List<String> getAllowZoneIds(List<String> orgIds)` — 返回 allow_zone_ids(已解析 JSON |
| **修改** | `ImgPersonServiceImpl#detail` — floorList 组装处插入 **§4.2**P1/P3,无 XHW |
| **修改** | `ImgPersonServiceImpl` 中星河湾分支 — 策略命中时跳过 xhwDefaultFloorId/xhwSixFloorId 覆盖 |
### 5.3 接口/Web 层
| 模块 | 操作 |
|------|------|
| `cwos-component-organization-interface` | **零变更** |
| `cwos-component-organization-web` | 仅更新 `PersonController.java` 类注释 |
---
## 6. 电梯应用 — 完整删除清单
### 6.1 删除文件清单
| 文件 | 路径 |
|------|------|
| TenantVisitorFloorPolicyDao.java | `cw-elevator-application-data/.../person/dao/` |
| TenantVisitorFloorPolicyDaoImpl.java | `cw-elevator-application-data/.../person/impl/` |
| TenantVisitorFloorPolicyMapper.java | `cw-elevator-application-data/.../person/mapper/` |
| TenantVisitorFloorPolicyMapper.xml | `cw-elevator-application-data/src/main/resources/mapper/` |
| TenantVisitorFloorPolicyDto.java | `cw-elevator-application-data/.../person/dto/` |
| DDL 文件 | `releases/*/ddl/tenant_visitor_floor_policy*.sql`(保留历史参考或删除) |
### 6.2 修改代码清单
| 文件 | 行号 | 操作 |
|------|------|------|
| `PersonRuleServiceImpl.java` | L32-33 | 删除 import `TenantVisitorFloorPolicyDao` / `TenantVisitorFloorPolicyDto` |
| `PersonRuleServiceImpl.java` | L83 | 删除 `@Autowired TenantVisitorFloorPolicyDao` |
| `PersonRuleServiceImpl.java` | L211-230 | **删除整个阶段3**(查策略+求交逻辑) |
| `PersonRuleServiceImpl.java` | L232-238 | 修改阶段4`effective` 改为 `candidate` |
| `PersonRuleServiceImpl.java` | L297-353 | 删除 `findPolicyByOrgIds()``parseAllowZoneIds()` 私有方法 |
| `08-visitor-registration-and-elevator-auth.md` | — | 更新文档:"租户策略求交" → "组织侧策略替代" |
### 6.3 改造后 addVisitor 精简代码
```java
public CloudwalkResult<Boolean> addVisitor(AcsPersonAddVisitorParam param, CloudwalkCallContext context) {
// 阶段1:查询被访人(含组织信息 + 人行规楼层)
PersonDetailParam detailParam = new PersonDetailParam();
detailParam.setId(param.getPersonId());
detailParam.setBusinessId(context.getCompany().getCompanyId());
CloudwalkResult<PersonResult> detailResult = this.personService.detail(detailParam, context);
// ... 错误检查 ...
PersonResult personResult = (PersonResult) detailResult.getData();
// 阶段2:确定生效楼层(直接使用 candidate,不做交集)
List<String> effective;
if (!CollectionUtils.isEmpty(param.getFloorIds())) {
effective = param.getFloorIds(); // UC-02
} else {
effective = personResult.getFloorList(); // UC-01,组织侧已含策略
if (CollectionUtils.isEmpty(effective)) {
return CloudwalkResult.fail("76260531", getMessage("76260531"));
}
}
// 阶段3:空集校验 + 派梯
param.setFloorIds(effective);
// ... 后续派梯逻辑不变 ...
}
```
---
## 7. 测试清单
- [ ] **业务路径**:访客邀约 / 楼层初始化 **仅**通过 **`PersonService.detail``PersonResult.floorList`** 获取权威清单(未用分页或其它接口顶替)
- [ ] **有策略租户**`detail` 返回的 `floorList` = `allow_zone_ids`(纯替代,非交集)
- [ ] **有策略 + addVisitor**effective = floorList(不含交集过滤)
- [ ] **无策略 + 星河湾**:行为与现网 40F/6F 一致
- [ ] **有策略 + 星河湾同时配置**:策略优先,不触发 xhw 覆盖
- [ ] **无策略时 detail vs 分页**:确认是否接受「detail 仍无 XHW、分页访客分支仍有 40F/6F」的现网差异;若产品要求一致,需另立 story(见 §4.0)
- [ ] **UC-02(派梯接口)**:请求体传 `floorIds``effective` 以请求为准(与邀约页「必须 detail」并行不悖:邀约仍只认 detail;业务含义见 §2.1,边界见 §2.3)
- [ ] **数据迁移**:行数一致、org_id/business_id 正确
- [ ] **接口回归**:组织/电梯/智能组件对外 API 无路径/字段/方法变更
- [ ] **电梯回退**:若组织侧部署失败,电梯仍可回退到旧版(DDL 保留期间)
---
## 8. 实施步骤
| 步骤 | 内容 | 验证方式 |
|------|------|---------|
| 1 | 组织 data 模块:建表 DDL + Entity + Mapper | `mvn compile` data 模块通过 |
| 2 | 组织 service 模块:新建 TenantVisitorFloorPolicyService | 单元测试 |
| 3 | 组织 service 模块:修改 `ImgPersonServiceImpl#detail``listByPage` 访客分支(§4.2 / §4.3) | 集成测试 |
| 4 | 数据迁移:电梯库 → 组织库 | 行数对比 |
| 5 | 电梯侧:删除策略相关代码(§6.1 + §6.2) | `mvn compile` 通过 |
| 6 | 端到端:addVisitor + detail 行为验证 | API 对拍测试 |
| 7 | 发布:先发组织侧,观察后发电梯侧(兼容窗口) | 监控 |
---
## 9. 参考
- 电梯访客文档:`maven-cw-elevator-application/cw-elevator-application-service/docs/08-visitor-registration-and-elevator-auth.md`
- 数据模型:`docs/architecture/租户组织人员访客-数据模型与用例.md`
- 历史设计:`docs/business/租户访客默认楼层-数据库配置阶段技术设计.md`
- 当前策略代码:`PersonRuleServiceImpl.java` L211-230, L297-353
- 星河湾分支:`ImgPersonServiceImpl.java` L149-354
---
## 修订记录
| 版本 | 日期 | 说明 |
|------|------|------|
| 0.1 | 2026-05-06 | 初稿 |
| 0.2 | 2026-05-06 | 增加硬约束 |
| 0.3 | 2026-05-06 | **重构**:明确"组织侧唯一实现,电梯侧完全移除";增加数据流对比图、删除清单、伪代码 |
| 0.4 | 2026-05-06 | **增加**:业务时序图(含代码行号对照)、detail/listByPage 插入点、策略 Service 接口定义 |
| 0.5 | 2026-05-06 | **修订**:§4 拆分 detail(仅 P1/P3,不含 XHW)与 listByPageP1 跳过星河湾);补充现网 XHW 适用范围表;修正重复「## 4」章节编号(组织清单改为 §5,电梯 §6,顺延);标注 detail/分页一致性风险 |
| 0.6 | 2026-05-06 | **增加**:文首「场景说明」— 访客邀请初始化与楼层清单、`detail` / `listByPage` 职责划分及与 UC-01 对齐说明 |
| 0.7 | 2026-05-06 | **增加**:访客邀约端到端业务流图;代码侧 sequencedetail+策略)、flowchartaddVisitor 改造后、listByPage isVisitor);修正 §1 笔误「侧略」→「策略」 |
| 0.8 | 2026-05-06 | **明确**:业务楼层清单 **必须**走 **`PersonService.detail``PersonResult.floorList`**;硬约束与场景说明升级为「规定主路径」;流程图 A3/B 标题与 §1 数据流对齐 |
| 0.9 | 2026-05-06 | **冲突清理**:区分对外契约 vs 组织内 `listByImageId`;§1 关键变化表拆分 UC-01/UC-02;§2.2 与「必须 detail」边界表;§2.1 交集/替代表述与改造目标对齐;§4.1 P1 区分邀约只吃 detail;§3.1 标题与 §3.3 插入点表述统一;§7 UC-02 测试条注释 |
| 1.0 | 2026-05-06 | **增加**:§2.1 UC-01/UC-02 **业务场景说明**(非仅代码条件);原 §2.1/2.2 顺延为 §2.2/2.3;更新文首与 §7 对 §2 的引用 |
@@ -0,0 +1,252 @@
# 目录结构重组设计 — 星河湾星中星
**日期:** 2026-05-07
**状态:** 设计稿 v1
---
## 1. 背景与目标
星河湾星中星是 CloudWalk(云从科技)电梯/门禁/安防/人脸识别系统的单体仓库。当前顶层目录结构存在以下问题:
- **职责混淆:** `源码/` 中混合了 Maven 项目、运行时部署包、nginx 配置、反编译代码、frontend 运行时 + 备份
- **命名不一致:** 混用中文/英文、小写/下划线/连词符、`maven-` 前缀冗余、`01-` 数字前缀无意义
- **目录重复:** `源码/frontend/``星中心/frontend/` 内容高度重叠;`源码/cw-elevator-application-V1.0.0.20211103/``星中心/` 下同名
- **自嵌套:** `源码/源码/` 指向自身
- **备份混乱:** 15+ 个 `.bakYYYYMMDD` 目录与活跃目录混合,难以区分
**设计原则:**
1. **单一职责** — 每个顶层目录只放一种类型的内容
2. **零删除** — 所有历史/遗留文件集中移至 `archive/`,不做任何删除
3. **命名规范** — 小写 kebab-case、去除冗余前缀、统一版本/备份格式
4. **最小中断** — 保持开发/部署工作流不受影响
---
## 2. 命名规范
所有新路径遵循以下规则:
| 规则 | 旧示例 | 新示例 |
|------|--------|--------|
| 目录名统一小写+连词符 | `data_backup/` | `data-backups/` |
| 去除 `maven-` 前缀 | `maven-cw-elevator-application/` | `cw-elevator-application/` |
| 去除 `01-` / `_01-` 数字前缀 | `cwos_manager_01-cwos_manager/` | `cwos-manager/` |
| 版本号规范 | `V1.0.0.20211103` | `v1.0.0`(内部保留完整日期) |
| 备份标记规范 | `front_acs.bak20231018/` | → `archive/frontend-backups/`(集中存放) |
---
## 3. 顶层目录结构
```text
星河湾星中星/
├── source/ # 源码(仅活跃开发代码)
├── runtime/ # 运行时部署(生产/预发镜像)
├── packages/ # 部署压缩包(tar.gz
├── scripts/ # 统一脚本入口
├── docs/ # 文档中心
├── data-backups/ # 数据库备份
├── archive/ # 【新增】历史/遗留/参考内容
├── artifacts/ # 构建产物/证据
├── nginx/ # Nginx 配置
└── logs/ # 运行日志
```
### 3.1 映射关系
| 当前路径 | 新路径 | 类型 |
|---------|--------|------|
| `源码/` | → 拆分 | 源码、nginx、artifacts、反编译各自归位 |
| `星中心/` | `runtime/` | 运行时部署 |
| `部署包/` | `packages/` | 部署压缩包 |
| `data_backup/` | `data-backups/` | 数据库备份 |
| `反1/` | `archive/decompiled-sources/` | 归档 |
| `cn/` | `archive/miscellaneous/` | 归档 |
| `media/` | `archive/miscellaneous/` | 归档 |
| `源码/源码/` | `archive/miscellaneous/` | 归档 |
| — | `archive/frontend-backups/` | **新增**,收纳所有 `.bak` 前端备份 |
| `scripts/` (顶层) | `scripts/deploy/` | 合并到统一脚本目录 |
| `源码/scripts/` | `scripts/` (主目录) | 合入不同子目录 |
---
## 4. 各目录内部设计
### 4.1 `source/backend/` — 后端 Maven 项目
去除 `maven-` 前缀,保持原始目录内部结构不变:
| 原名 | 新名 |
|------|------|
| `maven-cloudwalk-cloud/` | `cloudwalk-cloud/` |
| `maven-cloudwalk-device-manager/` | `cloudwalk-device-manager/` |
| `maven-cloudwalk-device-sdk/` | `cloudwalk-device-sdk/` |
| `maven-cloudwalk-intelligent-davinci-manager/` | `intelligent-davinci-manager/` |
| `maven-cloudwalk-legacy-public/` | `cloudwalk-legacy-public/` |
| `maven-cw-elevator-application/` | `cw-elevator-application/` |
| `maven-cwos-common-aks/` | `cwos-common-aks/` |
| `maven-cwos-device-authentication/` | `cwos-device-authentication/` |
| `maven-cwos-resource/` | `cwos-resource/` |
| `maven-intelligent-cwoscomponent/` | `intelligent-cwoscomponent/` |
| `maven-ninca-common-component-organization/` | `ninca-common-component-organization/` |
| `maven-ninca-crk-from-lib/` | `ninca-crk-from-lib/` |
| `maven-ninca-qk-alarm/` | `ninca-qk-alarm/` |
**移出 `source/`:**
- `cw-elevator-application-V1.0.0.20211103/``runtime/elevator-v1/`
### 4.2 `source/frontend/` — 前端源码
| 原名 | 新名 |
|------|------|
| `frontend-source/projects/` | `projects/` (alarm-front, cwos-portal, elevator-front, front-acs) |
| `frontend-source/decompiled/` | `decompiled/` |
| `frontend-source/scripts/` | `scripts/` |
### 4.3 `runtime/` — 运行时部署
去除 `_01-` 数字前缀和冗余版本后缀,改用简洁的服务名:
| 原名 | 新名 |
|------|------|
| `cw-elevator-application-V1.0.0.20211103/` | `elevator-v1/` |
| `cwos_manager_01-cwos_manager/` | `cwos-manager/` |
| `cwos_system_api_01-cwos_system_api/` | `cwos-system-api/` |
| `ninca_crk_std_01-ninca_crk_std_backend/` | `ninca-crk-std/` |
| `ninca_qk_alarm_app_01-ninca_qk_alarm_app/` | `ninca-qk-alarm/` |
| `ninca-crk-std-backend-V2.9.1_20210630/` | `ninca-crk-std-lib/` |
**前端运行时合并(`runtime/frontend/`):**
-`源码/frontend/``星中心/frontend/` 中提取**非 `.bak`** 的活跃前端目录
- 重复的以前者(`源码/frontend/`)为准
- 所有 `.bak` 目录 → `archive/frontend-backups/`
### 4.4 `packages/` — 部署压缩包
保持现有结构,仅移除 `01-` 文件名前缀:
| 原名 | 新名 |
|------|------|
| `cwos_manager_01-cwos_manager.tar.gz` | `cwos-manager.tar.gz` |
| `ninca_common_component_organization_01-...` | `ninca-common-component-organization-...` |
| (同理应用于所有 13 个 tar.gz | |
**内部目录规范化:**
- `releases/` — 保留
- `components/` — 整理展开的组件目录
### 4.5 `scripts/` — 统一脚本目录
```text
scripts/
├── build/ # 构建/发布/格式化相关
│ ├── release-cw-elevator-application.sh
│ ├── format_maven_formatter_all.sh
│ ├── check_maven_formatter_validate.sh
│ ├── build_elevator.sh (new)
│ └── *.sh
├── deploy/ # 部署/启停相关
│ ├── start_ninca.sh (from top-level scripts/)
│ └── *.sh
├── test-env/ # 测试环境搭建(从 源码/scripts/test-env/ 整体迁移)
│ ├── docker-compose.infra.yml
│ ├── setup.sh
│ ├── start-all.sh / stop-all.sh
│ ├── health-check.sh
│ └── ...
├── tools/ # 分析/对拍/校验工具
│ ├── check_elevator_fatjar_lib_parity.sh
│ ├── compare_jar_to_sources.py
│ ├── decompile_ninca_crk_lib_modules.py
│ ├── run_full_elevator_api_suite.sh
│ ├── run_v1v2_parity_automated.sh
│ ├── verify_frontend_runtime.py
│ ├── verify_v1_v2_config_load_order.sh
│ └── ...
```
### 4.6 `archive/` — 历史/参考/遗留
```text
archive/
├── decompiled-sources/ # (from 反1/ — 22 个 .src.zip)
├── frontend-backups/ # (所有 .bak* 前端备份目录)
│ ├── front_acs.bak20231012/
│ ├── front_acs.bak20231018/
│ ├── ...
│ └── *.tar.gz (旧前端归档)
└── miscellaneous/ # (其他杂项)
├── cn/ # (from 顶层 cn/)
├── media/ # (from 顶层 media/)
├── source-self-ref/ # (from 源码/源码/ 自嵌套目录)
├── visitor-noauth-verify-v20260430.zip # (源码/ 根部的 zip)
└── elevator-app.log # (源码/ 根部的日志文件)
```
### 4.7 其他目录
| 当前路径 | 新路径 | 说明 |
|---------|--------|------|
| `源码/artifacts/` | `artifacts/` | 构建产物/证据(与源码分离) |
| `源码/nginx-r1.0425/` | `nginx/` | Nginx 配置(与源码分离) |
| `源码/docs/` | `docs/` | 文档中心(统一位置) |
| `源码/dev-support/` | `docs/dev-support/` | 开发支持文档 |
| `logs/` | `logs/` | 保持不变 |
| `源码/.sisyphus/` | `.sisyphus/` | 保持不变(在 source/ 内的工具配置) |
| `源码/.gitignore` | (保持) | |
| `源码/AGENTS.md` | (保持) | 更新路径引用 |
| `源码/.editorconfig` | (保持) | |
---
## 5. 影响与注意事项
### 5.1 路径依赖影响
以下内容可能引用了旧路径,重组后需更新:
1. **`源码/AGENTS.md`** — 文档中引用了顶层目录结构,需更新
2. **`scripts/test-env/` 下的脚本** — 可能引用了 `../maven-cw-elevator-application/` 等路径
3. **`源码/maven-cw-elevator-application/scripts/`** — 构建脚本中可能硬编码了路径
4. **`maven-cw-elevator-application/tools/`** — Python 测试脚本中的路径引用
5. **`source/frontend/scripts/`** — 前端构建工具的路径配置
6. **Docker Compose 文件**`scripts/test-env/docker-compose.infra.yml` 中的挂载卷路径
### 5.2 执行策略
1. 使用 `git mv` 执行移动(保留 git 历史)
2. 先移动、再更新引用、最后验证
3. 每个顶层目录分批执行,每批完成后运行验证
4. 备份文件不做任何修改,整体迁移
### 5.3 不处理的范围
以下内容保持原样,不做重组:
- `.git/` — git 仓库元数据
- `.gitignore` — 配置
- `源码/.sisyphus/` — Sisyphus AI 工具配置
- 各 Maven 项目的 `target/` 目录 — 构建产物
---
## 6. 执行计划(概要)
| 阶段 | 内容 | 预估操作数 |
|------|------|-----------|
| 1 | 创建 archive/ 及子目录 | ~10 `mkdir` |
| 2 | 迁移 反1/ → archive/decompiled-sources/ | 1 `git mv` |
| 3 | 迁移 cn/, media/ → archive/miscellaneous/ | 2 `git mv` |
| 4 | 迁移 源码/源码/ → archive/miscellaneous/ | 1 `git mv` |
| 5 | 迁移源码/frontend/ .bak 目录 → archive/frontend-backups/ | ~15 `git mv` |
| 6 | 创建 runtime/, 从 星中心/ 迁移并重命名 | ~8 `git mv` |
| 7 | 创建 source/backend/, 从 源码/ 迁移 Maven 项目并重命名 | ~14 `git mv` |
| 8 | 创建 source/frontend/, 从 源码/frontend-source/ 迁移 | 1 `git mv` |
| 9 | 迁移 源码/frontend/(非 .bak)→ runtime/frontend/ | ~15 `git mv` |
| 10 | 迁移 源码/nginx-r1.0425/ → nginx/ | 1 `git mv` |
| 11 | 迁移 源码/artifacts/ → artifacts/ | 1 `git mv` |
| 12 | 合并 scripts/ 目录 | ~5 `git mv` |
| 13 | 清理 源码/ 残余 | 验证 |
| 14 | 更新 AGENTS.md 中的路径引用 | 1 次编辑 |
| 15 | 更新 test-env 脚本中的路径引用 | 逐一检查 |
| 16 | final: 验证 + git status | 确认 |