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.
 
 
 
 
 
 

6.6 KiB

03 — 差距矩阵逐条拍板(grilling)

Type: grilling (HITL) Status: resolved Blocked by: 01, 02

Question

拍板范围以票 01 资产的 9 条未决疑问(Q1-Q9)+ map Notes「差距拍板输入」为准,至少覆盖:

  1. 默认项停用规则二选一:代码现状=停用自动取消默认(a7-4-1 旧口径)vs a7-5-1 现行=默认项禁止停用(阻断提示「请先取消默认或指定其他默认项」)
  2. 必填性:分组编码/字典编码/字典键值是否改为必填(a7-5-1 弹窗标 *;代码=选填+dict_UUID 自动生成——自动生成规则是否保留)
  3. 编辑弹窗状态字段:a7-5-1 可直接改(保存生效,不重复二次确认)vs 代码/旧版只读走列表行操作
  4. 字典键值被引用后可否修改:a7-5-1 始终可改 vs 代码/CONTEXT.md 现行「被引用⇒值不可改」
  5. 编码唯一范围(Q3):全局 vs 分组内(仓库现状=分组内)
  6. 权限口径(Q4):dict:* 权限点 vs 原型「仅平台超级管理员」(预期维持 ADR-0015,需确认)
  7. 商机相关字典页(Q5/Q6/Q7):与平台端同存储同接口(过滤视图)还是隔离数据、权限角色、删除物理 vs 软删、商机侧特有规则 R-B01~B10 哪些需要服务端强制
  8. ref_count 零接线(票 02 确证):业务模块从不 increment/decrement,被引用删除阻断/值只读从不触发——本期是否接线(lead/opportunity/customer 写路径加引用计数)还是明确接受并记录
  9. 二级字典项管理页字段(Q1 视觉核对后):hierarchical/二级文案的入参形态、列表「二级字典项」列出参形态(parentName/children)
  10. 查询条件对齐细节:键值 value 查询(商机页有)、builtin/isDefault 过滤是否需要;分页 GET vs POST 口径(现有 POST /page vs ADR-0017 读 GET)
  11. 弃用草案理念是否找回(Q8):审计字段出参(创建人/创建时间)等——默认不找回

拍板结论回写本票 Answer,并据此生成票 04 的改造项清单(必要时拆多张实施票)、票 06 的文档修订口径。

Comments

2026-09-07 grilling 进行中(结论随拍板追加)

  • 拍板 1 — ref_count 引用计数:本期全量接线(初选"不接线"后用户重开改为全量)。范围:crm-lead 新增/编辑(lead_source、brand、product、scene)+ 线索导入、crm-opportunity intake/直接新建/编辑(opp_source、industry)、crm-customer 新增/编辑(customer_type、industry)+ 客户导入——同事务 increment/decrement,批量走 batchApply,配测试。被引用删除阻断/值只读自此真实生效。map Out of scope「线索/客户域字典消费改动」按例外条款(拍板直接波及)解封。

  • 拍板 2 — 默认项停用:采纳 a7-5-1 现行口径「禁停」。对默认项执行停用(列表行操作与编辑保存)均阻断,提示「该字典为分组默认项,请先取消默认或指定其他默认项」;改 US-27 行为 + 测试改写。(附带:编辑弹窗状态可改口径与此交互,见拍板 4 后续。)

  • 拍板 3 — 必填性:组合口径。字典键值后端改必填(空白抛 63001,不再归一 null;存量空值行编辑时需补值,记录迁移提示);字典编码后端保留「未填 dict_+UUID 自动生成」兵底(前端照 a7-5-1 标必填星号);分组编码维持必填不动。CONTEXT.md 语义不变。

  • 拍板 4 — 键值被引用后可改性:采 a7-5-1「始终可改」。删 US-25 的 isReferenced 值拦截(保留同组唯一校验);CONTEXT.md「被引用」词条修正走票 06。

  • 拍板 5 — 编辑弹窗状态可改:采 a7-5-1。分组 saveOrUpdate 解锁 status(不再强制保留原值);字典项 saveOrUpdate 已支持不动;「默认项禁停」拦截必须同时覆盖 /status 端点与 saveOrUpdate 改停用两条路;弹窗改状态不二次确认(纯前端)。

  • 拍板 6 — 换分组:放开(未被引用时)。换组 ∧ isReferenced → 拦截提示「该字典已被引用,不可修改」;换组 ∧ 未引用 → 目标组存在且启用 + 目标组内编码与键值双重唯一重校验 + dict_ref_count 计数行随迁(删旧预新,同事务);有存活子项的父项禁换组(先处理子项,对齐删除拦截语义)。

  • 拍板 7 — 字典编码唯一范围:组内唯一维持(索引 (group_id, code, delete_key) 不动);分组编码全局唯一;a7-4-1「全局唯一」记旧口径。零改动。

  • 拍板 8 — 权限口径:dict: 权限点体系维持*。「仅平台超管」语义交权限配置达成;enabled-list 保持登录可读。零代码改动。

  • 拍板 9 — 商机相关字典页:同存储过滤视图。后端零新增参数(前端 enabled-list ∩ 商机分组集合 + 按 groupId 查询组合实现);「物理移除」表述不采,维持软删+引用阻断;权限不新增;R-B09(模板只引用启用阶段字典/版本快照不受改名停用影响)归 crm-rule 既有语义。

  • 拍板 10 — 二级字典项形态:维持票 09 parentId 模型。schema/DTO 不动;可选增项:暴露 GET /api/dict/item/tree?groupCode= 包装既有 listTree 契约(挂 dict:item:list,tag 同字典项)供级联场景。

  • 拍板 11 — 查询参数:维持 keyword 单参(分组匹配 name/code;字典项匹配 name/code/value,键值查询已隐式覆盖);POST /page 维持仓库惯例(线索/商机/客户主列表同款)。orderBy/asc 收而不用的语义在票 05 文档标注。

  • 拍板 12 — 弃用草案理念不找回。批量删/二次确认/拖拽归前端自治;审计出参维持 BaseDTO 现有 createTime/updateTime,不加 creatorId。

Answer

12 项拍板全部完成(逐条结论见上 Comments 2026-09-07 节,均有事实依据引用)。方向汇总:采 a7-5-1 现行口径为主(默认项禁停、键值始终可改、弹窗可改状态、换组放开),维持仓库既定设计为零改动(组内唯一、权限点体系、keyword 单参、parentId 二级模型、软删),两个扩围决定(ref_count 全量接线到三业务模块写路径;商机相关字典页=同存储前端过滤视图零后端参数)。对 a7-5-1 的合理偏离仅一处实质项:字典编码保留自动生成兵底(前端标必填,后端宽容,CONTEXT.md 语义不变)。

改造项已分流:票 04(crm-dict 管理端规则改造 6 项)、票 07(ref_count 全量接线,跨三业务模块)、票 05(文档同步)、票 06(CONTEXT/ADR 补记)。

Status 决定:resolved