日期: 2026-07-05 状态: 草稿 范围: 管理端后台(cfc-web) + 后端(cfc-backend)
在管理后台建立供应商销售体系。每个供应商可创建或加入多个供应商体系(虚拟部门),每个体系独立配置账期和平台留利比例,体系内所有商品给平台的留利空间一致。体系管理员负责商品供应、定价、折扣和发货管理,并可指定货款打给哪个具体供应商。
| 角色 | 说明 |
|---|---|
| 体系管理员 | 创建和管理供应商体系,管理商品/定价/折扣,指定货款收款方 |
| 体系成员 | 加入体系的供应商,可被指定为收款方 |
| 平台运营 | 查看所有体系数据,进行结算管理 |
supply_system — 供应商体系CREATE TABLE `supply_system` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL COMMENT '体系名称',
`admin_id` bigint NOT NULL COMMENT '管理员用户ID',
`settlement_period_days` int NOT NULL DEFAULT 30 COMMENT '账期(天)',
`platform_profit_rate` decimal(5,2) NOT NULL DEFAULT 0 COMMENT '平台留利比例(%)',
`description` varchar(500) DEFAULT NULL COMMENT '描述',
`status` varchar(20) NOT NULL DEFAULT 'active' COMMENT '状态: active/disabled',
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商体系';
supply_system_member — 体系成员CREATE TABLE `supply_system_member` (
`id` bigint NOT NULL AUTO_INCREMENT,
`system_id` bigint NOT NULL COMMENT '体系ID',
`user_id` bigint NOT NULL COMMENT '用户ID',
`role` varchar(20) NOT NULL DEFAULT 'member' COMMENT '角色: admin/member',
`status` varchar(20) NOT NULL DEFAULT 'active' COMMENT '状态: active/inactive',
`joined_at` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_system_user` (`system_id`, `user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='体系成员';
supply_settlement — 结算记录CREATE TABLE `supply_settlement` (
`id` bigint NOT NULL AUTO_INCREMENT,
`system_id` bigint NOT NULL COMMENT '体系ID',
`period_start` date NOT NULL COMMENT '结算周期开始',
`period_end` date NOT NULL COMMENT '结算周期结束',
`total_sales` int NOT NULL DEFAULT 0 COMMENT '销售总额(分)',
`platform_profit` int NOT NULL DEFAULT 0 COMMENT '平台留利金额(分)',
`supplier_payout` int NOT NULL DEFAULT 0 COMMENT '供应商实付(分)',
`status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/settled',
`settled_at` datetime DEFAULT NULL COMMENT '结算时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`created_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_system_id` (`system_id`),
KEY `idx_period` (`period_start`, `period_end`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='结算记录';
supply_settlement_detail — 结算明细CREATE TABLE `supply_settlement_detail` (
`id` bigint NOT NULL AUTO_INCREMENT,
`settlement_id` bigint NOT NULL COMMENT '结算ID',
`order_id` bigint NOT NULL COMMENT '订单ID',
`order_no` varchar(64) NOT NULL COMMENT '订单号',
`product_name` varchar(200) NOT NULL COMMENT '商品名称',
`amount` int NOT NULL COMMENT '订单金额(分)',
`platform_fee` int NOT NULL COMMENT '平台留利(分)',
`supplier_id` bigint DEFAULT NULL COMMENT '收款供应商用户ID',
`supplier_name` varchar(100) DEFAULT NULL COMMENT '收款供应商名称',
`payout` int NOT NULL COMMENT '供应商实付(分)',
`created_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_settlement_id` (`settlement_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='结算明细';
products 表(已存在)现有字段可直接使用:
| 字段 | 类型 | 说明 | 状态 |
|---|---|---|---|
distribution_system_id |
bigint | 所属供应商体系ID | ✅ 已有 |
profit_rate |
int | 平台利润率(千分比) | ✅ 已有 |
vendor_id |
bigint | 供应商用户ID | ✅ 已有 |
vendor_name |
varchar | 供应商名称 | ✅ 已有 |
说明:创建/编辑商品时,选择所属供应商体系后,profit_rate 自动填充为该体系的 platform_profit_rate(转换为千分比)。
product_orders 表 — 新增字段| 字段 | 类型 | 说明 |
|---|---|---|
supply_system_id |
bigint | 所属供应商体系ID(冗余,方便查询) |
supplier_user_id |
bigint | 该笔订单指定的收款供应商用户ID |
| 文件 | 说明 |
|---|---|
entity/SupplySystem.java |
供应商体系实体 |
entity/SupplySystemMember.java |
体系成员实体 |
entity/SupplySettlement.java |
结算记录实体 |
entity/SupplySettlementDetail.java |
结算明细实体 |
mapper/SupplySystemMapper.java |
|
mapper/SupplySystemMemberMapper.java |
|
mapper/SupplySettlementMapper.java |
|
mapper/SupplySettlementDetailMapper.java |
|
service/SupplySystemService.java |
体系 + 成员管理业务逻辑 |
service/SupplySettlementService.java |
结算业务逻辑 |
controller/admin/SupplySystemController.java |
体系/成员 CRUD API |
controller/admin/SupplySettlementController.java |
结算 API |
体系管理 (SupplySystemController, 路由前缀 /api/admin/supply-system)
| 端点 | 方法 | 说明 |
|---|---|---|
/list |
POST | 体系列表(分页+搜索) |
/create |
POST | 创建体系 |
/update |
POST | 编辑体系 |
/detail |
POST | 体系详情 |
/toggle-status |
POST | 启用/禁用体系 |
成员管理(同上 Controller)
| 端点 | 方法 | 说明 |
|---|---|---|
/member/list |
POST | 体系成员列表 |
/member/add |
POST | 添加成员 |
/member/remove |
POST | 移除成员 |
/member/change-role |
POST | 变更角色 |
结算管理 (SupplySettlementController, 路由前缀 /api/admin/supply-settlement)
| 端点 | 方法 | 说明 |
|---|---|---|
/list |
POST | 结算记录列表 |
/detail |
POST | 结算明细 |
/create |
POST | 手动生成结算单 |
/confirm |
POST | 确认结算 |
商品关联(在现有 ProductEdit 流程中)
| 端点 | 方法 | 说明 |
|---|---|---|
/api/admin/product/list-by-system |
POST | 查询某体系的商品列表 |
在现有 ProductEdit.vue 中添加「所属供应商体系」下拉框:
distribution_system_id 写入 Productprofit_rate = 体系 platform_profit_rate × 10(转为千分比)profit_rate 跟随体系配置,不可单独修改(规则约束)src/views/admin/supply-system/
├── List.vue — 供应商体系列表
├── Detail.vue — 体系详情(Tab: 商品/成员/订单/结算)
└── Form.vue — 新建/编辑体系
使用 el-tabs 分 Tab:
| Tab | 内容 |
|---|---|
| 商品 | 关联的商品列表,可跳转商品编辑 |
| 成员 | 成员表格(用户名/角色/加入时间),可添加/移除/改角色 |
| 订单 | 该体系下的订单列表,支持指定收款供应商 |
| 结算 | 结算记录列表,可生成/查看结算单 |
| 字段 | 组件 | 说明 |
|---|---|---|
| 体系名称 | el-input | 必填 |
| 管理员 | el-select (搜索用户) | 必填 |
| 账期(天) | el-input-number | 30/60/90 |
| 平台留利(%) | el-input-number | 0-100,小数点后2位 |
| 描述 | el-textarea | 选填 |
| 状态 | el-switch | active/disabled |
在基本信息区域增加「所属供应商体系」选择器:
profit_rate(只读显示)供应商管理
├── 供应商体系(新增,路径 /supply-system)
└── ... 现有菜单
流程:
product_orders.supplier_user_id 更新总销售额 → 平台留利 → 供应商实付supply_settlement + 对应的 supply_settlement_detail 记录settled计算公式:
platform_profit = total_sales × platform_profit_rate / 100
supplier_payout = total_sales - platform_profit
| 现有系统 | 集成方式 |
|---|---|
| Product | 加 system_id 关联,profit_rate 自动填充 |
| ProductOrder | 加 system_id + supplier_user_id |
| User | 直接使用,admin_id 和 member user_id 都引用 User |
| 商品管理 | ProductEdit.vue 增加「所属体系」字段 |
| 订单管理 | OrderManage.vue 增加「体系列」筛选和「指定收款方」操作 |
| 权限系统 | supply:* 权限码,admin 角色可见 |
-- 1. supply_system
CREATE TABLE IF NOT EXISTS `supply_system` (...);
-- 2. supply_system_member
CREATE TABLE IF NOT EXISTS `supply_system_member` (...);
-- 3. supply_settlement
CREATE TABLE IF NOT EXISTS `supply_settlement` (...);
-- 4. supply_settlement_detail
CREATE TABLE IF NOT EXISTS `supply_settlement_detail` (...);
-- 5. product_orders 新增字段
ALTER TABLE `product_orders`
ADD COLUMN `supply_system_id` bigint DEFAULT NULL COMMENT '所属供应商体系ID' AFTER `coupon_id`,
ADD COLUMN `supplier_user_id` bigint DEFAULT NULL COMMENT '收款供应商用户ID' AFTER `supply_system_id`,
ADD KEY `idx_supply_system_id` (`supply_system_id`);