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.
7.2 KiB
7.2 KiB
Answer
Status: resolved(含 grill Q9 归档=删除 + Q15 领取赋锚点回填)
A. 三个 workspace 数据范围(定稿)
| workspace | 数据范围 | 附加状态页 |
|---|---|---|
| 我的客户 | 当前用户为销售负责人或协同人 且 archive_status=有效(1) 且 非公海(owner 非空) |
无独立归档子页(归档=删除,见 grill Q9/D19;列表加 archive_status 筛选默认排除) |
| 客户总览 | @DataScope 覆盖组织范围的 未删除、未进入公海 客户(默认只列 archive_status=1) |
无独立归档 tab(归档=删除,加筛选条件默认排除,可勾选查询) |
| 客户公海 | archive_status=有效(1) 且 owner_user_id IS NULL 逻辑视图 |
无 |
- 公海不是独立实体,无池表;对称商机公海 = 逻辑视图(chart D3)。
- 管理职务不扩大「我的客户」数据范围(原型 2.1 §6 明文);管理视角走「客户总览」。
- 协同人视角:协同人可见客户(进「我的客户」),但不得归档/合并(仅负责人可,原型 2.2 §4)。
B. 内置视图 / 常用检索(硬编码,不入库)
我的客户 内置:我负责的客户(owner=我) / 我协同的客户(团队成员表含我) / 待跟进的客户(有下次跟进时间且 ≤ now) / 我关注的客户(关注表) / 最近访问(view_log 倒序)。
客户公海 内置:最近访问 / 我关注的客户(原型 A4-1-1 检索列表只见这两项 + 自定义)。
客户总览 内置:最近访问 / 我关注的客户 / 我负责的客户 / 我协同的客户(原型 A4-2-1 有「我负责的/我协同的」身份筛选)。
自定义视图 = crm-preference 平台能力,票 11 接入(三个 scope_key)。内置视图不落库,口径硬编码(对称商机票 14 拍板)。
C. 三视图模式(定稿)
| workspace | 视图模式 |
|---|---|
| 我的客户 | 表格 / 列表详情(左表+右详情) / 看板 |
| 客户总览 | 表格 / 列表详情 / 看板 |
| 客户公海 | 表格 / 分屏(左表+右详情) |
- 看板视图分组页签 = 三个:
客户阶段/客户星级/关系星级(原型 A4-3-1 §1.3 明文「看板视图包含客户阶段、客户星级、关系星级三个分组页签」;A4-2-1 卡片视图顶部即「潜在客户(3)/重潜客户(3)/已成交客户(3)」)。- ⚠ 本期注记(D20 改票 B):客户阶段本期实际只有「潜在」(重潜/已成交触发链路 seam 不可达),故本期看板「客户阶段」分组下客户均堆在「潜在客户」列,重潜/已成交列恒为空。这是预期行为、非 bug:看板仍按
customer_stage正常分组,三列骨架照旧渲染,链路就绪后自然填充;不得为填列而造假阶段数据。
- ⚠ 本期注记(D20 改票 B):客户阶段本期实际只有「潜在」(重潜/已成交触发链路 seam 不可达),故本期看板「客户阶段」分组下客户均堆在「潜在客户」列,重潜/已成交列恒为空。这是预期行为、非 bug:看板仍按
- 视图切换记住用户偏好(复用 crm-preference 列偏好能力;对称商机票 14);首次默认表格视图。
- 勾选跨分页保留;全选仅当前页/当前批次;批量操作按已勾选 ID 集合执行。
D. 共用列(定稿,三 workspace 同款列基础 + 差异列)
共用列:客户名称(固定列不可隐藏) / 客户编号 / 客户类型 / 所属地区 / 行业 / 客户阶段 / 客户星级 / 关系星级 / 战略协议等级(快照) / 已成交VIP客户等级(快照) / 关联业务(商机/项目计数) / 最近跟进时间。
差异列:
- 我的客户 / 客户总览:+ 销售负责人 / 销售部门。
- 客户公海:+ 进入公海时间(
enter_pool_time,见票 03 回填) / 无销售负责人列(owner 空)。
字段设置 = crm-preference 列偏好(列显隐/排序,用户级);客户名称为固定列不参与设置。
E. 归属迁移动作枚举(定稿)
| 动作 | 语义 | 前置校验 | 触发方 |
|---|---|---|---|
| 领取 | 公海→个人(owner 空→当前用户) | 客户仍在公海 + 无进行中商机/项目 | 普通销售 |
| 分配 | 公海→个人 / 个人→个人(换 owner) | 目标人员启用 + 有权分配范围 + 非原负责人 | 领导/管理 |
| 抛公海 | 个人→公海(清 owner+协同人) | 无进行中商机/项目(原型 A4-1-1 §3 明文)+ 有抛公海权限 | 领导/管理 |
| 归档 | 有效→已归档(archive_status 1→2) | 仅销售负责人可;无进行中商机/项目(原型 A4-3-1 归档弹窗明说) | 销售/领导 |
| 恢复 | 已归档→有效(2→1) | 仅销售负责人可 | 销售/领导 |
| 交割 | 换 owner(跨模块同步商机/项目负责人) | 票 08 专管 | 销售本人 |
- 每边写操作日志(票 07 oplog);CAS 乐观锁 + 版本号。
- 批量操作部分失败不回滚(按客户逐条独立事务,跳过已不可操作项,Toast 报成功/跳过数)——例外:批量归档整批预检,任一失败整批不执行(原型 A4-3-1 §3.6 明文)。
- 「进行中商机/项目」阻止抛公海/归档:商机侧读 crm-opportunity(状态=推进中 即 opp_status=2);项目侧留 seam(A5 未建,先跳过项目那半,等 A5 建好补校验)。
- 领取/分配 后端副作用(D25,票10 锚点):从公海领取或分配到一个负责人时,若
last_valid_follow_time为空(客户此前无主/无锚点)→ 赋当前时刻(超期提醒开始计时)。抛公海/归属迁移不动锚点(仍需有主才计时)。
F. 新增字段(回填票 02)
| Java 字段 | 列名 | 类型 | 说明 |
|---|---|---|---|
| enterPoolTime | enter_pool_time | datetime | 进入公海时间(公海列表列;抛公海时写入,领取/分配时清空) |
enterPoolTime无孤立单大写字母陷阱,无需@Column(name=...)。
G. 领导视角 DataScope 映射(对称 crm-auth)
- 客户总览可见性 =
@DataScope(module="customer")套DataScopeEnum(SELF/DEPT/DEPT_AND_CHILD/ALL),按用户角色配置决定(ADR-0018 按模块可配)。 - 普通销售无客户总览菜单权限时不可见;总监=DEPT_AND_CHILD 或 ALL(按后台配置)。
- 公海:普通销售看「可领取」= 其部门集合可见范围内 owner 空的客户;领导看「可分配」= 其管理范围。
H. 产品确认项 — 已随 grill 全部销号
| # | 问题 | 影响 |
|---|---|---|
| P0-1 | archive_status 筛选条件(默认排除已归档,勾选可查) |
列表查询参数 |
| P1-1 | 排序字段池(票 11) |
I. 回填 / 下游影响
- 票 02:新增
enter_pool_time字段(本票 F)。 - 票 08(交割):owner 换主 = 本票「分配」动作的扩展版(跨模块同步),交割事务复用 owner 变更 oplog 语义。
- 票 11(saved-view):三 workspace 各自 scope_key,字段池白名单 = 本票 D 共用列 + 差异列。
- 票 07(oplog):归属迁移(领取/分配/抛公海/归档/恢复/交割)都写 oplog。
- 票 01(CONTEXT):术语「客户公海」「销售负责人」「协同人」「归档」「已合并」。