You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
环境盘点(票 02 交付物)
生成:2026-09-03 22:10 · 本地起服 verify profile + 远程共享库
脚本:env-inventory.py / env-inventory2.py / env-inventory3.py(全在 .scratch/customer-e2e/)
1. 环境拓扑与起服配方
| 项 |
值 |
| MySQL |
8.129.84.155:3306/crm(root,共享环境) |
| MinIO |
远程共享(AK=admin) |
| 应用 |
本机 8080,profile=verify,fat jar |
| 打包 |
& "D:\IntelliJ IDEA 2025.1.3\plugins\maven\lib\maven3\bin\mvn.cmd" -B -pl crm-app -am package -DskipTests -q(JAVA_HOME=corretto-17.0.13) |
| 起服 |
$env:SPRING_PROFILES_ACTIVE='verify'; $env:CRM_MINIO_AK='admin'; $env:CRM_MINIO_SK='...'; java -jar crm-app\target\crm-app-1.0.0-SNAPSHOT.jar |
| debug token |
GET /api/auth/debug/token?userId=739564171091247104(verify only) |
| Python |
py -X utf8(python 是 WindowsApps 空壳);pymysql 每步新连接 autocommit=True |
2. 冒烟结果(D-01 修复后)
Started CrmAppApplication in 30.162s,无 ERROR
- debug/token ✅(token_len=177)→ /me ✅(罗伟健 dept=744841292348915712,roles=[] 见 §6)→ pool/page ✅ http=200 code=0 total=0 → ping ✅ UP
- D-01 修复真库复验通过:修复前 pool/page 500(
Unknown column 'o.customer_id'),修复后 200。修复内容:CustomerMapper 两处 opportunity_count 子查询改走 opportunity_customer 真源 join(oc.delete_key=0 AND o.deleted=0),H2 测试 SCHEMA 同步(假列删除),23/23 全绿。缺陷仍登记 D-01(P0,H2 假列掩盖 + 票 12 冒烟未覆盖 workspace/page),修复随报告披露。
3. 库表全景(64 张)
crm_*:crm_auth_user / crm_auth_identity / crm_file_info
sys_*:sys_user_dept / sys_user_role / sys_role(+data_scope) / sys_dept / sys_menu / sys_region / sys_data_scope_module / sys_role_data_scope
dict_*:dict_group / dict_item / dict_group_default / dict_ref_count
- 客户域 14 张:customer / customer_contact / customer_focus / customer_follow / customer_import_task / customer_import_fail / customer_oplog / customer_pending_notice / customer_reminder_rule / customer_team_member / customer_transfer / customer_transfer_detail / customer_view_log + user_saved_view / user_column_preference(偏好域)
lead_* 9 张、opportunity_* 25 张(商机域)
- 计数(total/deleted=0):customer 5/4,customer_contact 0,customer_oplog 5/5,customer_follow 0,customer_team_member 0,customer_view_log 0(无 deleted 列),customer_focus 0(无 deleted 列),customer_pending_notice 0(无 deleted/审计列,列=id/customer_id/notice_status/notice_type/payload_json/plan_notify_time/target_user_id),customer_reminder_rule 1(全局规则,非 per-customer)
4. 存量客户数据(seed 输入)
| customer_no |
名称 |
owner |
arch |
stage |
deleted |
| KH202609030001 |
冒烟测试科技有限公司(库内 mojibake,坑㉑ 历史残留) |
罗伟健 |
1 |
1 |
1(软删) |
| KH202609030002 |
编码判别科技有限公司 |
罗伟健 |
1 |
1 |
0 |
| KH202609030003 |
关注冒烟科技有限公司 |
罗伟健 |
1 |
1 |
0 |
| KH202609030004 |
冒烟诊断科技公司 |
罗伟健 |
1 |
1 |
0 |
| KH202609030005 |
星辰大海贸易有限公司175909 |
罗伟健 |
1 |
1 |
0 |
- 公海空池(owner IS NULL = 0 条);owner 全部=罗伟健/dept=744841292348915712
- 编号水位:客户编号序列当前用到
KH202609030005,seed 从 0006 起(前缀 KH20260903)
- ⚠ 共享库:seed 数据必须可辨识(统一名称前缀)+ 可清理(登记 id 清单),禁 TRUNCATE
5. 商机域残留(票 05 跨模块口径输入)
- opportunity 25 总 / 23 deleted=0;
e2e- 前缀 15 条(lead 域 e2e 种子:e2e-A-推进/暂缓/公海/关闭 × e2e-B-…)
- 非 e2e 残留:demo-验收-新建闭环、accept-自测-新建HHMMSS 系列、demo-12 系列(历史验收产物,不在本票清理范围)
- opportunity_customer 20 行 delete_key=0,customer_id=920000000000000100~800(lead 域假客户 id,不在 customer 表——孤儿绑定,对客户列表 opportunity_count 无影响:join customer 后无匹配)
- opportunity 列陷阱:名称列=
opp_name;party_a/party_a_clear(老)与 partya/partyaclear(新,孤立单大写陷阱迁移痕迹)并存——D-01 修复正是绕开 opportunity.customer_id 幽灵列走 opportunity_customer
6. 账号矩阵
- 用户 6047、部门 814(钉钉全量同步,非测试造数)
- debug 用户
739564171091247104 罗伟健,dept=744841292348915712(广东保伦电子股份有限公司,根)
- 角色仅 1 个:
ROLE_ADMIN(id=738108305758486528,data_scope=4(全部),builtin=1)——仅挂在罗伟健上
- ⚠ 其余 6046 用户无任何角色 → /me roles=[]。票 04 跨用户实测(协同人/转称接收人/公海领取)时:debug token 可给任意 userId 发 token,但无角色用户的权限拦截语义(放行 or 拒绝)待实测,列入票 04 观察点;若被拦,跨用户场景改用「同一 admin + 数据侧变化」替代视角切换
7. 部门树
- 3 根:
744636475731083264(名乱码)、744700334353416192 华南销售部(seed)、744841292348915712 广东保伦电子股份有限公司
- 保伦下一级 16 部:职员 / 研发中心 / 行政稽查部 / 生产一~五厂 / 工厂管理部 / 研发权限组 / 临时组 / 蓝领新入职待分配 / 算法安全应急小组 / 西安保伦 / 湖北爱递思 / 实训实习
- E2E 用部门:主=744841292348915712(admin 所在);跨部门场景任取叶子部门(如 744841292483133440 职员)
8. 字典(24 组 / 241 item,活跃 229)
| code |
名 |
items |
code |
名 |
items |
| customer_status |
客户状态 |
3 |
industry |
所属行业 |
60 |
| customer_type |
客户类型 |
6 |
lead_source |
渠道 |
38 |
| brand |
品牌 |
9 |
product |
需求产品 |
16 |
| scene |
需求场景 |
18 |
opp_stage |
商机阶段 |
5 |
| opp_source |
商机来源 |
3 |
opp_type |
商机类型 |
3 |
| bid_form |
招标形式 |
4 |
result_tag |
跟进结果标签 |
8 |
| pause_reason |
暂缓原因 |
6 |
design_config |
设计配置 |
6 |
| pool_reason |
进入公海原因 |
5 |
project_role |
商机项目角色 |
6 |
| close_reason |
关闭原因 |
6 |
locality_type |
项目属地 |
2 |
| follow_way |
跟进方式 |
5 |
survey_seq |
勘察次数 |
4 |
| apply_way |
申请方式 |
2 |
customer_role |
客户角色 |
6 |
| attachment_type |
商机资料类型 |
5 |
transfer_reason |
交接原因 |
3 |
- 客户域可用:customer_status / customer_type / industry(60 项,含子级)/ lead_source;dict_item 挂
group_id(非 group_code),join dict_group 取 code
9. 列名陷阱速查(pymysql/SQL 直查时)
| 表 |
显示列 |
备注 |
| crm_auth_user |
username |
无 name/account 常有值 |
| sys_dept |
dept_name |
根部门 parent_id=0(非 NULL) |
| sys_role |
role_code/role_name/data_scope |
data_scope: 4=全部 |
| dict_group |
code/name |
|
| dict_item |
group_id/code/name/value |
join dict_group.code |
| opportunity |
opp_name/opp_status |
party_a vs partya 并存 |
| customer_view_log / customer_focus / customer_pending_notice |
— |
无 deleted 列 |
10. 给票 03(seed)的约束
- 编号接续
KH202609030006+;名称统一带可辨识标记(如 e2e客- 前缀或名称后缀日期戳)
- 幂等:按名称标记查存在则复用/清理重建;清理范围=客户域 14 表 + opportunity_customer 中关联行(删客户前先解绑/软删)
- 中文一律走 Python API(坑㉑),禁 PS 发 body
- seed 必须覆盖(spec-flows F-01..F-16 输入):多阶段客户、公海客户(owner 空)、协同客户(team_member)、跟进到期(customer_follow.next_follow_time 过去时)、关注(focus)、待合并重复客户(同名对)、转称目标客户、导入批次用客户
- 造数走 API 优先(同时喂 oplog/view_log 等副表),直插 DB 仅限 API 无法到达的行(如 last_view_time)