实施日期: 2026-10-05
功能名称: 供应商团队客户归属系统
供应商作为后台提供服务的加盟商(规划师、商品提供商等),需要:
关键约束:平台只负责展示归属关系,不负责团队分佣。
supply_customer_relation(迁移344)文件位置:
cfc-backend/src/main/resources/schema.sql (末尾)cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java (第11510-11530行)表结构:
CREATE TABLE IF NOT EXISTS supply_customer_relation (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
system_id BIGINT NOT NULL COMMENT '供应商体系ID',
parent_user_id BIGINT NOT NULL COMMENT '上级供应商用户ID',
family_id BIGINT NOT NULL COMMENT '客户家庭ID',
child_user_id BIGINT DEFAULT NULL COMMENT '下单用户ID',
relation_type VARCHAR(32) NOT NULL DEFAULT 'family' COMMENT '归属类型: family/order',
source VARCHAR(32) NOT NULL DEFAULT 'manual' COMMENT '来源: manual/order/referral',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_system_family (system_id, family_id),
INDEX idx_parent_user (parent_user_id),
INDEX idx_family_id (family_id),
UNIQUE KEY uk_system_family (system_id, family_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
设计说明:
system_id + family_id 唯一键:防止重复记录parent_user_id:上级供应商用户ID,支持查询"某上级下的所有客户"source 字段区分来源:manual(人工绑定)/order(下单自动)/referral(推荐码)relation_type:family(家庭归属)/order(订单关联)| 文件 | 位置 | 说明 |
|---|---|---|
SupplyCustomerRelation.java |
entity/ |
实体类 |
SupplyCustomerRelationMapper.java |
mapper/ |
Mapper接口,含自定义查询方法 |
SupplyCustomerRelationService.java |
service/ |
业务逻辑:绑定、查询、统计 |
SupplyTeamController.java |
controller/admin/ |
RESTful API端点 |
SupplyCustomerRelationService.java:
listCustomers(systemId, parentId, page, size): 分页查询上级供应商下的客户列表bindCustomer(systemId, parentId, familyId, childUserId, source): 人工绑定客户归属autoBindOnOrder(systemId, parentId, familyId, childUserId): 订单完成时自动绑定listTeamMembers(systemId): 查询团队成员列表(含客户数量统计)getRelationByFamily(systemId, familyId): 查询某个家庭的归属关系ProductOrderService.java (第778-782行):
// 原有逻辑
supplyHierarchyService.addRelation(order.getSupplySystemId(), buyer.getReferrerId(), order.getBuyerId());
// 新增逻辑
supplyCustomerRelationService.autoBindOnOrder(order.getSupplySystemId(), buyer.getReferrerId(), order.getFamilyId(), order.getBuyerId());
说明: 订单完成时,同时记录上下级关系和供应商团队客户归属关系。
| 接口 | 说明 |
|---|---|
POST /api/admin/supply-team/customers |
查询上级供应商下的客户列表 |
POST /api/admin/supply-team/bind-customer |
人工绑定客户归属 |
POST /api/admin/supply-team/members |
查询团队成员列表(含客户数量统计) |
POST /api/admin/supply-team/relation |
查询某个家庭的归属关系 |
文件位置: cfc-frontend/pages/vendor/team-customers/team-customers.vue
页面功能:
页面注册: cfc-frontend/pages.json
{
"path": "team-customers/team-customers",
"style": { "navigationBarTitleText": "团队客户" }
}
文件: cfc-frontend/utils/api.js
export const getTeamCustomers = (params) => {
return request('/api/admin/supply-team/customers', 'POST', params)
}
用户下单购买供应商商品
↓
ProductOrderService.orderComplete()
↓
┌──────┴──────┐
↓ ↓
supplyHierarchyService.addRelation() ← 绑定上下级关系(已有)
↓
supplyCustomerRelationService.autoBindOnOrder() ← 新增:记录客户归属
↓
写入 supply_customer_relation 表
↓
上级供应商通过 /api/admin/supply-team/customers 查询团队客户列表
↓
前端展示在「团队客户」页面
需求: 团队成员之间可以进行服务转介
建议实现:
supply_referral_record:
id, system_id, from_user_id, to_user_id, family_id, service_type, status, created_atPOST /api/admin/supply-team/referral/apply需求: 服务商通过推荐码绑定客户,自动关联供应商团队
建议实现:
CommissionService.bindReferrerByUserId() 中,检查推荐人是否属于某个供应商体系supply_customer_relation 表POST /api/admin/supply-team/bind-by-referral需求: 服务商可以从「服务商中心」跳转到「团队客户」页面
建议实现:
pages/vendor/center/center.vue# 启动后端,查看日志确认迁移执行
mvn spring-boot:run
# 检查日志输出
# 应该看到: "迁移344: 已创建 supply_customer_relation 表"
# 测试绑定客户归属
curl -X POST http://localhost:9082/api/admin/supply-team/bind-customer \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {token}" \
-d '{"systemId": 1, "parentId": 100, "familyId": 500, "childUserId": 200, "source": "manual"}'
# 测试查询客户列表
curl -X POST http://localhost:9082/api/admin/supply-team/customers \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {token}" \
-d '{"systemId": 1, "parentId": 100, "page": 1, "size": 20}'
role=teacher 或 vendor_type=product_supplier)supply_customer_relation 表使用 UNIQUE KEY uk_system_family (system_id, family_id)bindCustomer() 先检查是否已存在,存在则更新,不存在则插入loadCustomers() 支持分页加载,避免重复请求JwtInterceptor 中验证 Token@RequestAttribute("role")idx_system_family、idx_parent_user、idx_family_idpage + size 参数,避免全表扫描supply_referral_record 表及相关 APICommissionService 中自动绑定供应商团队归属cfc-backend/src/main/java/com/etotem/cfc/entity/SupplyCustomerRelation.javacfc-backend/src/main/java/com/etotem/cfc/mapper/SupplyCustomerRelationMapper.javacfc-backend/src/main/java/com/etotem/cfc/service/SupplyCustomerRelationService.javacfc-backend/src/main/java/com/etotem/cfc/controller/admin/SupplyTeamController.javacfc-frontend/pages/vendor/team-customers/team-customers.vuecfc-backend/src/main/resources/schema.sql (添加 supply_customer_relation 表定义)cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java (添加迁移344)cfc-backend/src/main/java/com/etotem/cfc/service/ProductOrderService.java (添加自动绑定逻辑)cfc-frontend/utils/api.js (添加 getTeamCustomers API 封装)cfc-frontend/pages.json (注册 team-customers 页面)实施状态: ✅ 核心功能已完成
验证状态: ⏳ 待编译验证
前端联调: ⏳ 待后端 API 稳定后联调