168 lines
6.3 KiB
Python
168 lines
6.3 KiB
Python
#!/usr/bin/env python3
|
||
"""Pipeline Application - 产线管理独立应用"""
|
||
import os, sys, asyncio
|
||
|
||
app_dir = os.path.dirname(os.path.abspath(__file__))
|
||
root_dir = os.path.dirname(app_dir)
|
||
sys.path.insert(0, root_dir)
|
||
sys.path.insert(0, app_dir)
|
||
|
||
from ahserver.webapp import webapp
|
||
from ahserver.serverenv import ServerEnv
|
||
|
||
|
||
def get_module_dbname(mname):
|
||
"""All modules use the pipeline database."""
|
||
return 'pipeline'
|
||
|
||
|
||
def init():
|
||
from bricks_for_python.init import load_pybricks
|
||
from rbac.init import load_rbac
|
||
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:
|
||
def load_pipeline_service(): pass
|
||
try:
|
||
from pipeline_sdlc.adapter import load_sdlc_adapter
|
||
except ImportError:
|
||
def load_sdlc_adapter(): pass
|
||
try:
|
||
from app_audit.init import load_app_audit
|
||
except ImportError:
|
||
def load_app_audit(): pass
|
||
try:
|
||
from pipeline_bidding.init import load_pipeline_bidding
|
||
except ImportError:
|
||
def load_pipeline_bidding(): pass
|
||
try:
|
||
from pipeline_opportunity.init import load_pipeline_opportunity
|
||
except ImportError:
|
||
def load_pipeline_opportunity(): pass
|
||
from showcase.init import load_showcase
|
||
from tenant.init import load_tenant
|
||
from ktv_adapter import load_ktv_adapter
|
||
from global_func import set_globalvariable
|
||
import office_proxy # 注册 /office/* 转发函数(univer-office Node 服务代理)
|
||
try:
|
||
from smssend import load_smssend
|
||
except ImportError:
|
||
def load_smssend(): pass
|
||
# uapi:外部 API 网关(rag 模块依赖它调 vdb/reranker/ner/graph)
|
||
try:
|
||
from uapi.init import load_uapi
|
||
except ImportError:
|
||
def load_uapi(): pass
|
||
# dapi:开放平台 key 管理(downapp/downapikey)。注册 'Bearer ' 认证方法进 RBAC,
|
||
# rag 对外 API 的 Bearer key 鉴权依赖它——必须在 rag 之前 load。
|
||
try:
|
||
from dapi.init import load_dapi
|
||
except ImportError:
|
||
def load_dapi(): pass
|
||
# rag:知识库(向量检索 + 图谱),表名统一 rag_ 前缀,与产线业务表不冲突
|
||
try:
|
||
from rag.init import init_rag_module
|
||
except ImportError:
|
||
def init_rag_module(): pass
|
||
# dingdingflow:钉钉审批(表名 dda_ 前缀)。必须早于 pipeline_service,
|
||
# 后者的 dingtalk_approval 适配器要用它注册的 register_biz_handler
|
||
try:
|
||
from dingdingflow.init import load_dingdingflow
|
||
except ImportError:
|
||
def load_dingdingflow(): pass
|
||
# ── 商品化:定价/账务/折扣/支付(模块与表早已就位,此前一直没 load,页面点了即 500)──
|
||
try:
|
||
from pricing.init import load_pricing
|
||
except ImportError:
|
||
def load_pricing(): pass
|
||
try:
|
||
from accounting.init import load_accounting
|
||
except ImportError:
|
||
def load_accounting(): pass
|
||
try:
|
||
from discount.init import load_discount
|
||
except ImportError:
|
||
def load_discount(): pass
|
||
try:
|
||
from unipay.init import load_unipay
|
||
except ImportError:
|
||
def load_unipay(): pass
|
||
# ── 资源模块:各自决定 ppid 挂法,统一暴露 resolve_ppid 给产品层 ──
|
||
try:
|
||
from account_resource.init import load_account_resource
|
||
except ImportError:
|
||
def load_account_resource(): pass
|
||
try:
|
||
from storage_resource.init import load_storage_resource
|
||
except ImportError:
|
||
def load_storage_resource(): pass
|
||
# product_management:产品层,通过 env.product_interface 调资源模块
|
||
try:
|
||
from product_management import load_product_management
|
||
except ImportError:
|
||
def load_product_management(): pass
|
||
# filemgr:文件/附件管理(supplychain 合同附件依赖)
|
||
try:
|
||
from filemgr.init import load_filemgr
|
||
except ImportError:
|
||
def load_filemgr(): pass
|
||
# supplychain:供应商/分销商/供应链折扣管理
|
||
try:
|
||
from supplychain.init import load_supplychain
|
||
except ImportError:
|
||
def load_supplychain(): pass
|
||
# pipeline_llm:模型治理(供应商/账号/端点/组织策略/限额限流/双维度记账)
|
||
try:
|
||
from pipeline_llm.init import load_llm
|
||
except ImportError:
|
||
def load_llm(): pass
|
||
# pipeline_platform:平台内部 agent(模型自动配置等,仅管理员)
|
||
try:
|
||
from pipeline_platform.init import load_pipeline_platform
|
||
except ImportError:
|
||
def load_pipeline_platform(): pass
|
||
|
||
set_globalvariable()
|
||
ServerEnv().get_module_dbname = get_module_dbname
|
||
load_pybricks()
|
||
load_appbase()
|
||
load_rbac()
|
||
load_pipeline_core()
|
||
load_pipeline_ops()
|
||
load_pipeline_dist()
|
||
load_dingdingflow() # 先于 pipeline_service:其钉钉审批适配器依赖 register_biz_handler
|
||
# 商品化链路:pricing 必须先于资源模块(资源计费要调 pricing_program_charging)
|
||
load_pricing()
|
||
load_accounting()
|
||
load_discount()
|
||
load_unipay()
|
||
load_account_resource()
|
||
load_storage_resource()
|
||
load_product_management() # 产品层:依赖资源模块的 product_interface
|
||
load_filemgr() # 文件管理:先于 supplychain(合同附件依赖)
|
||
load_supplychain() # 供应链:供应商/分销商/折扣
|
||
load_llm() # 模型治理:供应商/账号/端点/组织策略/限额限流/记账
|
||
load_pipeline_service()
|
||
load_pipeline_platform() # 平台内部 agent(依赖 pipeline_service 的 llm_bridge)
|
||
load_pipeline_bidding() # 投标产线能力包(依赖 pipeline_service 的 capability 分发)
|
||
load_pipeline_opportunity() # 商机产线能力包(数据来自数据爬取平台内网 HTTP)
|
||
load_sdlc_adapter()
|
||
load_app_audit()
|
||
load_showcase()
|
||
load_tenant()
|
||
load_ktv_adapter()
|
||
load_smssend()
|
||
load_uapi() # 必须在 rag 之前:rag 通过 uapi 调 vdb/reranker/ner/graph
|
||
load_dapi() # 必须在 rag 之前:注册 Bearer key 认证,rag API 端点鉴权依赖
|
||
init_rag_module()
|
||
|
||
# Permission cache warms up on first request
|
||
|
||
|
||
if __name__ == '__main__':
|
||
webapp(init)
|