# 客户回访管理模块 - API接口文档 > **模块**: 10-客户回访管理 > **版本**: v1.0 > **日期**: 2025-10-03 > **关联文档**: > - 需求文档: `docs/10-客户回访管理模块需求.md` > - 原型图: `yuanxing/10-客户回访管理原型图.md` > - 数据库: `sql/crm/10-crm_visit.sql` --- ## 📋 目录 - [1. 回访记录接口](#1-回访记录接口) - [2. 回访问题接口](#2-回访问题接口) - [3. 统计分析接口](#3-统计分析接口) - [4. 数据模型](#4-数据模型) --- ## 1. 回访记录接口 ### 1.1 查询回访记录列表(分页) **接口地址**: `GET /crm/visit/list` **接口描述**: 分页查询回访记录列表,支持多条件筛选 **权限标识**: `crm:visit:list` **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | pageNum | Integer | 否 | 页码,默认1 | | pageSize | Integer | 否 | 每页条数,默认10 | | visitNo | String | 否 | 回访编号(模糊查询) | | customerId | Long | 否 | 客户ID | | customerName | String | 否 | 客户名称(模糊查询) | | contractId | Long | 否 | 合同ID | | contactId | Long | 否 | 联系人ID | | visitType | String | 否 | 回访类型 | | visitMethod | String | 否 | 回访方式 | | status | String | 否 | 回访状态 | | satisfaction | String | 否 | 满意度 | | hasProblem | Integer | 否 | 是否有问题(0否 1是) | | hasOpportunity | Integer | 否 | 是否有商机(0否 1是) | | ownerUserId | Long | 否 | 负责人ID | | visitDateBegin | String | 否 | 回访时间开始 | | visitDateEnd | String | 否 | 回访时间结束 | | beginTime | String | 否 | 创建开始时间 | | endTime | String | 否 | 创建结束时间 | **返回示例**: ```json { "code": 200, "msg": "查询成功", "rows": [ { "id": 1, "visitNo": "VIS20250125001", "customerId": 1, "customerName": "华为技术有限公司", "contractId": 1, "contractNo": "CON20250115001", "contactId": 1, "contactName": "张伟", "contactMobile": "13800138000", "visitType": "delivery", "visitDate": "2025-01-25 14:00:00", "visitMethod": "phone", "visitContent": "回访CRM系统部署情况,了解使用中的问题", "visitSummary": "客户对系统整体满意,提出了2个功能优化建议", "satisfaction": "satisfied", "satisfactionScore": 4, "hasProblem": 1, "problemCount": 2, "problemSummary": "权限设置复杂、报表导出慢", "hasOpportunity": 1, "opportunityDesc": "客户有意向采购移动端APP", "opportunityAmount": 80000.00, "nextVisitDate": "2025-02-25", "nextVisitContent": "跟进功能优化进度", "status": "visited", "ownerUserId": 1, "ownerUserName": "张三", "duration": 45, "attachments": "/upload/visit/file1.pdf", "createTime": "2025-01-25 14:00:00", "remark": "" } ], "total": 89 } ``` --- ### 1.2 查询回访记录详情 **接口地址**: `GET /crm/visit/{id}` **接口描述**: 根据ID查询回访记录详细信息 **权限标识**: `crm:visit:query` **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | Long | 是 | 回访记录ID | **返回示例**: 同1.1列表返回的单条数据,包含完整字段 --- ### 1.3 新增回访记录 **接口地址**: `POST /crm/visit` **接口描述**: 新增回访记录信息 **权限标识**: `crm:visit:add` **请求体**: ```json { "visitNo": "VIS20250125001", "customerId": 1, "contractId": 1, "contactId": 1, "visitType": "delivery", "visitDate": "2025-01-25 14:00:00", "visitMethod": "phone", "visitContent": "回访CRM系统部署情况,了解使用中的问题", "visitSummary": "客户对系统整体满意,提出了2个功能优化建议", "satisfaction": "satisfied", "satisfactionScore": 4, "hasProblem": 1, "problemSummary": "权限设置复杂、报表导出慢", "hasOpportunity": 1, "opportunityDesc": "客户有意向采购移动端APP", "opportunityAmount": 80000.00, "nextVisitDate": "2025-02-25", "nextVisitContent": "跟进功能优化进度", "ownerUserId": 1, "duration": 45, "remark": "" } ``` **请求参数说明**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | visitNo | String | 是 | 回访编号,唯一,格式:VIS+yyyyMMdd+4位流水号 | | customerId | Long | 是 | 客户ID | | contractId | Long | 否 | 合同ID | | contactId | Long | 否 | 联系人ID | | visitType | String | 是 | 回访类型:contract/delivery/regular/renew/complaint/other | | visitDate | String | 是 | 回访时间 yyyy-MM-dd HH:mm:ss | | visitMethod | String | 是 | 回访方式:phone/wechat/email/visit/other | | visitContent | String | 是 | 回访内容,文本类型 | | visitSummary | String | 否 | 回访小结,最大1000字符 | | satisfaction | String | 否 | 满意度:very_satisfied/satisfied/general/dissatisfied/very_dissatisfied | | satisfactionScore | Integer | 否 | 满意度评分:1-5分 | | hasProblem | Integer | 否 | 是否有问题:0-否,1-是 | | problemSummary | String | 否 | 问题概述,最大500字符 | | hasOpportunity | Integer | 否 | 是否有商机:0-否,1-是 | | opportunityDesc | String | 否 | 商机描述,文本类型 | | opportunityAmount | BigDecimal | 否 | 预估商机金额,保留2位小数 | | nextVisitDate | String | 否 | 下次回访日期 yyyy-MM-dd | | nextVisitContent | String | 否 | 下次回访计划,最大500字符 | | ownerUserId | Long | 否 | 负责人ID,默认当前用户 | | duration | Integer | 否 | 回访时长(分钟) | | attachments | String | 否 | 附件路径,多个用逗号分隔 | | remark | String | 否 | 备注,最大500字符 | **校验规则**: - 回访编号必须唯一 - 客户ID必须存在 - 满意度评分范围:1-5 **业务规则**: - 默认状态为visited(已回访) - 如果是计划中的回访,状态为planned - 自动记录创建人为回访人 **返回示例**: ```json { "code": 200, "msg": "操作成功", "data": { "id": 1, "visitNo": "VIS20250125001" } } ``` --- ### 1.4 修改回访记录 **接口地址**: `PUT /crm/visit` **接口描述**: 修改回访记录信息 **权限标识**: `crm:visit:edit` **请求体**: 同新增接口,但需要传入id **业务规则**: - 只能修改自己创建的回访记录 **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` --- ### 1.5 删除回访记录 **接口地址**: `DELETE /crm/visit/{ids}` **接口描述**: 删除回访记录(支持批量) **权限标识**: `crm:visit:remove` **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | ids | Long[] | 是 | 回访记录ID数组 | **业务规则**: - 删除回访记录时同时删除关联的问题记录 **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` --- ### 1.6 计划回访 **接口地址**: `POST /crm/visit/plan` **接口描述**: 创建回访计划 **权限标识**: `crm:visit:add` **请求体**: ```json { "visitNo": "VIS20250210001", "customerId": 1, "contractId": 1, "contactId": 1, "visitType": "regular", "visitDate": "2025-02-10 14:00:00", "visitMethod": "phone", "ownerUserId": 1, "remark": "定期回访" } ``` **业务规则**: - 状态设置为planned(已计划) - 回访时间为未来时间 **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` --- ### 1.7 完成回访 **接口地址**: `PUT /crm/visit/complete` **接口描述**: 完成计划的回访 **权限标识**: `crm:visit:edit` **请求体**: ```json { "id": 1, "visitContent": "回访内容...", "visitSummary": "回访小结...", "satisfaction": "satisfied", "satisfactionScore": 4, "hasProblem": 1, "problemSummary": "有2个问题", "duration": 30, "remark": "" } ``` **业务规则**: - 只能完成计划中状态的回访 - 状态变更为visited(已回访) - 必须填写回访内容 **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` --- ### 1.8 取消回访 **接口地址**: `PUT /crm/visit/cancel` **接口描述**: 取消计划的回访 **权限标识**: `crm:visit:edit` **请求体**: ```json { "id": 1, "cancelReason": "客户临时有事,延期回访", "remark": "" } ``` **请求参数说明**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | Long | 是 | 回访记录ID | | cancelReason | String | 是 | 取消原因,最大500字符 | | remark | String | 否 | 备注 | **业务规则**: - 只能取消计划中状态的回访 - 状态变更为canceled(已取消) - 记录取消原因和取消时间 **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` --- ### 1.9 查询客户回访记录 **接口地址**: `GET /crm/visit/customer/{customerId}` **接口描述**: 查询指定客户的所有回访记录 **权限标识**: `crm:visit:query` **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | customerId | Long | 是 | 客户ID | **返回示例**: ```json { "code": 200, "msg": "查询成功", "data": [ { "id": 1, "visitNo": "VIS20250125001", "visitType": "delivery", "visitDate": "2025-01-25 14:00:00", "satisfaction": "satisfied", "status": "visited" } ] } ``` --- ### 1.10 查询合同回访记录 **接口地址**: `GET /crm/visit/contract/{contractId}` **接口描述**: 查询指定合同的所有回访记录 **权限标识**: `crm:visit:query` **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | contractId | Long | 是 | 合同ID | **返回示例**: ```json { "code": 200, "msg": "查询成功", "data": [ { "id": 1, "visitNo": "VIS20250125001", "visitType": "delivery", "visitDate": "2025-01-25 14:00:00", "satisfaction": "satisfied", "status": "visited" } ] } ``` --- ### 1.11 导出回访记录 **接口地址**: `POST /crm/visit/export` **接口描述**: 导出回访记录数据到Excel **权限标识**: `crm:visit:export` **请求体**: 查询参数同1.1列表查询接口 **返回**: Excel文件流 --- ## 2. 回访问题接口 ### 2.1 查询回访问题列表 **接口地址**: `GET /crm/visit/problem/list` **接口描述**: 查询指定回访的问题列表 **权限标识**: `crm:visit:query` **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | visitId | Long | 是 | 回访ID | **返回示例**: ```json { "code": 200, "msg": "查询成功", "data": [ { "id": 1, "visitId": 1, "visitNo": "VIS20250125001", "customerId": 1, "customerName": "华为技术有限公司", "problemType": "product", "problemDesc": "权限设置界面操作复杂,建议简化", "problemImages": "/upload/problem/img1.jpg", "severity": "medium", "solution": "已安排产品部门优化权限设置界面", "status": "processing", "solveBy": 2, "solveByName": "李四", "solveTime": "2025-01-26 10:00:00", "createTime": "2025-01-25 15:00:00", "remark": "" } ] } ``` --- ### 2.2 添加回访问题 **接口地址**: `POST /crm/visit/problem` **接口描述**: 添加回访问题 **权限标识**: `crm:visit:edit` **请求体**: ```json { "visitId": 1, "customerId": 1, "problemType": "product", "problemDesc": "权限设置界面操作复杂,建议简化", "problemImages": "/upload/problem/img1.jpg", "severity": "medium", "solution": "已安排产品部门优化权限设置界面", "remark": "" } ``` **请求参数说明**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | visitId | Long | 是 | 回访ID | | customerId | Long | 是 | 客户ID | | problemType | String | 是 | 问题类型:product/service/delivery/quality/price/other | | problemDesc | String | 是 | 问题描述,文本类型 | | problemImages | String | 否 | 问题图片路径,多个用逗号分隔 | | severity | String | 是 | 严重程度:low/medium/high/urgent | | solution | String | 否 | 解决方案,文本类型 | | remark | String | 否 | 备注,最大500字符 | **业务规则**: - 添加问题后自动更新回访记录的problemCount - 默认状态为pending(待处理) **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` --- ### 2.3 修改回访问题 **接口地址**: `PUT /crm/visit/problem` **接口描述**: 修改回访问题信息 **权限标识**: `crm:visit:edit` **请求体**: 同添加接口,但需要传入id **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` --- ### 2.4 删除回访问题 **接口地址**: `DELETE /crm/visit/problem/{ids}` **接口描述**: 删除回访问题(支持批量) **权限标识**: `crm:visit:edit` **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | ids | Long[] | 是 | 问题ID数组 | **业务规则**: - 删除后自动更新回访记录的problemCount **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` --- ### 2.5 处理问题 **接口地址**: `PUT /crm/visit/problem/solve` **接口描述**: 处理回访问题 **权限标识**: `crm:visit:problem:solve` **请求体**: ```json { "id": 1, "solution": "已安排产品部门优化权限设置界面,预计下周完成", "remark": "" } ``` **请求参数说明**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | Long | 是 | 问题ID | | solution | String | 是 | 解决方案,文本类型 | | remark | String | 否 | 备注 | **业务规则**: - 只有待处理状态的问题才能处理 - 状态变更为processing(处理中) - 记录处理人和处理时间 **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` --- ### 2.6 解决问题 **接口地址**: `PUT /crm/visit/problem/resolve` **接口描述**: 标记问题已解决 **权限标识**: `crm:visit:problem:solve` **请求体**: ```json { "id": 1, "customerFeedback": "客户确认问题已解决", "isSatisfied": 1, "remark": "" } ``` **请求参数说明**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | Long | 是 | 问题ID | | customerFeedback | String | 否 | 客户反馈,文本类型 | | isSatisfied | Integer | 否 | 客户是否满意:0-否,1-是 | | remark | String | 否 | 备注 | **业务规则**: - 只有处理中状态的问题才能解决 - 状态变更为solved(已解决) - 计算处理耗时 **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` --- ### 2.7 关闭问题 **接口地址**: `PUT /crm/visit/problem/close` **接口描述**: 关闭问题 **权限标识**: `crm:visit:problem:solve` **请求体**: ```json { "id": 1, "closeReason": "客户不再关注此问题", "remark": "" } ``` **请求参数说明**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | Long | 是 | 问题ID | | closeReason | String | 是 | 关闭原因,最大500字符 | | remark | String | 否 | 备注 | **业务规则**: - 状态变更为closed(已关闭) - 记录关闭人和关闭时间 **返回示例**: ```json { "code": 200, "msg": "操作成功" } ``` --- ## 3. 统计分析接口 ### 3.1 回访统计概览 **接口地址**: `GET /crm/visit/statistics/overview` **接口描述**: 获取回访统计概览数据 **权限标识**: `crm:visit:list` **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | ownerUserId | Long | 否 | 负责人ID,不传则查询当前用户 | | beginTime | String | 否 | 开始时间 | | endTime | String | 否 | 结束时间 | **返回示例**: ```json { "code": 200, "msg": "查询成功", "data": { "totalCount": 89, "plannedCount": 12, "visitedCount": 72, "canceledCount": 5, "problemCount": 156, "solvedCount": 128, "opportunityCount": 23, "opportunityAmount": 1850000.00, "avgSatisfactionScore": 4.2, "verySatisfiedRate": 45.83, "satisfiedRate": 38.89, "generalRate": 12.50, "dissatisfiedRate": 2.78 } } ``` --- ### 3.2 满意度分布 **接口地址**: `GET /crm/visit/statistics/satisfaction` **接口描述**: 按满意度统计回访分布情况 **权限标识**: `crm:visit:list` **请求参数**: 无 **返回示例**: ```json { "code": 200, "msg": "查询成功", "data": [ { "satisfaction": "very_satisfied", "satisfactionName": "非常满意", "count": 33, "percent": 45.83 }, { "satisfaction": "satisfied", "satisfactionName": "满意", "count": 28, "percent": 38.89 } ] } ``` --- ### 3.3 回访类型分布 **接口地址**: `GET /crm/visit/statistics/type` **接口描述**: 按回访类型统计分布情况 **权限标识**: `crm:visit:list` **请求参数**: 无 **返回示例**: ```json { "code": 200, "msg": "查询成功", "data": [ { "visitType": "delivery", "typeName": "交付回访", "count": 35, "percent": 48.61 }, { "visitType": "regular", "typeName": "定期回访", "count": 25, "percent": 34.72 } ] } ``` --- ### 3.4 问题类型统计 **接口地址**: `GET /crm/visit/statistics/problem` **接口描述**: 按问题类型统计问题分布情况 **权限标识**: `crm:visit:list` **请求参数**: 无 **返回示例**: ```json { "code": 200, "msg": "查询成功", "data": [ { "problemType": "product", "typeName": "产品问题", "count": 58, "solvedCount": 45, "solvedRate": 77.59, "percent": 37.18 }, { "problemType": "service", "typeName": "服务问题", "count": 42, "solvedCount": 38, "solvedRate": 90.48, "percent": 26.92 } ] } ``` --- ### 3.5 回访趋势分析 **接口地址**: `GET /crm/visit/statistics/trend` **接口描述**: 分析回访数量和满意度趋势 **权限标识**: `crm:visit:list` **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | type | String | 否 | 统计类型:month/quarter/year,默认month | | beginTime | String | 否 | 开始时间 | | endTime | String | 否 | 结束时间 | **返回示例**: ```json { "code": 200, "msg": "查询成功", "data": [ { "period": "2025-01", "totalCount": 28, "problemCount": 45, "solvedCount": 38, "opportunityCount": 8, "avgSatisfactionScore": 4.3, "satisfiedRate": 85.71 } ] } ``` --- ### 3.6 负责人回访统计 **接口地址**: `GET /crm/visit/statistics/owner` **接口描述**: 按负责人统计回访情况 **权限标识**: `crm:visit:list` **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | beginTime | String | 否 | 开始时间 | | endTime | String | 否 | 结束时间 | **返回示例**: ```json { "code": 200, "msg": "查询成功", "data": [ { "ownerUserId": 1, "ownerUserName": "张三", "totalCount": 25, "problemCount": 38, "solvedCount": 32, "opportunityCount": 6, "avgSatisfactionScore": 4.4 } ] } ``` --- ### 3.7 待回访提醒 **接口地址**: `GET /crm/visit/statistics/reminder` **接口描述**: 查询即将到期的回访计划 **权限标识**: `crm:visit:list` **请求参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | days | Integer | 否 | 提前天数,默认3天 | **返回示例**: ```json { "code": 200, "msg": "查询成功", "data": [ { "id": 5, "visitNo": "VIS20250210001", "customerName": "华为技术有限公司", "visitType": "regular", "visitDate": "2025-02-10 14:00:00", "remainDays": 2, "ownerUserName": "张三" } ] } ``` --- ## 4. 数据模型 ### 4.1 VisitBo(回访业务对象) ```java public class CrmVisitBo extends BaseEntity { /** 主键ID */ @NotNull(message = "主键不能为空", groups = { EditGroup.class }) private Long id; /** 回访编号 */ @NotBlank(message = "回访编号不能为空", groups = { AddGroup.class, EditGroup.class }) private String visitNo; /** 客户ID */ @NotNull(message = "客户ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long customerId; /** 合同ID */ private Long contractId; /** 联系人ID */ private Long contactId; /** 回访类型 */ @NotBlank(message = "回访类型不能为空", groups = { AddGroup.class, EditGroup.class }) private String visitType; /** 回访时间 */ @NotBlank(message = "回访时间不能为空", groups = { AddGroup.class, EditGroup.class }) private String visitDate; /** 回访方式 */ @NotBlank(message = "回访方式不能为空", groups = { AddGroup.class, EditGroup.class }) private String visitMethod; /** 回访内容 */ @NotBlank(message = "回访内容不能为空", groups = { AddGroup.class, EditGroup.class }) private String visitContent; /** 回访小结 */ private String visitSummary; /** 满意度 */ private String satisfaction; /** 满意度评分 */ @Min(value = 1, message = "满意度评分最小为1") @Max(value = 5, message = "满意度评分最大为5") private Integer satisfactionScore; /** 是否有问题 */ private Integer hasProblem; /** 问题概述 */ private String problemSummary; /** 是否有商机 */ private Integer hasOpportunity; /** 商机描述 */ private String opportunityDesc; /** 预估商机金额 */ private BigDecimal opportunityAmount; /** 下次回访日期 */ private String nextVisitDate; /** 下次回访计划 */ private String nextVisitContent; /** 负责人ID */ private Long ownerUserId; /** 回访时长(分钟) */ private Integer duration; /** 附件 */ private String attachments; /** 备注 */ private String remark; } ``` --- ### 4.2 VisitProblemBo(回访问题业务对象) ```java public class CrmVisitProblemBo extends BaseEntity { /** 主键ID */ @NotNull(message = "主键不能为空", groups = { EditGroup.class }) private Long id; /** 回访ID */ @NotNull(message = "回访ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long visitId; /** 客户ID */ @NotNull(message = "客户ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long customerId; /** 问题类型 */ @NotBlank(message = "问题类型不能为空", groups = { AddGroup.class, EditGroup.class }) private String problemType; /** 问题描述 */ @NotBlank(message = "问题描述不能为空", groups = { AddGroup.class, EditGroup.class }) private String problemDesc; /** 问题图片 */ private String problemImages; /** 严重程度 */ @NotBlank(message = "严重程度不能为空", groups = { AddGroup.class, EditGroup.class }) private String severity; /** 解决方案 */ private String solution; /** 客户反馈 */ private String customerFeedback; /** 客户是否满意 */ private Integer isSatisfied; /** 备注 */ private String remark; } ``` --- ## 5. 数据字典 ### 5.1 回访类型 (crm_visit_type) | 字典值 | 字典标签 | 说明 | |--------|---------|------| | contract | 合同回访 | 合同签订后回访 | | delivery | 交付回访 | 产品交付后回访 | | regular | 定期回访 | 定期客户维护 | | renew | 续约回访 | 合同到期续约 | | complaint | 投诉回访 | 客户投诉处理 | | other | 其他 | 其他类型回访 | --- ### 5.2 回访方式 (crm_visit_method) | 字典值 | 字典标签 | 说明 | |--------|---------|------| | phone | 电话 | 电话回访 | | wechat | 微信 | 微信回访 | | email | 邮件 | 邮件回访 | | visit | 上门拜访 | 现场回访 | | other | 其他 | 其他方式 | --- ### 5.3 满意度 (crm_satisfaction) | 字典值 | 字典标签 | 评分 | |--------|---------|------| | very_satisfied | 非常满意 | 5分 | | satisfied | 满意 | 4分 | | general | 一般 | 3分 | | dissatisfied | 不满意 | 2分 | | very_dissatisfied | 非常不满意 | 1分 | --- ### 5.4 回访状态 (crm_visit_status) | 字典值 | 字典标签 | 说明 | |--------|---------|------| | planned | 已计划 | 计划中 | | visited | 已回访 | 已完成 | | canceled | 已取消 | 已取消 | --- ### 5.5 问题类型 (crm_problem_type) | 字典值 | 字典标签 | 说明 | |--------|---------|------| | product | 产品问题 | 产品功能问题 | | service | 服务问题 | 服务质量问题 | | delivery | 交付问题 | 交付延期等 | | quality | 质量问题 | 产品质量问题 | | price | 价格问题 | 价格相关问题 | | other | 其他 | 其他问题 | --- ### 5.6 严重程度 (crm_severity) | 字典值 | 字典标签 | 说明 | |--------|---------|------| | low | 低 | 影响较小 | | medium | 中 | 一般影响 | | high | 高 | 影响较大 | | urgent | 紧急 | 需立即处理 | --- ### 5.7 问题状态 (crm_problem_status) | 字典值 | 字典标签 | 说明 | |--------|---------|------| | pending | 待处理 | 尚未处理 | | processing | 处理中 | 正在处理 | | solved | 已解决 | 已经解决 | | closed | 已关闭 | 已关闭 | --- ## 6. 权限标识汇总 | 权限标识 | 说明 | |---------|------| | crm:visit:list | 回访记录列表查询 | | crm:visit:query | 回访记录详情查询 | | crm:visit:add | 回访记录新增 | | crm:visit:edit | 回访记录修改 | | crm:visit:remove | 回访记录删除 | | crm:visit:export | 回访记录导出 | | crm:visit:problem:solve | 回访问题处理 | --- ## 7. 注意事项 1. **回访编号唯一性**: 同一租户下回访编号必须唯一 2. **满意度评分**: 评分范围1-5分,与满意度字段对应 3. **问题跟踪**: 记录问题的完整处理过程,方便后续分析 4. **商机发现**: 回访中发现的商机要及时跟进转化 5. **回访计划**: 定期生成回访计划,确保客户维护 6. **提醒机制**: 定时任务提醒即将到期的回访计划 7. **满意度分析**: 定期分析客户满意度,改进服务质量 8. **问题统计**: 统计常见问题类型,优化产品和服务 9. **数据权限**: 需要根据负责人字段实现数据权限控制 10. **关联关系**: 回访关联客户、合同,形成完整的客户服务链条 --- **文档结束**