From 947b6d3abfec4cd0a8bad79e1e5970557d30569e Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 25 Aug 2026 18:23:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(dingdingflow):=20=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=E9=92=89=E9=92=89=E5=AE=A1=E6=89=B9=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - app/pipeline_app.py: load_dingdingflow(),置于 load_pipeline_service() 之前 (后者的 dingtalk_approval 适配器依赖前者注册的 register_biz_handler) - build.sh: 四处模块列表 + 8b DDL 循环加 dingdingflow(dda_* 表建到 pipeline 库) - wwwroot/index.ui: 侧边栏加「钉钉审批」菜单(open_tab) - i18n zh/en/jp/ko 补文案 --- app/pipeline_app.py | 7 +++++++ build.sh | 11 ++++++----- i18n/en/msg.txt | 1 + i18n/jp/msg.txt | 1 + i18n/ko/msg.txt | 1 + i18n/zh/msg.txt | 1 + wwwroot/index.ui | 6 ++++++ 7 files changed, 23 insertions(+), 5 deletions(-) diff --git a/app/pipeline_app.py b/app/pipeline_app.py index f6a595f..752532d 100644 --- a/app/pipeline_app.py +++ b/app/pipeline_app.py @@ -54,6 +54,12 @@ def init(): 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 set_globalvariable() ServerEnv().get_module_dbname = get_module_dbname @@ -63,6 +69,7 @@ def init(): load_pipeline_core() load_pipeline_ops() load_pipeline_dist() + load_dingdingflow() # 先于 pipeline_service:其钉钉审批适配器依赖 register_biz_handler load_pipeline_service() load_sdlc_adapter() load_app_audit() diff --git a/build.sh b/build.sh index 812b79d..0feae7f 100644 --- a/build.sh +++ b/build.sh @@ -53,7 +53,7 @@ for mod in pipeline_core pipeline_ops pipeline_dist; do done # 5. Install business modules (clone external, local already in pkgs) -for mod in pipeline-sdlc showcase evaluate pipeline-service pipeline-task tenant app_audit product_management discount pricing unipay smssend accounting uapi rag; do +for mod in pipeline-sdlc showcase evaluate pipeline-service pipeline-task tenant app_audit product_management discount pricing unipay smssend accounting uapi rag dingdingflow; do cd "$cdir/pkgs" if [ ! -d "$mod" ]; then git clone https://git.opencomputing.cn/yumoqing/$mod || echo "SKIP: $mod" @@ -62,7 +62,7 @@ for mod in pipeline-sdlc showcase evaluate pipeline-service pipeline-task tenant done # 6. pip install all modules from pkgs/(pipeline-service 是普通 install 非 editable,部署必 pull+pip install 都做) -for mod in pipeline_core pipeline_ops pipeline_dist pipeline-sdlc showcase pipeline-service tenant app_audit product_management discount pricing unipay smssend accounting uapi rag; do +for mod in pipeline_core pipeline_ops pipeline_dist pipeline-sdlc showcase pipeline-service tenant app_audit product_management discount pricing unipay smssend accounting uapi rag dingdingflow; do if [ -d "pkgs/$mod" ]; then "$cdir/py3/bin/pip" install "pkgs/$mod/" 2>&1 | tail -1 fi @@ -89,7 +89,7 @@ if [ -d "pkgs/pipeline_core/skills_library" ]; then fi # 7. Regenerate CRUD from json for all pipeline modules -for mod in appbase pipeline_core pipeline_ops pipeline_dist pipeline-sdlc rbac dapi accounting uapi rag; do +for mod in appbase pipeline_core pipeline_ops pipeline_dist pipeline-sdlc rbac dapi accounting uapi rag dingdingflow; do json_dir="pkgs/$mod/json" models_dir="pkgs/$mod/models" wwwroot_dir="pkgs/$mod/wwwroot" @@ -102,7 +102,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; do +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; do src="pkgs/$mod/wwwroot" dst="wwwroot/$mod" if [ -d "$src" ]; then @@ -117,7 +117,7 @@ mkdir -p wwwroot/pipeline_task # 8b. uapi + rag 模块建表 + 导入外部服务配置种子 # uapi 表(upapp/uapi/uapiio...)必须先建,rag 的 uapi_seed.sql 才有表可插 # rag 表统一 rag_ 前缀,与产线业务表隔离;数据独立于 ragserver(同代码不同宿主,各自的数据) -for m in uapi rag; do +for m in uapi rag dingdingflow; do if [ -d "pkgs/$m/models" ] && ls pkgs/$m/models/*.json >/dev/null 2>&1; then cd "$cdir/pkgs/$m/models" "$cdir/py3/bin/json2ddl" mysql . > "/tmp/pipeline_${m}_ddl.sql" || { @@ -140,6 +140,7 @@ kw = cfg.databases['pipeline'].kwargs pwd = aes_decode_b64(cfg.password_key, kw.password) # 顺序关键:uapi 建表 → rag 建表 → rag 的 uapi 配置种子 for sqlfile in ['/tmp/pipeline_uapi_ddl.sql', '/tmp/pipeline_rag_ddl.sql', + '/tmp/pipeline_dingdingflow_ddl.sql', 'pkgs/rag/init/uapi_seed.sql']: if not os.path.exists(sqlfile): print(' SKIP (missing): %s' % sqlfile) diff --git a/i18n/en/msg.txt b/i18n/en/msg.txt index ce127d1..690fe11 100644 --- a/i18n/en/msg.txt +++ b/i18n/en/msg.txt @@ -21,3 +21,4 @@ Submit: Submit 向量引擎: Vector Engine 多媒体(图文音视): Multimedia (image/audio/video) 文本(文档检索): Text (document retrieval) +钉钉审批: DingTalk Approval diff --git a/i18n/jp/msg.txt b/i18n/jp/msg.txt index 37bc81a..62b7bc0 100644 --- a/i18n/jp/msg.txt +++ b/i18n/jp/msg.txt @@ -21,3 +21,4 @@ Submit: 送信 向量引擎: ベクトルエンジン 多媒体(图文音视): マルチメディア(画像・音声・動画) 文本(文档检索): テキスト(文書検索) +钉钉审批: DingTalk承認 diff --git a/i18n/ko/msg.txt b/i18n/ko/msg.txt index b553fa5..5b491bc 100644 --- a/i18n/ko/msg.txt +++ b/i18n/ko/msg.txt @@ -21,3 +21,4 @@ Submit: 제출 向量引擎: 벡터 엔진 多媒体(图文音视): 멀티미디어(이미지/음성/영상) 文本(文档检索): 텍스트(문서 검색) +钉钉审批: 딩톡 결재 diff --git a/i18n/zh/msg.txt b/i18n/zh/msg.txt index 2462d8f..f00ffa9 100644 --- a/i18n/zh/msg.txt +++ b/i18n/zh/msg.txt @@ -21,3 +21,4 @@ Submit: Submit 向量引擎: 向量引擎 多媒体(图文音视): 多媒体(图文音视) 文本(文档检索): 文本(文档检索) +钉钉审批: 钉钉审批 diff --git a/wwwroot/index.ui b/wwwroot/index.ui index a39470c..08dc7dd 100644 --- a/wwwroot/index.ui +++ b/wwwroot/index.ui @@ -165,6 +165,12 @@ "icon": "{{entire_url('/imgs/mic.svg')}}", "script": "this.open_tab({name:'pipeline_ktv',label:'KTV产线',url:'/pipeline_task/task_submit.ui',removable:true})" }, + { + "name": "dda_approval", + "label": "钉钉审批", + "icon": "{{entire_url('/imgs/workflow.svg')}}", + "script": "this.open_tab({name:'dda_approval',label:'钉钉审批',url:'/dingdingflow/api/dd_approvals_list.dspy',removable:true})" + }, { "name": "rag_kb", "label": "知识库",