docs: 恢复README.md完整内容, 更新集成步骤引用scripts/load_path.py

This commit is contained in:
yumoqing 2026-05-25 15:39:10 +08:00
parent 092d74133e
commit 55b84f5fe8

236
README.md
View File

@ -1,2 +1,236 @@
# supplychain
# supplychain — 供应商和分销商管理模块
## 概述
supplychain 模块为 Sage 平台提供供应商和分销商的全链路管理功能,包括:
- **供应商管理**:添加和管理供应商基本信息、联系方式、财务信息
- **供销合同管理**:运营人员创建与供应商的供销合同,设置合同有效期和产品折扣
- **二级分销商管理**:销售人员添加和管理二级分销商
- **分销协议管理**:销售人员与二级分销商签署分销协议,设置产品分销折扣
- **供销记账**:产品销售时自动计算供销关系的记账金额(进货金额、分销金额、利润)
## 目录结构
```
supplychain/
├── supplychain/ # Python 包
│ ├── __init__.py
│ └── init.py # 模块初始化 + ServerEnv 注册
├── wwwroot/ # 前端文件
│ ├── index.ui # 模块入口页
│ ├── menu.ui # 导航菜单
│ ├── suppliers.ui # 供应商管理页
│ ├── supply_contracts.ui # 供销合同页
│ ├── sub_distributors.ui # 二级分销商页
│ ├── distribution_agreements.ui # 分销协议页
│ ├── accounting.ui # 供销记账页
│ └── api/ # API 端点
│ ├── *_create.dspy
│ ├── *_update.dspy
│ ├── *_delete.dspy
│ ├── calculate_accounting.dspy # 记账计算 API
│ ├── query_supply_discount.dspy # 查询进货折扣
│ └── query_dist_discount.dspy # 查询分销折扣
├── models/ # 数据库表定义
│ ├── suppliers.json
│ ├── supply_contracts.json
│ ├── supply_contract_items.json
│ ├── sub_distributors.json
│ ├── distribution_agreements.json
│ ├── distribution_agreement_items.json
│ └── supplychain_accounting.json
├── json/ # CRUD 配置
│ ├── suppliers_list.json
│ ├── supply_contracts_list.json
│ ├── supply_contract_items_list.json
│ ├── sub_distributors_list.json
│ ├── distribution_agreements_list.json
│ ├── distribution_agreement_items_list.json
│ └── supplychain_accounting_list.json
├── init/
│ └── data.json # 初始化数据(可选)
├── scripts/
│ └── load_path.py # RBAC 权限管理脚本
├── pyproject.toml
├── build.sh
└── README.md
```
## 数据库表
| 表名 | 说明 | 类别 |
|------|------|------|
| suppliers | 供应商表 | entity |
| supply_contracts | 供销合同表 | entity |
| supply_contract_items | 供销合同产品折扣明细 | relation |
| sub_distributors | 二级分销商表 | entity |
| distribution_agreements | 分销协议表 | entity |
| distribution_agreement_items | 分销协议产品折扣明细 | relation |
| supplychain_accounting | 供销记账表 | relation |
## 角色权限
| 角色 | 权限范围 |
|------|----------|
| 运营 (operator) | 供应商管理、供销合同管理(含产品折扣) |
| 销售 (sale) | 二级分销商管理、分销协议管理(含产品折扣) |
| 所有登录用户 | 供销记账查看 |
## 折扣计算规则
### 进货折扣(供应商 → 分销商)
查找优先级:
1. 供销合同 → 产品明细(精确匹配 productid
2. 供销合同 → 产品明细(匹配 prodtypeid
3. 供销合同 → 默认折扣default_discount
### 分销折扣(分销商 → 二级分销商)
查找优先级:
1. 分销协议 → 产品明细(精确匹配 productid
2. 分销协议 → 产品明细(匹配 prodtypeid
3. 分销协议 → 默认折扣default_discount
### 记账金额计算
```
销售总额 = 单价 × 数量
进货金额 = 销售总额 × 进货折扣 (或 结算单价 × 数量)
分销金额 = 销售总额 × 分销折扣 (或 结算单价 × 数量)
利润金额 = 分销金额 - 进货金额
```
## API 接口
### 记账计算 API
**端点**: `/supplychain/api/calculate_accounting.dspy`
**请求方法**: POST
**参数**:
```json
{
"productid": "产品ID",
"prodtypeid": "产品分类ID (可选)",
"quantity": 10,
"unit_price": 100.00,
"sub_distributor_id": "二级分销商ID (可选)",
"sale_date": "2026-05-25 (可选, 默认今天)",
"source_type": "2 (来源类型: 1=手动, 2=API)",
"source_id": "来源记录ID (可选)",
"remark": "备注 (可选)"
}
```
**返回**:
```json
{
"status": "ok",
"data": {...},
"summary": {
"total_amount": 1000.00,
"supply_amount": 700.00,
"dist_amount": 900.00,
"profit_amount": 200.00,
"supply_discount": 0.7,
"dist_discount": 0.9
}
}
```
### 折扣查询 API
**进货折扣查询**: `/supplychain/api/query_supply_discount.dspy`
- 参数: `productid`, `prodtypeid` (可选)
**分销折扣查询**: `/supplychain/api/query_dist_discount.dspy`
- 参数: `sub_distributor_id`, `productid`, `prodtypeid` (可选)
## Python 模块函数
通过 `ServerEnv` 注册后可在 .dspy 文件中直接调用:
```python
# 获取进货折扣
supply_info = await get_active_supply_discount(sor, resellerid, productid, prodtypeid, sale_date)
# 获取分销折扣
dist_info = await get_active_dist_discount(sor, resellerid, sub_distributor_id, productid, prodtypeid, sale_date)
# 计算并创建记账记录
record = await calculate_sale_accounting(sor, resellerid, productid, quantity, unit_price,
sub_distributor_id, prodtypeid, sale_date, source_type, source_id, created_by, remark)
```
## 安装步骤
### 1. 克隆模块
```bash
cd ~/repos
git clone git@git.opencomputing.cn:yumoqing/supplychain.git
```
### 2. 构建模块
```bash
cd ~/repos/supplychain
chmod +x build.sh
./build.sh
```
### 3. 生成 DDL 并创建数据库表
```bash
cd ~/repos/supplychain/models
mysql -h <host> -u <user> -p <dbname> < mysql.ddl.sql
```
### 4. 集成到 Sage
**a. 修改 `app/sage.py`**:
```python
from supplychain.init import load_supplychain
# 在 init() 函数中添加:
load_supplychain()
```
**b. 修改 `build.sh`** (Sage 根目录):
```bash
for m in ... supplychain
```
### 5. 注册 RBAC 权限
模块提供 `scripts/load_path.py` 权限管理脚本,自动注册所有路径:
```bash
cd ~/repos/sage
./py3/bin/python ~/repos/supplychain/scripts/load_path.py
```
脚本按角色分类注册:
- `any`: 静态资源/CRUD 别名目录
- `logined`: 所有页面和 API
- `reseller.operator`: 供应商、供销合同管理
- `reseller.sale`: 二级分销商、分销协议管理
**维护规则**: 每次代码变更如有新 path 出现,需同步更新 `scripts/load_path.py` 中的路径列表。
### 6. 重启 Sage
```bash
cd ~/repos/sage
./stop.sh && ./start.sh
```
## 产品模块引用
本模块的 `productid``prodtypeid` 字段引用 product 模块的 `products``product_types` 表。
已在以下模型的 `codes` 段添加引用配置:
- `models/supply_contract_items.json`
- `models/distribution_agreement_items.json`
- `models/supplychain_accounting.json`