refactor: 删除pipeline_dist分销管理模块——功能与supplychain重复(分销商/分销协议/分销折扣统一由supplychain承载)

- build.sh四处清单(mv/pip install/xls2ui/软链)删pipeline_dist
- app/pipeline_app.py删import+load_pipeline_dist()
- conf/config.json删module_dbname条目; conf/rp.json删/pipeline_dist两条
- bin/init_perms.py删分销管理访问权限; scripts/load_path.py删3条RBAC路径
- scripts/merge_i18n.py删MODULES条目; wwwroot/index.ui删分销管理菜单项
- deploy/smoke/cases.json删s09营销产线壳用例
- i18n源+产物删5词条(分销商产线配置/分销商管理/分销管理/2条描述语)
- wwwroot/pipeline_dist软链删除(git跟踪)
- deploy/migrations/m0020登记DROP两表+清码表+清权限(破坏性,dmig拒绝自动执行,人工复核手工跑;测试机两表0行)
- supplychain的sub_distributor*权限/表不受影响(path前缀与表名均不同)
This commit is contained in:
yumoqing 2026-09-10 11:59:45 +08:00
parent 68d0855928
commit d6278364da
24 changed files with 24 additions and 100 deletions

View File

@ -33,15 +33,8 @@
**API 端点**pricing/capacity/usage_log 的 CRUD + get_search_pipeline_id下拉数据源
### pipeline_dist — 分销管理
分销商管理和独立定价。
| 表 | 说明 |
|----|------|
| `distributors` | 分销商表名称、API 密钥、状态、配额) |
| `distributor_pipeline` | 分销商-产线关联(独立定价、启用状态) |
**API 端点**distributors/distributor_pipeline 的 CRUD + generate_keyAPI 密钥生成)
> 注:原 pipeline_dist分销管理模块已于 2026-09-10 删除,其功能(分销商/分销协议/分销折扣)
> 与 supplychain 模块重复,统一由 supplychain 承载(二级分销商/分销协议/分销折扣→渠道价)。
## 目录结构
@ -60,7 +53,6 @@ pipeline-app/
│ ├── scripts/load_path.py # RBAC 注册
│ └── pyproject.toml
├── pipeline_ops/ # 运营模块(同上结构)
├── pipeline_dist/ # 分销模块(同上结构)
├── build.sh # 构建脚本venv + 依赖 + DDL + CRUD
├── start.sh / stop.sh # 启停脚本
└── README.md
@ -88,7 +80,6 @@ build.sh 会:创建 py3 venv → 安装依赖 → json2ddl 生成 DDL → xls2
# 每个模块分别生成并执行 DDL
cd pipeline_core && ../py3/bin/json2ddl mysql models/ > mysql.ddl.sql
cd pipeline_ops && ../py3/bin/json2ddl mysql models/ > mysql.ddl.sql
cd pipeline_dist && ../py3/bin/json2ddl mysql models/ > mysql.ddl.sql
# 在 MySQL 中执行所有 DDL
```
@ -99,7 +90,6 @@ export SAGE_RBAC_DB=sage
# 运行各模块的 load_path.py
cd pipeline_core && ../py3/bin/python scripts/load_path.py
cd pipeline_ops && ../py3/bin/python scripts/load_path.py
cd pipeline_dist && ../py3/bin/python scripts/load_path.py
```
### 6. 启动
@ -115,11 +105,10 @@ bash stop.sh # 停止服务
- **sqlor API**:严格使用 `sor.C/U/D/R` 模式,`sor.U()` 只接受 2 个参数id 在 data 字典中)
- **dspy 规范**:零 import、零 print、零 uuid使用预加载全局函数
- **独立部署**:与 Sage 解耦,通过 HTTP API 对外提供服务
- **分销密钥**`distributor_generate_key.dspy` 生成随机 API 密钥供分销商调用
## 文件统计
- 数据表:8 张core 3 + ops 3 + dist 2
- API 端点29 个 dspy 文件
- CRUD 管理:8 个(自动生成)
- 数据表:6 张core 3 + ops 3
- API 端点23 个 dspy 文件
- CRUD 管理:6 个(自动生成)
- 总文件数:~80 个

