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,307 @@
# 广发基金访客被访楼层接口生产验证操作文档
## 1. 目标与范围
本文用于生产环境验证以下事项:
- 广发基金租户下,访客开通接口在不传 `floorIds` 时,是否按被访人楼层与租户策略进行处理。
- 验证对象固定为广发基金员工 **蒙海文** 的关联信息(`personId``businessId``floorList`)。
- 输出可审计的执行记录,包含输入参数、返回结果、结论与留痕。
说明:本操作仅做接口调用和数据核验,不修改生产配置、不执行策略变更 SQL。
## 2. 前置条件
### 2.1 必备信息
- 电梯服务地址:`ELEVATOR_BASE_URL`(示例:`http://<host>:16112`)。
- 组织服务地址:`ORG_BASE_URL`(示例:`http://<host>:17016` 或网关地址)。
- 广发基金租户 `businessId``2524639890ba4f2cba9ba1a4eeaa4015`
- 测试访客 `visitorId`(专用测试账号,避免使用真实业务访客)。
- 鉴权头(按现场网关要求):`authorization``loginid``platformuserid``applicationid`
### 2.2 风险提示
- 生产环境调用会产生真实接口访问日志,请在低峰时段执行。
- `add/visitor` 会写入访客通行规则,建议只使用测试访客并设置短期有效期。
- 若现场策略已变更,需先复核 `tenant_visitor_floor_policy` 再执行。
## 3. 蒙海文关联信息确认(必做)
先确认“蒙海文”在组织服务中的关键关联信息,作为后续请求入参依据。
### 3.1 确认项清单
- 员工姓名:蒙海文
- 员工 `personId``<MENG_HAI_WEN_PERSON_ID>`
- 员工 `businessId``2524639890ba4f2cba9ba1a4eeaa4015`
- 员工 `floorList``["..."]`(至少 1 个楼层 ID
### 3.2 被访人详情接口请求模板(输入参数)
接口:`POST /component/person/detail`
请求头模板:
```text
Content-Type: application/json
businessid: 2524639890ba4f2cba9ba1a4eeaa4015
authorization: Bearer <TOKEN>
loginid: <LOGIN_ID>
platformuserid: <PLATFORM_USER_ID>
applicationid: <APPLICATION_ID>
```
请求体模板:
```json
{
"id": "<MENG_HAI_WEN_PERSON_ID>",
"businessId": "2524639890ba4f2cba9ba1a4eeaa4015"
}
```
`curl` 示例:
```bash
curl -sS -X POST "${ORG_BASE_URL}/component/person/detail" \
-H "Content-Type: application/json" \
-H "businessid: 2524639890ba4f2cba9ba1a4eeaa4015" \
-H "authorization: Bearer <TOKEN>" \
-H "loginid: <LOGIN_ID>" \
-H "platformuserid: <PLATFORM_USER_ID>" \
-H "applicationid: <APPLICATION_ID>" \
-d '{
"id":"<MENG_HAI_WEN_PERSON_ID>",
"businessId":"2524639890ba4f2cba9ba1a4eeaa4015"
}'
```
验收要点:
- `data.name` 为“蒙海文”。
- `data.businessId``2524639890ba4f2cba9ba1a4eeaa4015`
- `data.floorList` 非空并记录原始值。
## 4. 租户策略基线确认(建议)
用于确认广发基金策略是否启用,避免误判。
参考策略脚本:`docs/sql/tenant_visitor_floor_policy_init_guangfa_fund.sql`
关键期望:
- `business_id='2524639890ba4f2cba9ba1a4eeaa4015'`
- `policy_type='INTERSECT_ALLOWLIST'`
- `enabled=1`
- `allow_zone_ids``605560545117995008`28F
示例查询(电梯库):
```sql
SELECT business_id, policy_type, allow_zone_ids, enabled, policy_version, updated_at
FROM tenant_visitor_floor_policy
WHERE business_id = '2524639890ba4f2cba9ba1a4eeaa4015';
```
## 5. 访客开通接口验证(核心)
### 5.1 请求信息(输入参数)
接口:`POST /elevator/person/add/visitor`
请求头:与第 3 节一致,`businessid` 固定为 `2524639890ba4f2cba9ba1a4eeaa4015`
请求体模板(验证“自动按被访人楼层处理”时,`floorIds` 置空或不传):
```json
{
"visitorId": "<TEST_VISITOR_PERSON_ID>",
"personId": "<MENG_HAI_WEN_PERSON_ID>",
"begVisitorTime": <BEGIN_TS_MS>,
"endVisitorTime": <END_TS_MS>,
"floorIds": []
}
```
时间戳示例(毫秒):
- `begVisitorTime`: 当前时间
- `endVisitorTime`: 当前时间 + 1 天
`curl` 示例:
```bash
curl -sS -X POST "${ELEVATOR_BASE_URL}/elevator/person/add/visitor" \
-H "Content-Type: application/json" \
-H "businessid: 2524639890ba4f2cba9ba1a4eeaa4015" \
-H "authorization: Bearer <TOKEN>" \
-H "loginid: <LOGIN_ID>" \
-H "platformuserid: <PLATFORM_USER_ID>" \
-H "applicationid: <APPLICATION_ID>" \
-d '{
"visitorId":"<TEST_VISITOR_PERSON_ID>",
"personId":"<MENG_HAI_WEN_PERSON_ID>",
"begVisitorTime":<BEGIN_TS_MS>,
"endVisitorTime":<END_TS_MS>,
"floorIds":[]
}'
```
期望:
- 返回成功码(常见 `code=0``success=true`,以现场协议为准)。
- 若返回 `76260532`,表示求交后无可开通楼层,需按“预期失败”流程记录。
## 6. 回读访客楼层权限验证
### 6.1 回读接口请求模板(输入参数)
接口:`POST /elevator/passRule/image`
请求体模板:
```json
{
"personId": "<TEST_VISITOR_PERSON_ID>",
"businessId": "2524639890ba4f2cba9ba1a4eeaa4015",
"imageStoreIds": [],
"includeOrganizations": [],
"includeLabels": []
}
```
`curl` 示例:
```bash
curl -sS -X POST "${ELEVATOR_BASE_URL}/elevator/passRule/image" \
-H "Content-Type: application/json" \
-H "businessid: 2524639890ba4f2cba9ba1a4eeaa4015" \
-H "authorization: Bearer <TOKEN>" \
-H "loginid: <LOGIN_ID>" \
-H "platformuserid: <PLATFORM_USER_ID>" \
-H "applicationid: <APPLICATION_ID>" \
-d '{
"personId":"<TEST_VISITOR_PERSON_ID>",
"businessId":"2524639890ba4f2cba9ba1a4eeaa4015",
"imageStoreIds":[],
"includeOrganizations":[],
"includeLabels":[]
}'
```
### 6.2 判定规则
- 成功判定:
- `add/visitor` 成功。
- `passRule/image` 返回 `data[]` 非空。
- 返回楼层(`zoneId` / `zoneName`)符合当前租户策略和被访人 `floorList` 的交集预期。
- 预期失败判定:
- `add/visitor` 返回 `76260532`(交集为空),记录为预期失败,不记为系统缺陷。
- 异常失败判定:
- 鉴权失败(401/403)。
- 参数格式错误(400)。
- 下游服务不可达、超时、5xx。
## 7. 标准执行顺序
1. 记录执行人、时间窗、目标环境与业务单号。
2.`/component/person/detail`,确认并记录蒙海文信息。
3. (建议)执行策略查询,确认 allowlist 状态。
4.`/elevator/person/add/visitor` 开通测试访客。
5.`/elevator/passRule/image` 回读访客楼层。
6. 依据第 6.2 节判定并形成结论。
## 8. 现场结论记录模板(复制填写)
### 8.1 基本信息
- 执行时间:
- 执行环境:
- 执行人:
- 工单/需求编号:
### 8.2 蒙海文关联信息核对结果
- 姓名:蒙海文
- `personId`
- `businessId`
- `floorList`
- 核对结论(通过/不通过):
### 8.3 接口调用记录
1) `/component/person/detail`
- 请求参数摘要:
- 响应摘要:
- 结果判定:
2) `/elevator/person/add/visitor`
- 请求参数摘要(含 `visitorId``personId`、时间窗):
- 响应摘要(含业务码):
- 结果判定:
3) `/elevator/passRule/image`
- 请求参数摘要:
- 响应摘要(含 `zoneId/zoneName`):
- 结果判定:
### 8.4 最终结论
- 结论:通过 / 预期失败 / 失败
- 失败原因分类:
- 后续处理建议:
## 9. 附件留痕要求
至少保留以下附件(脱敏后归档):
- 三次接口请求与响应(建议 JSON 文件各 1 份)。
- 关键日志截图(包含时间戳与业务码)。
- 本文档第 8 节填写后的结果页。
建议命名:`gf-visitor-floor-verify-<yyyyMMdd-HHmm>-<executor>.zip`
## 10. 方案B:Python 脚本一键模拟(完整实现)
仓库已提供可执行脚本:
- `maven-cw-elevator-application/tools/visitor_floor_verification/scripts/simulate_gf_visitor_flow.py`
### 10.1 安装依赖
```bash
cd maven-cw-elevator-application/tools/visitor_floor_verification
python3 -m pip install -r requirements.txt
```
### 10.2 设置请求头环境变量
```bash
export ELEVATOR_HEADER_AUTHORIZATION='Bearer <TOKEN>'
export ELEVATOR_HEADER_LOGINID='<LOGIN_ID>'
export ELEVATOR_HEADER_PLATFORMUSERID='<PLATFORM_USER_ID>'
export ELEVATOR_HEADER_APPLICATIONID='<APPLICATION_ID>'
```
说明:`businessid` 由脚本参数 `--business-id` 自动注入,同时也会写入 `ELEVATOR_HEADER_BUSINESSID`
### 10.3 执行脚本
```bash
python3 scripts/simulate_gf_visitor_flow.py \
--org-base-url "http://<ORG_HOST>:<ORG_PORT>" \
--elevator-base-url "http://<ELEVATOR_HOST>:<ELEVATOR_PORT>" \
--meng-person-id "<MENG_HAI_WEN_PERSON_ID>" \
--visitor-person-id "<TEST_VISITOR_PERSON_ID>" \
--business-id "2524639890ba4f2cba9ba1a4eeaa4015" \
--window-hours 24 \
--strict-name-check
```
### 10.4 输出与判定
- 控制台会打印三步调用的关键摘要(详情 code、回读 data 条数、是否全通过)。
- 报告文件自动生成到:
- `maven-cw-elevator-application/tools/visitor_floor_verification/report/gf-visitor-sim-<timestamp>.json`
- 若脚本退出码为 `0` 表示检查通过;退出码为 `1` 表示存在未通过项,需查看报告里的 `checks``steps` 字段。