dingdingflow/wwwroot/api/dd_approval_configs_list.dspy
ymq a3f2ea8616 feat: 钉钉审批工作流模块从 cms 独立
- 表名统一 dda_ 前缀(dda_approvals/dda_approval_configs),跨应用复用防冲突
- 解耦关键改动:原回调硬编码 biz_type=='content_publish' + 写 cms_content 表,
  改为 register_biz_handler(biz_type, handler) 钩子分派,模块内零业务表引用
- 含 models(四段式)/json(CRUD)/9个dspy端点/load_path(any回调+9 logined)/i18n四语言
- README 覆盖凭据配置、审批模板配置、回调地址、审批节点接法(产线步骤)
2026-08-25 18:15:52 +08:00

55 lines
2.0 KiB
Plaintext

result = {'success': False, 'rows': [], 'total': 0}
try:
dbname = get_module_dbname('dingdingflow')
async with DBPools().sqlorContext(dbname) as sor:
where_clauses = []
where_ns = {}
# Optional filtering
is_active = params_kw.get('is_active', '')
if is_active:
where_clauses.append("is_active=${is_active}$")
where_ns['is_active'] = is_active
biz_type = params_kw.get('biz_type', '')
if biz_type:
where_clauses.append("biz_type=${biz_type}$")
where_ns['biz_type'] = biz_type
where_sql = " AND ".join(where_clauses)
where_prefix = " WHERE " if where_clauses else ""
# Count query
count_sql = "SELECT count(*) rcnt FROM dda_approval_configs" + where_prefix + where_sql
count_rows = await sor.sqlExe(count_sql, where_ns)
total = 0
if count_rows and len(count_rows) > 0:
r = count_rows[0]
total = getattr(r, 'rcnt', 0)
if total > 0:
ns = {
'page': int(params_kw.get('page', 1)),
'rows': int(params_kw.get('rows', 20)),
'sort': params_kw.get('sort', 'biz_type')
}
sql = "SELECT id, org_id, biz_type, biz_type_title, process_code, agent_id, form_config, is_active, created_at, updated_at FROM dda_approval_configs" + where_prefix + where_sql
query_ns = dict(list(ns.items()) + list(where_ns.items()))
rows = await sor.sqlExe(sql, query_ns)
if isinstance(rows, dict):
result['rows'] = rows.get('rows', [])
result['total'] = rows.get('total', total)
elif rows:
result['rows'] = [dict(r) if hasattr(r, 'keys') else r for r in rows]
result['total'] = total
else:
result['total'] = 0
result['success'] = True
except Exception as e:
result['error'] = str(e)
return result