View File

@ -22,7 +22,6 @@ def init():
from appbase.init import load_appbase
from pipeline_core.init import load_pipeline_core
from pipeline_ops.init import load_pipeline_ops
from pipeline_dist.init import load_pipeline_dist
try:
from pipeline_service.init import load_pipeline_service
except ImportError:
@ -140,7 +139,6 @@ def init():
load_rbac()
load_pipeline_core()
load_pipeline_ops()
load_pipeline_dist()
load_dingdingflow() # 先于 pipeline_service其钉钉审批适配器依赖 register_biz_handler
# 商品化链路pricing 必须先于资源模块(资源计费要调 pricing_program_charging
load_pricing()

View File

@ -18,7 +18,6 @@ PERMS = [
('/pipeline_core/', '产线管理访问', 'pipeline_core', 'logined'),
('/pipeline-sdlc/', '开发产线访问', 'pipeline_sdlc', 'logined'),
('/pipeline_ops/', '运营管理访问', 'pipeline_ops', 'logined'),
('/pipeline_dist/', '分销管理访问', 'pipeline_dist', 'logined'),
('/pipeline_task/', '任务中心访问', 'pipeline_task', 'logined'),
('/showcase/', '展示平台访问', 'showcase', 'guest'),
('/', '应用首页', 'app', 'guest'),

View File

@ -46,7 +46,7 @@ echo "bricks: $(readlink "$cdir/wwwroot/bricks")"
# 4. Move local business modules into pkgs/
cd "$cdir"
for mod in pipeline_core pipeline_ops pipeline_dist; do
for mod in pipeline_core pipeline_ops; do
if [ -d "$mod" ]; then
mv "$mod" "pkgs/$mod"
fi
@ -67,7 +67,7 @@ done
# 6. pip install all modules from pkgs/pipeline-service 是普通 install 非 editable部署必 pull+pip install 都做)
# 注意与第 5 步 clone 清单对齐clone 了却不 install 的模块,主程序 try/except 会静默降级——
# 模块整个消失且零报错account_resource 等 4 个此前正是这种状态,测试机靠手工补装)。
for mod in pipeline_core pipeline_ops pipeline_dist pipeline-sdlc showcase pipeline-service pipeline-task tenant app_audit product_management discount pricing unipay smssend accounting uapi rag dingdingflow account_resource storage_resource filemgr supplychain pipeline-bidding pipeline-llm pipeline-platform pipeline-opportunity; do
for mod in pipeline_core pipeline_ops pipeline-sdlc showcase pipeline-service pipeline-task tenant app_audit product_management discount pricing unipay smssend accounting uapi rag dingdingflow account_resource storage_resource filemgr supplychain pipeline-bidding pipeline-llm pipeline-platform pipeline-opportunity; do
if [ -d "pkgs/$mod" ]; then
"$cdir/py3/bin/pip" install "pkgs/$mod/" 2>&1 | tail -1
fi
@ -101,7 +101,7 @@ fi
# ⚠ 清单不能盲目扩成"全模块动态扫描"product_management/dingdingflow 的生成目录
# 是 git 跟踪的(重生成会弄脏工作树),且第 6 步有 xls2ui 覆盖后的手工修补——
# 新模块入列前先确认其生成目录在模块 .gitignore 内。
for mod in appbase pipeline_core pipeline_ops pipeline_dist pipeline-sdlc rbac dapi accounting uapi rag dingdingflow account_resource storage_resource filemgr supplychain pipeline-bidding pricing pipeline-llm pipeline-opportunity discount; do
for mod in appbase pipeline_core pipeline_ops pipeline-sdlc rbac dapi accounting uapi rag dingdingflow account_resource storage_resource filemgr supplychain pipeline-bidding pricing pipeline-llm pipeline-opportunity discount; do
json_dir="pkgs/$mod/json"
if [ -d "$json_dir" ] && ls "$json_dir"/*.json >/dev/null 2>&1; then
cd "$json_dir"
@ -112,7 +112,7 @@ done
# 8. Link module wwwroot directories (symlinks from pkgs/)
for mod in pipeline-sdlc showcase tenant pipeline_core pipeline_ops pipeline_dist appbase app_audit product_management discount pricing unipay rbac dapi accounting uapi rag dingdingflow account_resource storage_resource filemgr supplychain pipeline-bidding pipeline-llm pipeline-platform pipeline-opportunity pipeline-task; do
for mod in pipeline-sdlc showcase tenant pipeline_core pipeline_ops appbase app_audit product_management discount pricing unipay rbac dapi accounting uapi rag dingdingflow account_resource storage_resource filemgr supplychain pipeline-bidding pipeline-llm pipeline-platform pipeline-opportunity pipeline-task; do
src="pkgs/$mod/wwwroot"
dst="wwwroot/$mod"
if [ -d "$src" ]; then

View File

@ -24,7 +24,6 @@
"appbase": "pipeline",
"pipeline_core": "pipeline",
"pipeline_ops": "pipeline",
"pipeline_dist": "pipeline",
"pipeline_sdlc": "pipeline",
"showcase": "pipeline"
},

View File

@ -48,8 +48,6 @@
"/mine.ui",
"/pipeline_ops",
"/pipeline_ops/**",
"/pipeline_dist",
"/pipeline_dist/**",
"/pipeline_task",
"/pipeline_task/**",
"/app_audit",

View File

@ -0,0 +1,14 @@
{
"id": "m0020",
"title": "pipeline_dist模块删除功能与supplychain重复DROP两表+清码表+清RBAC权限。含破坏性语句dmig拒绝自动执行——人工复核后手工跑。测试机已于2026-09-10执行两表0行数据权限行仅pipeline_dist模块自身。⚠supplychain的sub_distributor*权限行不受影响path前缀不同",
"backup_tables": ["distributors", "distributor_pipeline", "appcodes", "appcodes_kv", "permission", "rolepermission"],
"up": [
{"op": "sql", "sql": "DROP TABLE IF EXISTS distributor_pipeline"},
{"op": "sql", "sql": "DROP TABLE IF EXISTS distributors"},
{"op": "sql", "sql": "DELETE FROM appcodes_kv WHERE parentid IN ('distributor_status','markup_type','dp_status')"},
{"op": "sql", "sql": "DELETE FROM appcodes WHERE id IN ('distributor_status','markup_type','dp_status')"},
{"op": "sql", "sql": "DELETE FROM rolepermission WHERE permid IN (SELECT id FROM permission WHERE path LIKE '/pipeline_dist%' OR name LIKE '%pipeline_dist%')"},
{"op": "sql", "sql": "DELETE FROM permission WHERE path LIKE '/pipeline_dist%' OR name LIKE '%pipeline_dist%'"}
],
"down": []
}

View File

@ -84,15 +84,6 @@
"status": 200
}
},
{
"id": "s09",
"name": "营销产线壳",
"url": "/pipeline_dist/index.ui",
"auth": "login",
"expect": {
"status": 200
}
},
{
"id": "s10",
"name": "商机数据参考(爬虫平台连通)",

View File

@ -9,9 +9,6 @@ Submit: Submit
任务中心: Task Center
使用记录: Usage Records
供应量管理: Supply Management
分销商产线配置: Distributor Pipeline Configuration
分销商管理: Distributor Management
分销管理: Distribution Management
发布记录: Release Records
定价管理: Pricing Management
展示平台: Display Platform

View File

@ -9,9 +9,6 @@ Submit: 送信
任务中心: タスクセンター
使用记录: 使用記録
供应量管理: サプライ管理
分销商产线配置: ディストリビューターパイプライン設定
分销商管理: ディストリビューター管理
分销管理: 流通管理
发布记录: リリース記録
定价管理: 価格管理
展示平台: 表示プラットフォーム

View File

@ -9,9 +9,6 @@ Submit: 제출
任务中心: 작업 센터
使用记录: 사용 기록
供应量管理: 공급량 관리
分销商产线配置: 유통업체 파이프라인 설정
分销商管理: 유통업체 관리
分销管理: 유통 관리
发布记录: 릴리스 기록
定价管理: 가격 관리
展示平台: 표시 플랫폼

View File

@ -9,9 +9,6 @@ Submit: Submit
任务中心: 任务中心
使用记录: 使用记录
供应量管理: 供应量管理
分销商产线配置: 分销商产线配置
分销商管理: 分销商管理
分销管理: 分销管理
发布记录: 发布记录
定价管理: 定价管理
展示平台: 展示平台

View File

@ -45,15 +45,12 @@ PERMS = [
("/pipeline_ops/pipeline_pricing/*", "pipeline_ops", "logined"),
("/pipeline_ops/pipeline_capacity/*", "pipeline_ops", "logined"),
("/pipeline_ops/pipeline_usage_log/*", "pipeline_ops", "logined"),
# pipeline_dist
("/pipeline_dist", "pipeline_dist", "logined"),
("/pipeline_dist/*", "pipeline_dist", "logined"),
# showcase
("/showcase", "showcase", "logined"),
("/showcase/*", "showcase", "logined"),
# app root (any):仅登录页资产/全局静态资源。
# 注意:禁止 /** any——会让匿名访问全部路径含五条产线
# 产线 shellsdlc/core/ops/dist index.ui须 logined产线对匿名不可见。
# 产线 shellsdlc/core/ops index.ui须 logined产线对匿名不可见。
("/index.ui", "app", "any"),
("/todo_badge.js", "app", "any"),
("/theme_toggle.js", "app", "any"),
@ -66,7 +63,6 @@ PERMS = [
("/pipeline-sdlc/index.ui", "pipeline_sdlc", "logined"),
("/pipeline_core/index.ui", "pipeline_core", "logined"),
("/pipeline_ops/index.ui", "pipeline_ops", "logined"),
("/pipeline_dist/index.ui", "pipeline_dist", "logined"),
# dapi 客户自助 API Key 套件apikey_manage.ui 数据按 orgid+userid 自过滤;
# downapps/get_apikey/apply_apikey 已挂 customer.*,此处补齐页面+操作端点,
# 口径 logined 与既有 create_apikey.dspy/copy_apikey.dspy 一致)

View File

@ -19,7 +19,6 @@ MODULES = [
('app', os.path.join(ROOT_DIR, 'i18n')),
('pipeline_core', os.path.join(ROOT_DIR, 'pipeline_core', 'i18n')),
('pipeline_ops', os.path.join(ROOT_DIR, 'pipeline_ops', 'i18n')),
('pipeline_dist', os.path.join(ROOT_DIR, 'pipeline_dist', 'i18n')),
('pipeline-sdlc', os.path.join(os.path.dirname(ROOT_DIR), 'pipeline-sdlc', 'i18n')),
('showcase', os.path.join(os.path.dirname(ROOT_DIR), 'showcase', 'i18n')),
('pipeline-bidding', os.path.join(ROOT_DIR, 'pkgs', 'pipeline-bidding', 'i18n')),

View File

@ -63,9 +63,6 @@
"分类名称不能为空": "Category name cannot be empty",
"分销协议": "Distribution Agreement",
"分销协议管理": "Distribution Agreement Management",
"分销商产线配置": "Distributor Pipeline Configuration",
"分销商管理": "Distributor Management",
"分销管理": "Distribution Management",
"创建人": "Created By",
"创建时间": "Created At",
"副标题": "Subtitle",
@ -158,9 +155,7 @@
"签退": "Sign Out",
"管理": "Management",
"管理产品分类、案例行业、新闻栏目": "Manage product categories, case industries, news columns",
"管理产线定义、运营配置、分销渠道与任务执行": "Manage pipeline definitions, operations configuration, distribution channels, and task execution",
"管理产线定价、供应量与使用记录": "Manage pipeline pricing, supply, and usage records",
"管理分销商与产线配置": "Manage distributors and pipeline configuration",
"管理后台": "Admin Panel",
"管理官网内容、分类、商机线索和站点配置": "Manage website content, categories, business leads, and site configuration",
"系统日志": "System Logs",

View File

@ -62,9 +62,6 @@ token消耗量Top5: Top 5 Token Consumption
分类名称不能为空: Category name cannot be empty
分销协议: Distribution Agreement
分销协议管理: Distribution Agreement Management
分销商产线配置: Distributor Pipeline Configuration
分销商管理: Distributor Management
分销管理: Distribution Management
创建人: Created By
创建时间: Created At
副标题: Subtitle
@ -157,9 +154,7 @@ token消耗量Top5: Top 5 Token Consumption
签退: Sign Out
管理: Management
管理产品分类、案例行业、新闻栏目: Manage product categories, case industries, news columns
管理产线定义、运营配置、分销渠道与任务执行: Manage pipeline definitions, operations configuration, distribution channels, and task execution
管理产线定价、供应量与使用记录: Manage pipeline pricing, supply, and usage records
管理分销商与产线配置: Manage distributors and pipeline configuration
管理后台: Admin Panel
管理官网内容、分类、商机线索和站点配置: Manage website content, categories, business leads, and site configuration
系统日志: System Logs

View File

@ -63,9 +63,6 @@
"分类名称不能为空": "カテゴリ名は必須です",
"分销协议": "販売代理契約",
"分销协议管理": "販売代理契約管理",
"分销商产线配置": "販売代理店の生産ライン設定",
"分销商管理": "販売代理店管理",
"分销管理": "販売代理管理",
"创建人": "作成者",
"创建时间": "作成日時",
"副标题": "サブタイトル",
@ -158,9 +155,7 @@
"签退": "ログアウト",
"管理": "管理",
"管理产品分类、案例行业、新闻栏目": "プロダクトカテゴリ、事例業界、ニュースセクションの管理",
"管理产线定义、运营配置、分销渠道与任务执行": "生産ライン定義、運用設定、販売チャネル、タスク実行の管理",
"管理产线定价、供应量与使用记录": "生産ライン価格設定、供給量、利用記録の管理",
"管理分销商与产线配置": "販売代理店と生産ライン設定の管理",
"管理后台": "管理画面",
"管理官网内容、分类、商机线索和站点配置": "公式サイトコンテンツ、カテゴリ、商談リード、サイト設定の管理",
"系统日志": "システムログ",

View File

@ -62,9 +62,6 @@ token消耗量Top5: Token消費量Top5
分类名称不能为空: カテゴリ名は必須です
分销协议: 販売代理契約
分销协议管理: 販売代理契約管理
分销商产线配置: 販売代理店の生産ライン設定
分销商管理: 販売代理店管理
分销管理: 販売代理管理
创建人: 作成者
创建时间: 作成日時
副标题: サブタイトル
@ -157,9 +154,7 @@ token消耗量Top5: Token消費量Top5
签退: ログアウト
管理: 管理
管理产品分类、案例行业、新闻栏目: プロダクトカテゴリ、事例業界、ニュースセクションの管理
管理产线定义、运营配置、分销渠道与任务执行: 生産ライン定義、運用設定、販売チャネル、タスク実行の管理
管理产线定价、供应量与使用记录: 生産ライン価格設定、供給量、利用記録の管理
管理分销商与产线配置: 販売代理店と生産ライン設定の管理
管理后台: 管理画面
管理官网内容、分类、商机线索和站点配置: 公式サイトコンテンツ、カテゴリ、商談リード、サイト設定の管理
系统日志: システムログ

View File

@ -63,9 +63,6 @@
"分类名称不能为空": "분류 이름은 비워둘 수 없습니다",
"分销协议": "유통 계약",
"分销协议管理": "유통 계약 관리",
"分销商产线配置": "유통업체 생산라인 설정",
"分销商管理": "유통업체 관리",
"分销管理": "유통 관리",
"创建人": "생성자",
"创建时间": "생성 시간",
"副标题": "부제목",
@ -158,9 +155,7 @@
"签退": "로그오프",
"管理": "관리",
"管理产品分类、案例行业、新闻栏目": "제품 분류, 사례 업종, 뉴스 섹션 관리",
"管理产线定义、运营配置、分销渠道与任务执行": "생산라인 정의, 운영 설정, 유통 채널 및 작업 실행 관리",
"管理产线定价、供应量与使用记录": "생산라인 가격, 공급량 및 사용 기록 관리",
"管理分销商与产线配置": "유통업체 및 생산라인 설정 관리",
"管理后台": "관리 백엔드",
"管理官网内容、分类、商机线索和站点配置": "공식 웹사이트 콘텐츠, 분류, 영업 리드 및 사이트 설정 관리",
"系统日志": "시스템 로그",

View File

@ -62,9 +62,6 @@ token消耗量Top5: Token 소모량 Top5
分类名称不能为空: 분류 이름은 비워둘 수 없습니다
分销协议: 유통 계약
分销协议管理: 유통 계약 관리
分销商产线配置: 유통업체 생산라인 설정
分销商管理: 유통업체 관리
分销管理: 유통 관리
创建人: 생성자
创建时间: 생성 시간
副标题: 부제목
@ -157,9 +154,7 @@ token消耗量Top5: Token 소모량 Top5
签退: 로그오프
管理: 관리
管理产品分类、案例行业、新闻栏目: 제품 분류, 사례 업종, 뉴스 섹션 관리
管理产线定义、运营配置、分销渠道与任务执行: 생산라인 정의, 운영 설정, 유통 채널 및 작업 실행 관리
管理产线定价、供应量与使用记录: 생산라인 가격, 공급량 및 사용 기록 관리
管理分销商与产线配置: 유통업체 및 생산라인 설정 관리
管理后台: 관리 백엔드
管理官网内容、分类、商机线索和站点配置: 공식 웹사이트 콘텐츠, 분류, 영업 리드 및 사이트 설정 관리
系统日志: 시스템 로그

View File

@ -12,16 +12,11 @@
"任务中心": "任务中心",
"使用记录": "使用记录",
"供应量管理": "供应量管理",
"分销商产线配置": "分销商产线配置",
"分销商管理": "分销商管理",
"分销管理": "分销管理",
"发布记录": "发布记录",
"定价管理": "定价管理",
"展示平台": "展示平台",
"管理": "管理",
"管理产线定义、运营配置、分销渠道与任务执行": "管理产线定义、运营配置、分销渠道与任务执行",
"管理产线定价、供应量与使用记录": "管理产线定价、供应量与使用记录",
"管理分销商与产线配置": "管理分销商与产线配置",
"运营管理": "运营管理",
"付费价格(0": "免费): 付费价格(0=免费)",
"知识库": "知识库",

View File

@ -11,14 +11,9 @@ Submit: Submit
任务中心: 任务中心
使用记录: 使用记录
供应量管理: 供应量管理
分销商产线配置: 分销商产线配置
分销商管理: 分销商管理
分销管理: 分销管理
发布记录: 发布记录
定价管理: 定价管理
展示平台: 展示平台
管理: 管理
管理产线定义、运营配置、分销渠道与任务执行: 管理产线定义、运营配置、分销渠道与任务执行
管理产线定价、供应量与使用记录: 管理产线定价、供应量与使用记录
管理分销商与产线配置: 管理分销商与产线配置
运营管理: 运营管理

View File

@ -304,12 +304,6 @@
"icon": "{{entire_url('/imgs/dashboard.svg')}}",
"script": "this.open_tab({name:'pipeline_ops',label:'运营管理',url:'/pipeline_ops',removable:true})"
},
{
"name": "pipeline_dist",
"label": "分销管理",
"icon": "{{entire_url('/imgs/truck.svg')}}",
"script": "this.open_tab({name:'pipeline_dist',label:'分销管理',url:'/pipeline_dist',removable:true})"
},
{
"name": "pipeline_task",
"label": "任务中心",

View File

@ -1 +0,0 @@
../pkgs/pipeline_dist/wwwroot