# 商机 E2E · 环境盘点(远程库现状) > 票 `02-env-inventory`(research)产出 · 20260828 · 走本地后端 API 盘点(后端已起,票 03 ✅),原始响应落 `.scratch/opportunity-e2e/env-raw/*.json`,分析脚本 `env-inventory*.ps1` + `analyze_env*.py`。 ## ① 账号矩阵(推荐) | 角色 | 姓名 | userId | 部门 | 依据 | |---|---|---|---|---| | 管理员 | 罗伟健 | `739564171091247104` | **无部门**(primaryDeptId=null) | roles=[管理员];`hasRole('ADMIN')` 通过(users/page 可调);MANAGE 视图回全量 26 条 | | 普通用户 A | 赖永利 | `744842565802524672` | 特战团队(营销中心子) | roles=[] active | | 普通用户 B | 肖琴 | `744842566742048768` | 冠军团队(营销中心子) | roles=[] active;与 A **兄弟部门** | | 普通用户 C | 曾偲青 | `744842318024015872` | 职员(保伦公司子) | roles=[] active;与 A/B **跨中心** | 备选:胡华波 `744842555677474816`(销售)、吴学纲 `744842319282307072`(行政稽查部)。 用户总数 6047(钉钉同步全公司);`POST /api/system/users/page` 筛选参数:`deptId`(含全部子孙)/`employmentStatus`(active/resigned/unassigned)/`loginFrom`/`loginTo`,需 ADMIN。 ## ② 部门树(关键节点) - 根:`广东保伦电子股份有限公司`(744841292348915712)→ 职员 / 研发中心 / 行政稽查部 / 生产一~五厂 / 西安保伦 / 湖北爱递思 … - **DEPT_AND_CHILD 现成样例**:营销中心 `744841295071019008`(父)→ 特战团队 `744841308564094976` + 冠军团队 `744841308677341184`(兄弟子部门)——A 挂特战、B 挂冠军即可验「含子孙可见兄弟不可见」。 - `华南销售部(seed)` `744700334353416192`:独立根(上轮 seed 造),**0 人挂靠**。 - ⚠ 根节点 `744636475731083264` 的名称在库里就是坏字节(乱码不可还原),历史脏数据,不影响测试。 ## ③ 字典可用性:22 组全在线 `GET /api/dict/group/enabled-list` 22 组、`GET /api/dict/item/enabled-list?groupCode=` 逐组有项。商机相关枚举全齐: | 组 | 项数 | 明细(code=xxx_N 递增,_99=其他) | |---|---|---| | opp_stage | 5 | 客户圈定/关系摸排/资料采集/方案卡/已转项目(OPP_STAGE_01~05)| | opp_source | 3 | 线索转入/线下挖掘/客户转介绍 | | pause_reason | 6 | 客户项目延期/预算冻结/招标暂停/政策不可抗力/个人原因/其他 | | close_reason | 6 | 项目取消/客户放弃/竞争失败/重复商机/无效商机/其他 | | pool_reason | 5 | 长期未有效跟进/客户暂无预算/项目暂停或延期/介入时机不成熟/其他 | | survey_seq | 4 | 第一次/第二次/第三次/三次以上 | | follow_way | 5 | 电话沟通/上门拜访/微信对接/线上会议/展会沟通 | | result_tag | 8 | 暂无进展/需求确认/方案推进/… | | attachment_type | 5、customer_role 6、project_role 6、bid_form 4、locality_type 2、apply_way 2 | 齐 | | **industry** | **60(两级树)** | 一级 gov/edu/law/health/transport/energy/finance/park/tourism + 二级(gov_1 人大政协…),item.parentId 有值 ✅ | ## ④ 存量商机:26 条全是历史测试残留 - 分布:**status=2 推进中 25 条 + status=4 已关闭 1 条**(`id=999999999001` 手工 ID);待领取(1)/暂缓(3)/已转项目(5) **零覆盖** → seed 矩阵需补。 - 归属:owner 全部=罗伟健、ownerDept 全部 null。 - ⚠ **编码污染实锤**:部分 oppName 在库里就是 mojibake(如「B验证」「状态机验证」的坏字节版本)——上轮用 PS5.1 发 UTF-8 body 时编码错误所致,**不可逆**。结论:**票 05 seed / 票 07/08 E2E 脚本一律用 Python requests**(PS5.1 Invoke-RestMethod 发中文 body 必污染)。 - poolReason 残留标记:e2e-assign / verify-assign / e2e / test / batch2(历史 seed 的隔离标记痕迹)。 - **清理范围建议**(票 04 拍):26 条无真实业务数据,可全量清理;保守方案=按上轮同名标记(sm-e2e/端到端回归/状态机e2e/回归测试/test-create/新增验证系列)圈定。全新 seed 建议统一 `e2e-` 前缀 + 记录 ID 清单。 ## ⑤ 规则配置存量(crm-rule 三族) | 族 | 条数 | 明细 | |---|---|---| | 阶段模板 | 1 | OPP_STAGE_TPL_01 V1.0 **发布中**(status=2) 全公司默认(兜底种子)| | 方案卡模板 | 2 | OPP_SCHEME_TPL_02 V1.0 **草稿**(status=1);OPP_SCHEME_TPL_01 V1.0 **已停用**(status=3)——**无发布中版本** | | 公海规则 | **0** | 空 | 缺口结论:① F09 方案卡的 `selectable-templates` 当前预期为空——票 08(或 seed)需先 save-draft→publish 一条方案卡模板;② 公海规则零配置 → F14 领取校验在「无规则」时的兜底行为本身是票 07/08 实测点,R03 需要 seed 造一条发布中规则。 ## ⑥ API 契约事实(给票 05/07/08/10/11 的坑位清单) 1. **分页参数 = `current` / `size`**(BaseParam,size 上限 500),**不是** pageNum/pageSize——传错不报错、静默走默认 current=1 size=10。 2. **禁用 PS5.1 发中文 body**:Invoke-RestMethod 发 UTF-8 body 编码错误 → 库里存 mojibake(④ 已有实锤);读响应也会把 UTF-8 按 Latin-1 解(可逆还原)。脚本一律 Python requests。 3. dict item enabled-list 参数名 = `groupCode`(不是 code)。 4. `GET /api/auth/debug/token?userId=` 签发即用;管理员 capabilities:users/page、MANAGE 视图、dict/role 全套 permCodes。 ## 喂票 04 的决策点(承接 spec-flows U 清单) - seed 清理范围:全量清 26 条 vs 按标记圈定(④)。 - 账号指认:上表 A/B/C 是否可用(他们无商机数据权限档位——debug token 是否绕过 DataScope 档位检查,票 05 设计时实测一条)。 - 状态零覆盖的补法:待领取(1)/暂缓(3)/已转项目(5) 三态 seed 造法(转项目 ⊘,5 态可能造不出来——用关闭+重启对凑,或确认 5 态只能线索转入路径产生)。