- 功能清单与使用手册:23项功能清单、策略配置说明、部署运维、22项验收检查表 - 实施操作日志:9阶段操作流水、commit清单、关键文件索引、103服务器全库备份记录 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
14 KiB
租户访客楼层策略 — 实施操作日志
项目: 星河湾星中星 (starRiverProperty) 功能: 租户访客楼层策略(REPLACE_ALLOWLIST) 分支: feature/guangfa-28f-hardcoded 实施人: Huang Ping (hpd840321) 基线: v2.0.17
操作日志总览
| 阶段 | 时间段 | 操作次数 | 涉及文件 |
|---|---|---|---|
| 0. 生产环境全库备份 | 04-23 17:28 | 1 | data-backups/ |
| Ⅰ. 需求分析与设计 | 04-30 ~ 05-05 | 4 | docs/ |
| Ⅱ. 代码重组 | 05-07 ~ 05-09 | 15 | 全局目录 |
| Ⅲ. 广发 28F 楼层策略设计 | 05-09 | 1 | docs/ |
| Ⅳ. 策略数据归一化 | 05-10 01:14 | 1 | SQL + 发布脚本 |
| Ⅴ. DDL 修正 | 05-10 06:43 | 1 | SQL DDL |
| Ⅵ. 发布脚本 | 05-10 06:54 | 1 | scripts/build/ |
| Ⅶ. 日志系统增强 | 05-10 09:37 ~ 13:22 | 5 | Java service |
| Ⅷ. 启动与 Bean 修复 | 05-10 11:44 ~ 12:32 | 4 | Java config |
| Ⅸ. 上线日志分析 | 05-10 15:32 | 1 | docs/ |
阶段0:生产环境全库备份(04-23 17:28)
操作
在实施任何数据库变更前,对 103 生产服务器(10.0.22.103)全部数据库执行完整 mysqldump 备份,共计 11 个库 / 3.1 GB。
备份清单
| # | 数据库文件 | 大小 | 说明 |
|---|---|---|---|
| 1 | component-organization_2026_04_23_17_28_33.sql.gz |
212 MB | 策略表目标库 — 组织服务库 |
| 2 | cwos_portal_2026_04_23_17_28_33.sql.gz |
212 MB | 物业管理门户 |
| 3 | 34_2026_04_23_17_28_33.sql.gz |
2.5 GB | 电梯应用主库 |
| 4 | 12_2026_04_23_17_28_33.sql.gz |
158 MB | 电梯应用辅助库 |
| 5 | alarm_deploy_2026_04_23_17_28_33.sql.gz |
15 MB | 报警服务 |
| 6 | ninca_common_2026_04_23_17_28_33.sql.gz |
6.0 MB | 公共服务 |
| 7 | cwos_manager_2026_04_23_17_28_33.sql.gz |
51 KB | CWOS 管理 |
| 8 | cloudwalk_device_thirdparty_2026_04_23_17_28_33.sql.gz |
4.0 KB | 三方设备 |
| 9 | ods_2026_04_23_17_28_33.sql.gz |
485 KB | ODS 数据 |
| 10 | g_2026_04_23_17_28_33.sql.gz |
3.9 KB | 通用库 G |
| 11 | p_2026_04_23_17_28_33.sql.gz |
1.1 KB | 通用库 P |
备份信息
| 项目 | 内容 |
|---|---|
| 服务器 | 10.0.22.103 |
| 时间戳 | 2026-04-23 17:28:33 |
| 工具 | mysqldump + gzip |
| 总量 | 11 个数据库,合计 3.1 GB |
| 备份存储 | data-backups/(仓库根目录) |
| 备份目的 | 策略功能上线前全量快照,确保 DDL/DML 操作可回滚 |
恢复方式
# 单库恢复示例(component-organization):
zcat data-backups/component-organization_2026_04_23_17_28_33.sql.gz \
| mysql -h 10.0.22.103 -u root -p component-organization
# 全库恢复:
cd data-backups
for f in *.sql.gz; do
dbname=$(echo "$f" | sed 's/_2026.*//')
echo "Restoring $dbname from $f ..."
zcat "$f" | mysql -h 10.0.22.103 -u root -p "$dbname"
done
阶段Ⅰ:需求分析与设计(04-30 ~ 05-05)
2026-04-30 策略重设计文档
操作: 撰写策略重设计文档,含序列图 涉及文件:
docs/superpowers/specs/*-policy-redesign.mddocs/superpowers/specs/*-initialization-flow-analysis.md
变更内容:
- 确定了 REPLACE_ALLOWLIST 替换语义(VS INTERSECT_ALLOWLIST 求交)
- 分析了策略初始化流程
2026-05-01 功能验证脚本
操作: 新增 API 对拍 + 租户策略 + 集成测试脚本
涉及文件: scripts/test-env/verify-functional.sh
变更内容:
- 增加策略相关测试用例
- tenant policy + integration 验证
2026-05-05 策略评估逻辑修正
操作: 修复策略始终参与评估的 bug
涉及文件: backend/cw-elevator-application/.../PersonRuleServiceImpl.java
变更内容:
- 策略无论调用方是否传入楼层均参与评估
- 补充
INTERSECT_ALLOWLIST求交逻辑
阶段Ⅱ:代码仓库重组(05-07 ~ 05-09)
2026-05-07 目录规范化
操作: 中文目录 → 英文目录重命名(15 次提交)
| 操作 | 变更 |
|---|---|
星中心/ → runtime/ |
服务目录命名规范化 |
部署包/ → packages/ |
部署包目录重命名 |
data_backup/ → data-backups/ |
kebab-case 统一 |
源码/ → source/ |
源码目录重命名 |
前端备份移至 archive/ |
整理归档 |
| nginx/artifacts 从 submodule 迁出 | 顶层目录化 |
影响: 所有策略相关路径更新为新目录结构
阶段Ⅲ:广发 28F 访客楼层策略设计(05-09)
2026-05-09 23:56 设计文档 + 数据库 ER 图
操作: 新增广发 28F 访客楼层策略设计文档 涉及文件:
docs/superpowers/specs/*-guangfa-visitor-floor-design.mddocs/sql/tenant_visitor_floor_policy.sql(标记 @deprecated)docs/sql/organization_tenant_visitor_floor_policy.sql(新增组织侧 DDL)docs/sql/organization_tenant_visitor_floor_policy_init_tenants.sql(种子数据)
变更内容:
- 设计文档:表驱动方案 A 作为实现路径
- 电梯侧策略表标记为 @deprecated
- 组织侧 DDL 新建:
organization_tenant_visitor_floor_policy.sql - 组织侧种子数据:广发基金 28F + 物业管理 28F+6F
- 数据库 ER 图:14 个库、537 张表
决策记录:
方案选择: 表驱动方案 A
理由: 配置化策略管理,无需代码修改即可新增/修改策略
V2 策略维护点: component-organization 库(唯一)
电梯侧策略表: @deprecated(V2 不查询)
阶段Ⅳ:策略数据归一化(05-10 01:14)
2026-05-10 01:14 归一化 REPLACE_ALLOWLIST
操作: 统一所有策略数据为 REPLACE_ALLOWLIST 涉及文件:
docs/sql/下所有策略 SQLscripts/build/release-component-organization.shscripts/build/release-cw-elevator-application.sh
变更内容:
- 种子 SQL 中
policy_type全部改为REPLACE_ALLOWLIST - 备注格式统一:
组织名 | 访客默认NF - 发布脚本包含组织侧 DDL/seed + deprecation README
- 发布版本命名规范文档
- 电梯侧
tenant_visitor_floor_policy禁用(V2 不查询)
SQL 执行记录:
-- 目标库: component-organization
-- 执行文件:
-- 1. organization_tenant_visitor_floor_policy.sql(建表)
-- 2. organization_tenant_visitor_floor_policy_init_tenants.sql(种子)
策略数据清单:
| org_id | 策略类型 | allow_zone_ids | 组织名称 |
|---|---|---|---|
488b8ad0... |
REPLACE_ALLOWLIST | ["605560545117995008"] |
[28-38F]广发基金管理有限公司 |
64fdc8ea... |
REPLACE_ALLOWLIST | ["605560545117995008","605560541473144832"] |
物业管理公司 (1/7) |
8fc3f910... |
REPLACE_ALLOWLIST | ["605560545117995008","605560541473144832"] |
物业管理公司 (2/7) |
cc760fdf... |
REPLACE_ALLOWLIST | ["605560545117995008","605560541473144832"] |
物业管理公司 (3/7) |
f216235e... |
REPLACE_ALLOWLIST | ["605560545117995008","605560541473144832"] |
物业管理公司 (4/7) |
95818575... |
REPLACE_ALLOWLIST | ["605560545117995008","605560541473144832"] |
物业管理公司 (5/7) |
348328d7... |
REPLACE_ALLOWLIST | ["605560545117995008","605560541473144832"] |
物业管理公司 (6/7) |
dde6cc9a... |
REPLACE_ALLOWLIST | ["605560545117995008","605560541473144832"] |
物业管理公司 (7/7) |
阶段Ⅴ:DDL 修正(05-10 06:43)
2026-05-10 06:43 DDL 默认值修正
操作: 修正 DDL 中 policy_type 默认值为 REPLACE_ALLOWLIST
涉及文件:
docs/sql/organization_tenant_visitor_floor_policy.sql
变更内容:
-- 修改前
policy_type VARCHAR(32) NOT NULL DEFAULT 'INTERSECT_ALLOWLIST'
-- 修改后
policy_type VARCHAR(32) NOT NULL DEFAULT 'REPLACE_ALLOWLIST'
阶段Ⅵ:发布脚本编写(05-10 06:54)
2026-05-10 06:54 component-org 发布脚本
操作: 新增 release-component-organization.sh
涉及文件: scripts/build/release-component-organization.sh(新增,139 行)
脚本流程:
1. Maven set version → package (fat JAR)
2. Copy JAR → releases/ 输出目录
3. Copy 配置文件 (bootstrap/application/recognition-logback)
4. Copy DDL(组织侧:建表SQL + 种子SQL)
5. 生成 DDL README(执行顺序说明)
6. 生成 start.sh
7. 生成 RELEASE.txt + BUILD_MANIFEST.txt
8. Zip 压缩发布包
9. 还原 Maven 版本号
发布包命名: ninca-common-component-organization-{ver}-xinghewan-{YYYYMMDD}
阶段Ⅶ:日志系统增强(05-10 09:37 ~ 13:22)
2026-05-10 09:37 策略追踪日志
操作: 在 TenantVisitorFloorPolicyService 中添加策略追踪日志
涉及文件: source/backend/ninca-common-component-organization/.../TenantVisitorFloorPolicyService.java
新增日志:
| 日志标签 | 级别 | 触发条件 | 记录内容 |
|---|---|---|---|
| POLICY-HIT | INFO | 策略命中 | orgId, policyId, allowZones |
| POLICY-MISS | DEBUG | 未找到策略 | orgId |
| POLICY-EMPTY | WARN | allow_zone_ids 解析为空 | policyId |
| POLICY-FALLBACK | WARN | 查询异常 | orgId, exception |
| POLICY-RESULT | INFO | batch 命中结果 | orgId, zones |
2026-05-10 09:50 ImgPersonServiceImpl 全链路日志
操作: 在 ImgPersonServiceImpl 中添加详细日志
涉及文件: source/backend/ninca-common-component-organization/.../ImgPersonServiceImpl.java
新增日志:
| 日志标签 | 级别 | 触发条件 |
|---|---|---|
| DETAIL | INFO | detail() 入口/出口,含 personId |
| DETAIL-POLICY | DEBUG | 策略替换前后 floorList 对比 |
| LIST-PAGE-POLICY | DEBUG | listByPage() 策略命中 |
| LIST-PAGE-XHW | DEBUG | 40F/6F hardcoded 分支 |
| PAGE | INFO | page() 查询结果 |
| ADDV-DETAIL | DEBUG | addVisitor detail floorList/orgIds |
2026-05-10 11:44 消息源 & Graceful Shutdown
操作: 修复 ResourceBundle WARN + 添加优雅关闭 涉及文件:
source/backend/ninca-common-component-organization/.../OrganizationServer.javabootstrap.properties
变更内容:
# 修改前
spring.messages.basename=i18n/messages_zh_CN
# 修改后(Spring 自动追加 locale)
spring.messages.basename=i18n/messages
Graceful Shutdown:
@EventListener(ContextClosedEvent.class)
public void onShutdown() {
// 30s drain delay → 在途请求完成后销毁 Bean
Thread.sleep(30_000);
}
2026-05-10 12:01 Logback 配置打包
操作: 将 recognition-logback.xml 打包到 fat JAR classpath
涉及文件: source/backend/ninca-common-component-organization/.../starter/pom.xml
变更: 不再依赖外部 --logging.config 参数
2026-05-10 12:32 Bean 冲突修复
操作: TypeFilter 排除 GroupPersonSyn* 重复 bean
涉及文件: source/backend/ninca-common-component-organization/.../starter/.../GroupPersonSynExcludeFilter.java
变更: 自定义 TypeFilter,排除 starter 模块外的 cn.cloudwalk.service.organization.config.GroupPersonSyn* 类
2026-05-10 13:22 日志级别优化
操作: 将 [POLICY] 入口日志从 INFO→DEBUG
涉及文件: TenantVisitorFloorPolicyService.java
变更: log.info("[POLICY] entry orgIds={}") → log.debug("[POLICY] entry orgIds={}") + 新增 [DETAIL-POLICY-CHECK] DEBUG 日志
阶段Ⅷ:修复与优化(05-10 11:44 ~ 12:32)
2026-05-10 11:44 Graceful Shutdown
详见阶段Ⅶ。
2026-05-10 12:01 Logback 配置内嵌
详见阶段Ⅶ。
2026-05-10 12:32 Bean 冲突修复
详见阶段Ⅶ。
2026-05-10 13:22 日志级别优化
详见阶段Ⅶ。
阶段Ⅸ:上线日志分析与优化方案(05-10 15:32)
2026-05-10 15:32 日志分析报告
操作: 分析 component-org 上线 37 分钟日志
涉及文件: docs/superpowers/specs/2026-05-10-component-org-log-analysis.md
分析结果:
| 指标 | 数据 |
|---|---|
| 日志总量 | 106,372 行 / 26MB |
| 有效 TraceId | 9,848 个 |
| 设备同步占比 | 84.2%(89,531 行) |
| WARN 占比 | 29.9%(31,800 行)— 主要是设备同步失败 |
| 用户业务调用 | 0.06%(64 行) |
| 策略命中 | 12 行 |
| 策略调用频率 | ~1 次/分钟 |
| 单次策略查询耗时 | < 5ms |
策略触发优化方案: 详见 docs/superpowers/specs/2026-05-10-floor-policy-trigger-optimization.md
附录
A. Commit 清单
| 时间 | Hash | 类型 | 描述 |
|---|---|---|---|
| 05-09 23:56 | 42c4a9fd |
docs | 广发 28F 设计文档 + ER 图 |
| 05-10 01:14 | 03752480 |
feat | 策略归一化 REPLACE_ALLOWLIST |
| 05-10 06:43 | 73dc34ec |
fix | DDL 默认值修正 |
| 05-10 06:54 | 368d14de |
feat | component-org 发布脚本 |
| 05-10 09:37 | d8bcc145 |
feat | 策略追踪日志 |
| 05-10 09:50 | f350f318 |
feat | ImgPersonService 全链路日志 |
| 05-10 11:44 | 3f1a23a1 |
fix | 消息源 + Graceful Shutdown |
| 05-10 12:01 | c7d4ac4a |
fix | Logback 内嵌 |
| 05-10 12:32 | 09b1bbe5 |
fix | Bean 冲突修复 |
| 05-10 13:22 | 203005aa |
refactor | 日志级别优化 |
| 05-10 15:32 | f7c042ca |
docs | 上线日志分析 |
B. 关键文件索引
| 文件 | 说明 |
|---|---|
source/docs/sql/organization_tenant_visitor_floor_policy.sql |
组织库建表 DDL |
source/docs/sql/organization_tenant_visitor_floor_policy_init_tenants.sql |
种子数据(广发+物业) |
source/scripts/build/release-component-organization.sh |
component-org 发布脚本 |
source/scripts/build/release-cw-elevator-application.sh |
电梯应用发布脚本 |
source/backend/ninca-common-component-organization/.../policy/TenantVisitorFloorPolicyService.java |
策略服务核心逻辑 |
source/backend/ninca-common-component-organization/.../service/ImgPersonServiceImpl.java |
detail/listByPage 策略调用入口 |
docs/superpowers/specs/2026-05-10-component-org-log-analysis.md |
上线日志分析报告 |
docs/superpowers/specs/2026-05-10-floor-policy-trigger-optimization.md |
策略触发优化方案 |
C. 数据字典
| 表 | 库 | 用途 |
|---|---|---|
tenant_visitor_floor_policy |
component-organization |
V2 唯一策略表(活跃) |
tenant_visitor_floor_policy |
cw-elevator-application |
⛔ 废弃(仅历史参考) |
D. 楼层编码
| zone_id | 楼层 | 用途 |
|---|---|---|
605560540432957440 |
1F | 首层 |
605560541473144832 |
6F | 物业管理层 |
605560545117995008 |
28F | 广发基金层 |