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.
 
 
 
 
 

37 KiB

A4 客户管理 Bruno 接口文档缺口普查 worklist

  • 普查范围:D:\code\crm-api-docs\A4 客户管理\ 全部 117 个端点 .bru(排除 folder.bru),2026-09-11 全量重扫
  • 分类口径:(a) 占位示例(响应示例标记「非真实返回」);(b) 退化示例(标记 E2E 实测但关键载荷为空集);(c) 嵌套 DTO 未展开(含类型占位 List 与扁平无前缀两种漏网形态);(d) 说明不清晰(截断/表缺字段/值域缺失)
  • 模块归属 = Controller 所在模块;117 文件映射 75 个唯一端点(总览/我的/公海/联系人四个分区大量复用同一端点,修一处示例可多文件同步)
  • 机器可读格式:主表每文件一行,类型 列为 a/b/c/d 组合(ok=无缺口),可直接 grep

逐文件 worklist(117 行)

文件 端点 类型 形态 建议修法 模块/Controller 备注
客户交割/交接记录分页.bru GET /api/customer/transfer/page c+d c:DTO-flat (c) content[].details List 子行扁平无前缀,content[].id 与明细 id 重名歧义。修:明细行改 content[].details[].{id, customerId, customerName, assignStatus, assignUserName, assignTime};TransferDetailDTO.createTime(发起时间)有 @Schema 且实测返回里有,表缺该行。修:补一行 createTime(LocalDateTime,发起时间) crm-customer/CustomerTransferController
客户交割/交接详情.bru GET /api/customer/transfer/detail c+d c:DTO-flat (c) details List 子行扁平无前缀。修:改 details[]. 前缀 6 字段;同上:补 createTime 行 crm-customer/CustomerTransferController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户交割/发起交接.bru POST /api/customer/transfer/initiate a+c+d c:DTO-flat (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) 同交接详情:details 子行扁平无前缀。修:改 details[]. 前缀;同上:补 createTime 行 crm-customer/CustomerTransferController
客户交割/发起前客户预览.bru GET /api/customer/transfer/preview ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerTransferController
客户交割/可分配销售列表.bru GET /api/customer/transfer/assignable a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerTransferController
客户交割/客户分配.bru POST /api/customer/transfer/assign b+c b:partial (b) failures=[](全成功)。修:补采含部分失败的分配(如非法客户 id)展示 CustomerBatchFailItem 形态;(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerTransferController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户公海/workspace 列表分页.bru POST /api/customer/workspace/page ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerWorkspaceController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户公海/上传导入文件并预校验.bru POST /api/customer/import/upload a+c c:DTO-flat (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) rows List 子行扁平无前缀(sheetName/rowNum/identity/verdict/reason 悬挂)。修:改 rows[]. 前缀 5 字段 crm-customer/CustomerImportController
客户公海/下载导入模板.bru GET /api/customer/import/template a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerImportController
客户公海/任务结果.bru GET /api/customer/import/result d d:missing-field ImportResultDTO.createTime(提交时间)实测返回里有,表缺该行。修:补一行 createTime(LocalDateTime,提交时间) crm-customer/CustomerImportController 非退化复核:仅 creatorName null(可空字段),核心计数全有值——非退化;错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户公海/保存列偏好.bru POST /api/preference/save a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ColumnPreferenceController
客户公海/保存视图形态.bru POST /api/preference/view-form/save a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ViewFormController
客户公海/关注客户.bru POST /api/customer/focus a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerFocusController
客户公海/分配客户.bru POST /api/customer/assign a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
客户公海/取消关注客户.bru POST /api/customer/unfocus a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerFocusController
客户公海/失败疑似重复明细.bru GET /api/customer/import/failures b b:full (b) data=[] 空集;ImportFailDTO 5 字段形态已列但无实例。修:用含失败行/疑似重复行的 taskId 重采(fixture 造失败行) crm-customer/CustomerImportController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户公海/客户分页.bru POST /api/customer/page a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerController
客户公海/归档客户.bru POST /api/customer/archive a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
客户公海/恢复客户.bru POST /api/customer/restore a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
客户公海/批量关注客户.bru POST /api/customer/focus-batch a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerFocusController
客户公海/批量分配.bru POST /api/customer/assign-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
客户公海/批量归档.bru POST /api/customer/archive-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
客户公海/批量抛公海.bru POST /api/customer/release-pool-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
客户公海/批量领取.bru POST /api/customer/claim-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
客户公海/抛公海.bru POST /api/customer/release-pool a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
客户公海/最近导入记录.bru GET /api/customer/import/page d d:missing-field content 元素缺 createTime 行(同 ImportResultDTO)。修:补 content[].createTime crm-customer/CustomerImportController
客户公海/确认执行导入.bru POST /api/customer/import/confirm a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerImportController
客户公海/读取列偏好.bru GET /api/preference/get a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-preference/ColumnPreferenceController
客户公海/读取视图形态.bru GET /api/preference/view-form/get a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ViewFormController
客户公海/领取客户.bru POST /api/customer/claim a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
客户总览/workspace 列表分页.bru POST /api/customer/workspace/page ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerWorkspaceController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户总览/保存列偏好.bru POST /api/preference/save a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ColumnPreferenceController
客户总览/保存视图形态.bru POST /api/preference/view-form/save a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ViewFormController
客户总览/分配客户.bru POST /api/customer/assign a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
客户总览/客户分页.bru POST /api/customer/page a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerController
客户总览/归档客户.bru POST /api/customer/archive a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
客户总览/恢复客户.bru POST /api/customer/restore a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
客户总览/批量分配.bru POST /api/customer/assign-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
客户总览/批量归档.bru POST /api/customer/archive-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
客户总览/批量抛公海.bru POST /api/customer/release-pool-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
客户总览/批量领取.bru POST /api/customer/claim-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
客户总览/抛公海.bru POST /api/customer/release-pool a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
客户总览/看板列表/看板分组汇总.bru POST /api/customer/workspace/board/summary ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerWorkspaceController
客户总览/看板列表/看板单列卡片.bru POST /api/customer/workspace/board/cards ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerWorkspaceController
客户总览/读取列偏好.bru GET /api/preference/get a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-preference/ColumnPreferenceController
客户总览/读取视图形态.bru GET /api/preference/view-form/get a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ViewFormController
客户总览/领取客户.bru POST /api/customer/claim a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
客户查重/信用代码查重.bru GET /api/customer/check-credit-code ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户查重/名称相似提示.bru GET /api/customer/check-name ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/关联商机/关联商机页签.bru GET /api/customer/opportunity/page ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerDetailController 跨模块数据:数据源 crm-opportunity(CustomerOpportunityQueryPortImpl inbound port);错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/取消重点标记.bru POST /api/customer/unstar a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerFocusController
客户详情/团队成员/团队成员页签.bru GET /api/customer/member/list ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerDetailController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/团队成员/添加团队成员.bru POST /api/customer/member/add a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerDetailController
客户详情/团队成员/移除团队成员.bru POST /api/customer/member/remove a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerDetailController
客户详情/客户详情.bru GET /api/customer/detail ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerController 非退化复核:12 个 null 均为真可选字段(母客户/等级快照/产品类等),核心全有值——非退化;错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/操作日志/操作日志分页.bru GET /api/customer/oplog/page ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerDetailController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/标记重点客户.bru POST /api/customer/star a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerFocusController
客户详情/编辑客户.bru POST /api/customer/edit a+c c:DTO-zero (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) similarHits List 零子行。修:展开 similarHits[].{customerId, customerName, ownerName, customerStage, archiveStatus, masked}(照 客户查重/名称相似提示 已展开版抄) crm-customer/CustomerController
客户详情/联系人/快速添加联系人.bru POST /api/customer/contact/quickAdd b+c b:partial (b) failedRows=[](全成功路径)。修:补采一次含失败行提交(rowIndex/reason 形态);(c) failedRows List 零子行。修:展开 failedRows[].{rowIndex, reason} crm-customer/CustomerContactEnhanceController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/联系人/电话明文查看.bru GET /api/customer/contact/reveal ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerContactEnhanceController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/联系人/联系人导出.bru POST /api/customer/contact/export a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerContactEnhanceController
客户详情/联系人/页内批量编辑.bru POST /api/customer/contact/batchEdit b+c b:partial (b) failedRows=[](全成功路径)。修:同上,与快速添加共用失败行 specimen;(c) 同上:failedRows 零子行,展开 {rowIndex, reason} crm-customer/CustomerContactEnhanceController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/联系人图谱/图谱全量读.bru GET /api/customer/contact/graph/detail b+c b:full-core (b) nodes/edges 双空数组(首读懒建空图 specimen)。修:选有联系人+已存手动边的客户重采,nodes/edges 各≥1 条;(c) nodes List/edges List 零子行。修:展开 nodes[].{contactId,name,jobTitleName,jobTitleCategory,level,levelSource,phoneMasked,isKeyContact} + edges[].{parentId,childId} crm-customer/CustomerContactGraphController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/联系人图谱/图谱整体保存.bru POST /api/customer/contact/graph/save ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerContactGraphController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/联系人导入/上传导入文件并预校验.bru POST /api/customer/contact/import/upload c c:DTO-flat (c) 同上:rows 子行扁平无前缀。修:改 rows[]. 前缀 crm-customer/CustomerContactImportController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/联系人导入/下载导入模板.bru GET /api/customer/contact/import/template a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerContactImportController
客户详情/联系人导入/任务结果.bru GET /api/customer/contact/import/result d d:missing-field ContactImportResultDTO.createTime 表缺该行。修:补 createTime 行 crm-customer/CustomerContactImportController 非退化复核:failReason null=未失败、creatorName null 可空——非退化;错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/联系人导入/失败明细与重复明细.bru GET /api/customer/contact/import/failures ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerContactImportController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/联系人导入/最近导入记录.bru GET /api/customer/contact/import/page a+d d:missing-field (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);同上(ContactImportResultDTO):补 content[].createTime crm-customer/CustomerContactImportController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/联系人导入/确认执行导入.bru POST /api/customer/contact/import/confirm ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerContactImportController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/详情公共头部.bru GET /api/customer/detail-head d d:trunc 7 行说明被引号截断成「…显 \」 dangling(生成器引号转义 bug:原文显 "--")。修:修生成器转义并补全 7 行口径(恒 null 语义本身已在,损失的是断句后半) crm-customer/CustomerDetailController 非退化复核:金额/计数 7 字段恒 null 是拍板 A 占位(外部模块未接入),非采集退化——转 (d) 截断行问题;跨模块数据:金额/计数 6 字段占位恒 null,待 A5 项目/方案卡/商机/合同模块 seam;错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
客户详情/跟进记录/新增跟进.bru POST /api/customer/follow/add a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerDetailController
客户详情/跟进记录/跟进记录分页.bru GET /api/customer/follow/page ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerDetailController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
我的客户/workspace 列表分页.bru POST /api/customer/workspace/page ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerWorkspaceController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
我的客户/保存列偏好.bru POST /api/preference/save a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ColumnPreferenceController
我的客户/保存视图形态.bru POST /api/preference/view-form/save a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ViewFormController
我的客户/分配客户.bru POST /api/customer/assign a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
我的客户/客户分页.bru POST /api/customer/page a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerController
我的客户/客户导入/上传导入文件并预校验.bru POST /api/customer/import/upload a+c c:DTO-flat (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) 同上:rows 子行扁平无前缀。修:改 rows[]. 前缀 crm-customer/CustomerImportController
我的客户/客户导入/下载导入模板.bru GET /api/customer/import/template a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerImportController
我的客户/客户导入/任务结果.bru GET /api/customer/import/result d d:missing-field 同上:补 createTime 行 crm-customer/CustomerImportController 非退化复核:同上——非退化;错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
我的客户/客户导入/失败疑似重复明细.bru GET /api/customer/import/failures b b:full (b) 同公海版:data=[]。修:同 taskId 重采含失败行 specimen;两份可共用一次采集 crm-customer/CustomerImportController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
我的客户/客户导入/最近导入记录.bru GET /api/customer/import/page d d:missing-field 同上:补 content[].createTime crm-customer/CustomerImportController
我的客户/客户导入/确认执行导入.bru POST /api/customer/import/confirm a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerImportController
我的客户/工商信息查询.bru GET /api/customer/company-lookup a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerController 跨模块数据:数据源 StubCompanyLookupPortImpl(crm-customer 内 stub,外部工商 API 未接)
我的客户/归档客户.bru POST /api/customer/archive a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
我的客户/快速创建客户.bru POST /api/customer/quick-create b+c b:partial (b) needConfirm/similarHits 双 null(直落库分支)。修:补采名称相似触发 needConfirm=true 分支的 specimen;(c) 同上:similarHits 零子行,展开 6 字段 crm-customer/CustomerController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
我的客户/恢复客户.bru POST /api/customer/restore a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
我的客户/批量分配.bru POST /api/customer/assign-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
我的客户/批量归档.bru POST /api/customer/archive-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
我的客户/批量抛公海.bru POST /api/customer/release-pool-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
我的客户/批量更新工商信息.bru POST /api/customer/company-lookup/batch-update a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerController 跨模块数据:同上 stub port
我的客户/批量领取.bru POST /api/customer/claim-batch a+c c:type-F (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) failures 类型列是占位符 List 且零展开。修:改 List 并展开子行 failures[].{id, reason(枚举 CustomerBatchFailReason), message} crm-customer/CustomerOwnershipController
我的客户/抛公海.bru POST /api/customer/release-pool a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
我的客户/新增客户.bru POST /api/customer/create a+c c:DTO-zero (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) 同上:similarHits 零子行,展开 6 字段 crm-customer/CustomerController
我的客户/看板列表/看板分组汇总.bru POST /api/customer/workspace/board/summary ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerWorkspaceController
我的客户/看板列表/看板单列卡片.bru POST /api/customer/workspace/board/cards ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerWorkspaceController
我的客户/编辑客户.bru POST /api/customer/edit a+c c:DTO-zero (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单);(c) 同上:similarHits 零子行,展开 6 字段 crm-customer/CustomerController
我的客户/读取列偏好.bru GET /api/preference/get a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-preference/ColumnPreferenceController
我的客户/读取视图形态.bru GET /api/preference/view-form/get a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ViewFormController
我的客户/领取客户.bru POST /api/customer/claim a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerOwnershipController
战略协议/删除战略协议.bru POST /api/customer/agreement/delete a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerAgreementController
战略协议/战略协议详情.bru GET /api/customer/agreement/detail a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerAgreementController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
战略协议/战略协议页签列表.bru GET /api/customer/agreement/list a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerAgreementController 错误码丢失:HEAD 版有「错误码」节本版无(重生成回退),从 git 历史回捞并入票 06
战略协议/新增战略协议.bru POST /api/customer/agreement/create a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerAgreementController
战略协议/编辑战略协议.bru POST /api/customer/agreement/edit a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerAgreementController
联系人/保存列偏好.bru POST /api/preference/save a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ColumnPreferenceController
联系人/保存视图形态.bru POST /api/preference/view-form/save a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ViewFormController
联系人/删除联系人.bru POST /api/customer/contact/delete a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerContactController
联系人/新增联系人.bru POST /api/customer/contact/create a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerContactController
联系人/电话软提示.bru GET /api/customer/contact/check-phone ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerContactController
联系人/编辑联系人.bru POST /api/customer/contact/edit a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-customer/CustomerContactController
联系人/联系人全局搜索.bru GET /api/customer/contact/search ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerContactController 同上 jobTitleLevel 值域缺失
联系人/联系人详情.bru GET /api/customer/contact/detail a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-customer/CustomerContactController ContactDTO.jobTitleLevel 仅「职务层级(可空)」无值域——源码 @Schema 本身没写,需补源码或文档注明取值
联系人/读取列偏好.bru GET /api/preference/get a (a) 占位示例:E2E 采集有数据 specimen 回填(票 02 采集清单) crm-preference/ColumnPreferenceController
联系人/读取视图形态.bru GET /api/preference/view-form/get a (a) 占位示例(Result/标量:E2E 采一次真值信封即可,data 结构不会再变丰富) crm-preference/ViewFormController
联系人/顶级联系人列表.bru GET /api/customer/contact/page ok 无缺口(示例真值+结构完整+说明完整) crm-customer/CustomerContactController 同上 jobTitleLevel 值域缺失

汇总统计

各类型计数(按文件,一文可多类)

类型 文件数 说明
(a) 占位示例 79 其中 Result/标量端点只需采信封真值;有载荷端点需采有数据 specimen
(b) 退化示例 7 full×3(整载荷空)/ partial×4(关键子结构空:failures/failedRows/similarHits/nodes+edges)
(c) 嵌套未展开 26 类型占位 List<F>×13(failures)/ 具名DTO零展开×7(similarHits×4、nodes+edges×1、failedRows×2)/ 扁平无前缀×6(DetailRow×3、Row×3)
(d) 说明不清晰 10 引号截断行×1 文件 7 行 / 表缺 createTime 行×9 文件 / 值域薄弱备注×3 文件
ok 无缺口 22 示例真值 + 结构完整 + 说明完整

按子目录分布(文件数 / 其中 a·b·c·d)

子目录 总文件 a b c d ok
客户交割 6 2 1 4 3 1
客户公海 24 20 1 5 2 1
客户总览 17 14 0 4 0 3
客户查重 2 0 0 0 0 2
客户详情 24 9 3 5 3 9
我的客户 28 21 2 8 2 3
战略协议 5 5 0 0 0 0
联系人 11 8 0 0 0 3

错误码节回退(额外发现,票 06 输入)

本工作树是对 HEAD 的整体重写(117 文件全改)。对照 git 历史:HEAD 有「错误码」节的 78 文件 → 现仅 48 文件,30 文件的错误码节在重生成时丢失(上表备注列已逐文件标注「错误码丢失」,可 grep)。修法:从 git show HEAD:<file> 回捞错误码节并与现源码 @Controller 错误码枚举比对后合并。

模块归属

  • crm-customer(/api/customer/*,13 个 Controller):101 文件
  • crm-preference(/api/preference/*,ColumnPreferenceController + ViewFormController):16 文件(列偏好/视图形态读写,被 4 个分区复用)
  • 跨模块数据依赖(Controller 仍在 crm-customer,但响应数据来自别处):关联商机页签 ← crm-opportunity inbound port;工商信息查询/批量更新 ← StubCompanyLookupPortImpl(stub);详情公共头部金额字段 ← A5 项目/方案卡/商机/合同 seam(恒 null 占位)