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.
 
 
 
 
 

4.3 KiB

03 P1 判定(8 项)

Type: task Status: resolved Blocked by: 01

Question

对缺陷报告 P1-1 ~ P1-8 逐项做「原型条款(01 产出)+ PRD v1.2 条款 + 代码现状」三方比对,四类裁决(真实缺陷 / 实现遗漏 / 需求变更 / 误报)+ 证据链 + 修复方向。

charting 校准点

  • P1-1(反馈提交清草稿):PRD §6.4 定稿"清除同 (user_id, lead_id) 的草稿行"——查 LeadTransitionImpl.applyFeedback()
  • P1-2(删除权限):注意 PRD §3.3 已推翻原型——定稿为"删除 = (状态≠已转商机) AND (管理员 OR 创建人·强确认)",不是原型的"仅管理员+状态白名单"。判定时区分:原型的"仅管理员"= 需求变更;但 deleteLead()isCreator 死变量 + 无任何权限拦截 = 真实缺陷(按 PRD 规则修,不按原型)。还要审现行注释"管理员判定由 DataScope 兜底"是否成立(DataScope 是读过滤,不是写守卫)。
  • P1-3(EDIT 历史字段级 diff):PRD §6.9 定稿"detail 含变更字段清单(旧值→新值)";现状 editLead() L185 只记 leadName——查证后判。
  • P1-4(反馈入口校验):守卫已下沉 LeadTransition(代码注释自述)——查 TransitionCmd.FeedbackCmdallowedFromStatuses() 是否覆盖 {已领取,跟进中,作废(仅有效反馈)},以及 feedbackStatus 枚举合法性(非 1/2 值是否被拒)。可能部分误报。
  • P1-5(池归属变更联动):需先照亮雾区——查 PoolChangedEvent 是否存在、监听器在哪、做什么;PRD §4.1.1 定稿"未分发/待领取 dept_id 跟池走,已领取/跟进中不动"。
  • P1-6(N/M 变更重算 deadline):PRD §5.3 定稿刷新公式(已领取: claim_time+new_N;跟进中: last_feedback_time+new_N;M: create_time+new_M,status≠已转商机;当日不回溯清算)。查监听器/定时任务是否实现。
  • P1-7(统计 SQL 聚合):查 LeadViewQueryImpl.countStats() 是否仍 selectList 后内存循环——性能问题,裁决时定级(真实缺陷/P2 级)。
  • P1-8(定时任务先失效后回收):PRD §6.7 grill #4 定稿"统一每日 02:00 同一次扫描内先失效后回收"(ADR-0019)——查是否两个独立 @Scheduled 存在竞态。

产出.scratch/lead-defect-a2-a7-3-1/确认清单-P1.md(同 02 格式)。P1-5/P1-6 的现状结论直接影响 ticket 09 的形状,务必写清"已有什么/缺什么"。

纪律:PRD 与原型均无定论的产品分歧 → 停下问用户。

Answer

产出确认清单-P1.md(2026-08-19)。

裁决分布:实现遗漏 3(P1-1/3/6)/ 真实缺陷 3(P1-2/7/8)/ 误报 2(P1-4/5)/ 需求变更 0。

  • P1-1 实现遗漏:applyFeedback L226-237 只 insert SUBMITTED,无 DRAFT 清理(PRD §6.4 L323 定稿);无草稿回显接口,影响限于脏行。
  • P1-2 真实缺陷:isCreator L197-199 死变量;"DataScope 兜底"注释不成立(DataScope=读过滤,SELF/DEPT 档销售可互删本部门他人线索);按 PRD §3.3"管理员 OR 创建人"修,管理员判定与票 07 共用机制。
  • P1-3 实现遗漏:editLead L185 只记 leadName 单值;PRD §6.9/§6.10 定稿字段级 old→new。
  • P1-4 误报:FeedbackCmd 守卫完备(allowedFrom={3,4,7}+requiresOwner+L196 枚举校验);报告"拦截 VOID"建议与 PRD §3.3 边 #16 冲突。票 08 仅复核单测覆盖。
  • P1-5 误报:PoolChangedEventListener 已完整实现 §4.1.1(in(1,2) 刷 dept_id);"省份"维度 PRD 无条款。票 09 跳过 P1-5,监听器扩展只做 P1-6
  • P1-6 实现遗漏:N 重算完全无代码、M 重算注释自认预留(监听器 L45-46);票 09 按 §5.3 公式补(自定义 SQL DATE_ADD)。
  • P1-7 真实缺陷(性能):countStats selectList 内存循环,违反 ADR-0023 D3"按 status 分组计数"定稿;票 09 改 SQL 聚合(注意 H2 兼容)。
  • P1-8 真实缺陷:LeadExpireJob(02:00)/LeadRecycleJob(02:05) 两独立 @Scheduled 软间隔,无 ADR-0019 Consequences 要求的"失效先完成、回收后开始"硬保证(失效>5min 时双过期线索 owner 被误清);票 09 合并单 Job 串行。
  • PoolChangedEvent 雾区已照亮(map "Not yet specified" #1 可销):监听器存在、做池名快照+dept_id 联动,缺 N/M deadline 重算。
  • P1 段无产品级待确认事项。