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

参数:

{
    "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": "备注 (可选)"
}

返回:

{
    "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 文件中直接调用:

# 获取进货折扣
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. 克隆模块

cd ~/repos
git clone git@git.opencomputing.cn:yumoqing/supplychain.git

2. 构建模块

cd ~/repos/supplychain
chmod +x build.sh
./build.sh

3. 生成 DDL 并创建数据库表

cd ~/repos/supplychain/models
mysql -h <host> -u <user> -p <dbname> < mysql.ddl.sql

4. 集成到 Sage

a. 修改 app/sage.py:

from supplychain.init import load_supplychain
# 在 init() 函数中添加:
load_supplychain()

b. 修改 build.sh (Sage 根目录):

for m in ... supplychain

5. 注册 RBAC 权限

模块提供 scripts/load_path.py 权限管理脚本,自动注册所有路径:

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

cd ~/repos/sage
./stop.sh && ./start.sh

产品模块引用

本模块的 productidprodtypeid 字段引用 product 模块的 productsproduct_types 表。 已在以下模型的 codes 段添加引用配置:

  • models/supply_contract_items.json
  • models/distribution_agreement_items.json
  • models/supplychain_accounting.json
Description
No description provided
Readme 419 KiB
Languages
Python 97%
Shell 3%