unis_crm/MCP字段覆盖清单.md

176 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# MCP 字段覆盖清单
> 说明:本文档用于核对 MCP 接口对数据库字段的覆盖情况,帮助判断是否"已包含全部字段"、缺失了哪些表与字段。
>
> **数据来源**
> - MCP SQL 查询定义:`backend/src/main/resources/mapper/llm/LlmMcpMapper.xml`(共 77 个查询)
> - MCP 工具描述 / 字段中文映射:`backend/src/main/java/com/unis/crm/llm/tools/`(各 `*ToolProvider.java`
> - 字段注释映射:`backend/src/main/java/com/unis/crm/llm/tools/support/FieldCommentRegistry.java`
> - 表字段依据:`sql/archive/alter_fill_column_comments_pg17.sql` + 运行时 `*SchemaInitializer` 增量列
---
## 核心结论
**未完全包含全部字段。**但缺口主要集中在**子表实体**和**列表搜索层**MCP 对**核心业务主表**覆盖较完整(所有 detail 查询使用 `表.*` 返回主表全字段兜底)。
### 关键机制
所有 `xxxDetail` 查询(如 `selectOpportunityDetail`、`selectCustomerDetail`、`selectWorkReportDetail`、`selectCheckinDetail`、`selectSalesExpansionDetail`、`selectChannelExpansionDetail`、`selectCrmExpansionDetail`、`selectTodoDetail`)均使用 `表.*` **返回主表全部字段**。因此:
- 主表字段层面,**详情接口基本全覆盖**
- 真正的字段缺口集中在 **search/list 列表查询** 以及 **子表实体followup / contact / comment**。
---
## A. 各 MCP 实体 → 主表 → 已暴露字段清单
### 1. 工作日报(表 `work_daily_report`
`searchWorkReports`XML 50-100暴露
> id、userId、userName、reportDate、submitTime、sourceType、status、workContent、tomorrowPlan、score、comment
表字段alter_fill 194-204`id, user_id, report_date, work_content, tomorrow_plan, source_type, submit_time, status, score, created_at, updated_at`
Detail 用 `r.*` 全字段 + `userName / latestScore / latestComment / reviewedAt`
### 2. 商机(表 `crm_opportunity`
`searchOpportunities`XML 132-218暴露 27 个字段:
> id、opportunityCode、opportunityName、customerId、customerName、ownerUserId、ownerName、preSalesName、operatorName、projectLocation、projectOwnershipLocation、projectOwnershipLocationName、productType、opportunityType、source、isPoc、competitorName、amount、expectedCloseDate、confidence、stage、status、archived、latestProgress、nextPlan、description、actualSignedAmount、archivedAt、updatedAt
Detail 用 `o.*` 全字段 + `customerName / ownerName / followupCount / latestFollowup`
### 3. 客户(表 `crm_customer`
`searchCustomers`XML 1415-1454暴露
> id、customerCode、customerName、customerType、industry、province、city、address、source、status、ownerUserId、ownerName、remark、updatedAt
Detail 用 `c.*` 全字段 + `ownerName`
### 4. 签到(表 `work_checkin`
`searchCheckins`XML 1479-1514暴露
> id、userId、userName、deptName、checkinDate、checkinTime、bizType、bizId、bizName、locationText、remark、status
Detail 用 `c.*` 全字段 + `userNameResolved`
### 5. 销售拓客(表 `crm_sales_expansion`
`searchSalesExpansions`XML 1619-1665暴露
> id、expansionType、name、employeeNo、candidateName、officeName、mobile、email、targetDept、industry、title、employmentStatus、expectedJoinDate、hasDesktopExp、summary、stage、intentLevel、ownerUserId、ownerName、remark、sortTime、updatedAt
Detail 用 `s.*` 全字段。
### 6. 渠道拓客(表 `crm_channel_expansion`
`searchChannelExpansions`XML 1689-1744暴露
> id、expansionType、name、channelCode、channelName、province、city、officeAddress、channelIndustry、certificationLevel、annualRevenue、staffSize、contactEstablishedDate、contactName、contactTitle、contactMobile、channelAttribute、internalAttribute、hasDesktopExp、expectedSignDate、landedFlag、summary、stage、intentLevel、ownerUserId、ownerName、remark、sortTime、updatedAt
Detail 用 `c.*` 全字段 + `contactCount / followupCount`
**渠道联系人子表(`crm_channel_expansion_contact`**:并非完全没有暴露,而是通过 `crm_entity_detail``channel_expansion` 详情**联查**返回(`CrmEntityDetailToolProvider.java:174` → `selectChannelExpansionContacts`XML 2206。返回字段有限`id, contactName, contactMobile, contactTitle, sortOrder`(仅 5 个)。无独立搜索工具(不能批量查联系人)。字段缺漏见 C2。
### 7. CRM 拓展(表 `crm_crm_expansion`
`searchCrmExpansions`XML 1770-1817暴露
> id、endUser、officeName、industryAttr、extensionType、purchaseDate、warrantyExpiry、expansionTime、expansionScale、softwarePoints、onlineStatus、contactName、contactPhone、contactTitle、supplierName、h3cContactName、hasExpansionOpportunity、hasMaintenanceOpportunity、ownerUserId、ownerName、remark、sortTime、updatedAt
Detail 用 `ce.*` 全字段。
### 8. 待办(表 `work_todo`)— **全字段覆盖**
`searchTodos`XML 1241-1279暴露
> id、title、bizType、bizId、priority、status、userId、userName、dueDate、createdAt、updatedAt
Detail 用 `t.*`。此表 **无字段缺失**。
### 9. 跟进(两表合并:`crm_opportunity_followup` + `crm_expansion_followup`
- `searchFollowups`XML 1841-1927暴露公共列
> bizType、id、bizId、bizName、followupType、content、nextAction、userId、userName、followupTime
- `selectOpportunityFollowups`id、followupType、content、nextAction、followupUserId、followupUserName、followupTime
- `selectSalesExpansionFollowups` / `selectChannelExpansionFollowups`id、followupType、content、nextAction、evaluationContent、nextPlan、followupUserId、followupUserName、followupTime
### 10. 组织用户 / 组织 / 角色(表 `sys_user`、`sys_org`、`sys_role`
- `searchOrgUsers`XML 1303-1353暴露userId、username、displayName、mobile、email、status、orgIds、orgNames、roleCodes、roleNames
- `selectUserProfile`userId、username、displayName、email、phone、status、platformAdmin、createdAt
- `searchOrganizations`orgId、orgName、parentId、orgCode、sortOrder、status**parentId/orgCode/sortOrder 恒为 null**
- `searchRoles`roleId、roleName、roleCode、status、userCount
`sys_user` 表字段:`id, user_id, user_code, username, real_name, display_name, mobile, phone, email, org_id, job_title, status, hire_date, avatar_url, password_hash, created_at, updated_at, is_deleted, pwd_reset_required, is_platform_admin`
### 11. 其他(非独立业务主表工具)
- **动态/活动日志** `sys_activity_log`:通过 `universalSearchActivities`XML 798通用搜索暴露 `id, title, summary, ownerUserId, ownerName, time`
- **字典**`selectDictTypes`2257、`selectDictOptions`2279、`selectColumnComments`2304
- **渠道覆盖** `crm_channel_expansion_coverage`:聚合统计 `channelCoverageSummary`2441+ **渠道详情已联查 `coverages` 明细**
- **销售所属区域** `crm_sales_expansion_coverage`**已通过 `crm_entity_detail`(sales_expansion) 联查 `coverages` 明细**
- **日报消息** `work_report_message`**已通过 `crm_entity_detail`(daily_report) 联查 `messages` 明细**sender/receiver/content/readAt 等)
---
## B. 缺失的表(数据库有数据,但 MCP 无实体/工具暴露)
| 缺失表 | 说明 | 位置 |
|---|---|---|
| `business_calendar_day` | 工作日历,**完全未暴露** | `sql/init_full_pg17.sql:778` |
| `report_reminder_*` | 日报提醒配置表MCP 未引用 | `ReportReminderService` |
| `speech_recognition_config` | 语音识别配置表MCP 未引用 | `SpeechRecognitionSchemaInitializer` |
| `dashboard_analytics_card_config` | 看板分析卡片配置表MCP 未引用 | `DashboardAnalyticsSchemaInitializer` |
| 数据权限表(`20260701_user_data_scope_user_pg17.sql` | 权限类MCP 未暴露(**合理** | `UserDataScopeSchemaInitializer` |
> 注:`sys_tenant_user`、`sys_user_role`、`cnarea`、`sys_dict_*` 为框架/字典/行政区划辅助表,仅被 join 使用,不算业务实体。核心业务实体(用户/客户/商机/拓客/打卡/日报/待办/跟进/组织/角色)均已覆盖。
---
## C. 缺失的字段
### C1. 主表已补齐search/list 层缺失字段)
> 详情接口用 `表.*` 已全覆盖。以下字段在**本轮已补进 search/list 查询**,供 Agent 查阅。
| 实体/表 | search 现返回的补齐字段 | 备注 |
|---|---|---|
| `work_daily_report` | `created_at, updated_at` | 审计字段 |
| `crm_opportunity` | `sales_expansion_id, channel_expansion_id, pre_sales_id, pushed_to_oms, oms_push_time, updated_by, created_at` | 外键 / OMS 集成 / 审计字段 |
| `crm_customer` | `created_at` | 审计字段 |
| `work_checkin` | `longitude, latitude, created_at, updated_at` | 经纬度已在列表返回 |
| `crm_sales_expansion` | `in_progress, created_at` | `in_progress`(是否持续跟进)已返回 |
| `crm_channel_expansion` | `industry`(兼容旧字段), `registered_capital`, `created_at` | `registered_capital` 注册资金 |
| `crm_crm_expansion` | `supplier_id, h3c_contact_id, created_at` | 外键 / 审计字段detail `ce.*` 覆盖) |
| `sys_user`profile / org-user | `user_code`(工号), `real_name`, `job_title`, `hire_date`, `display_name` | **已补工号/职位/入职日期/姓名**`password_hash`、`pwd_reset_required` **仍不应暴露**(安全) |
> ⚠️ 待确认:`sys_org` 的 `parent_id / org_code / sort_order` 仍硬编码为 null因 `sys_org` 属框架表、项目内**未找到建表脚本**,未擅自改动(`searchOrganizations`)。如需返回真实层级字段,需先人工核实 `sys_org` 列名。
### C2. 子表实体(已补齐,缺漏字段现已暴露)
| 子表 | 补齐后暴露的字段 | 说明 |
|---|---|---|
| `crm_expansion_followup` | `visit_start_time`(拜访开始时间), `source_type`, `source_id`, `created_at`, `updated_at` | searchFollowups、sales/channel followups 均已补 |
| `crm_opportunity_followup` | `source_type`, `source_id`, `created_at`, `updated_at` | selectOpportunityFollowups 已补 |
| `crm_channel_expansion_contact` | `channel_expansion_id, duty, birthday, wecom_added, special_note, sort_order, created_at, updated_at` | selectChannelExpansionContacts 已补全字段 |
| `work_daily_report_comment` | `created_at` | selectWorkReportComments 已补 |
| `crm_channel_expansion_coverage` | `province, city` | 渠道详情 `crm_entity_detail`(channel_expansion) 新增 `coverages` 明细(`selectChannelExpansionCoverages` |
| `crm_sales_expansion_coverage` | `province, city` | 销售详情 `crm_entity_detail`(sales_expansion) 新增 `coverages` 明细(销售所属区域,`selectSalesExpansionCoverages`),此前完全未暴露 |
| `work_report_message` | `sender_user_id, receiver_user_id, report_date, line_index, biz_type, biz_id, biz_name, content, read_at, created_at` | 日报详情 `crm_entity_detail`(daily_report) 新增 `messages` 明细(`selectWorkReportMessages`),此前完全未暴露 |
> ✅ **「是否加企业微信」维度现已支持统计**`crm_report_query`(`channel_analytics`) 新增 `contactWecomDistribution` 聚合(按 `crm_channel_expansion_contact.wecom_added`:已加/未加/未填写,含联系人计数、渠道计数)。
---
## D. 备注(低价值 / 安全 / 信息不全)
- **审计字段**`created_at` / `updated_at``crm_opportunity` 另含 `updated_by`。本轮已补进列表层。
- **外键字段**`customer_id`、`owner_user_id`、`sales_expansion_id`、`channel_expansion_id`、`pre_sales_id`、`followup_user_id`、`operator_user_id`、`reviewer_user_id`、`report_id` 等。
- **安全敏感字段**`sys_user.password_hash`、`pwd_reset_required` **不应暴露**MCP 正确未暴露)。
- **OMS 集成字段**`crm_opportunity.pushed_to_oms`、`oms_push_time`、`updated_by` 已补进列表层。
- **兼容性遗留字段**`crm_channel_expansion.industry`(兼容旧结构)已补;`oms_project_code` 已在 `OpportunitySchemaInitializer:316` 被 DROP。
### 信息不全待核对项
1. ~~`crm_crm_expansion` 表字段全集未找到建表脚本~~**已找到** `sql/20260827.sql`45-68字段全集已核验。
2. `sys_org` / `sys_role` / `sys_tenant_user` 的完整建表脚本**未找到**(仅片段注释);`searchOrganizations` 中 `parentId/orgCode/sortOrder` 被硬编码 null**待人工核实列名后再补真实值**。
3. `business_calendar_day`、`report_reminder_*`、`speech_recognition_config`、`dashboard_analytics_card_config`、数据权限表仍无独立 MCP 工具(不在本轮范围)。
---
## 结论摘要
- **是否已包含全部字段?** 核心业务主表 + 详情接口(`表.*`)已全覆盖;本轮已把所有明确标识的缺失字段补齐。剩余未处理项:`sys_org` 层级字段(待确认列名)、以及 `business_calendar_day` / 日报提醒 / 语音识别 / 看板卡片等配置类表在 MCP 中无独立工具(配置类,价值低)。
- **本轮已补齐的缺口**
1. 子表(真正缺漏)已全补:`crm_expansion_followup.visit_start_time/source_type/source_id`、`crm_channel_expansion_contact` 全部字段(含 `wecom_added`)、`crm_opportunity_followup`、`work_daily_report_comment.created_at`。
2. 新增 `crm_report_query.channel_analytics``contactWecomDistribution`**支持按「是否加企业微信」维度统计**。
3. 列表层:`work_checkin` 经纬度、`crm_sales_expansion.in_progress`、`registered_capital`、及 `created_at/updated_at` 补齐。
4. 用户画像:`sys_user.user_code(工号)/real_name/job_title(职位)/hire_date(入职日期)` 已补齐(`selectUserProfile` 与 `searchOrgUsers`)。
5. 新增 `crm_entity_detail`(crm_expansion) 联查 `contacts``crm_crm_expansion_contact` 子表)+ `followups`biz_type='crm'),此前完全未暴露。
6. **新增覆盖地市明细**:销售所属区域 `crm_sales_expansion_coverage`、渠道覆盖 `crm_channel_expansion_coverage` 已在销售/渠道详情的 `coverages` 返回(此前销售所属区域完全未暴露)。
7. **新增日报消息** `work_report_message`:日报详情 `messages` 返回 sender/receiver/content/readAt 等(此前完全未暴露)。
- **待办(非必需)**`sys_org.parent_id/org_code/sort_order` 待人工核实框架表列名后补真实值。