feat: 人类任务清单 dspy(my_todos/project_human_count/human_task_create/complete) + bug_accept 验收 dspy

This commit is contained in:
ymq 2026-08-24 12:25:58 +08:00
parent a3cba2ea49
commit 56b40e4fc5
5 changed files with 84 additions and 0 deletions

View File

@ -0,0 +1,17 @@
# bug_accept.dspy - Bug 验收仅报告人通过→closed不通过→reopen
user_id = await get_user()
if not user_id:
return json.dumps({"success": False, "error": "未登录"}, ensure_ascii=False)
bug_id = params_kw.get('bug_id', '').strip()
accept = params_kw.get('accept', '').strip().lower() in ('1', 'true', 'yes', '通过')
comment = params_kw.get('comment', '')
if not bug_id:
return json.dumps({"success": False, "error": "缺少 bug_id"}, ensure_ascii=False)
ok, msg = await bug_accept(bug_id, accept, user_id, comment=comment)
if ok:
return json.dumps({"success": True, "message": msg}, ensure_ascii=False)
return json.dumps({"success": False, "error": msg}, ensure_ascii=False)

View File

@ -0,0 +1,21 @@
# human_task_complete.dspy - 处理人类任务(同机构 + 匹配 assignee
user_id = await get_user()
if not user_id:
return json.dumps({"success": False, "error": "未登录"}, ensure_ascii=False)
human_task_id = params_kw.get('human_task_id', '').strip()
result_data = params_kw.get('result_data', '')
if isinstance(result_data, str):
try:
result_data = json.loads(result_data) if result_data else {}
except Exception:
result_data = {"content": result_data}
if not human_task_id:
return json.dumps({"success": False, "error": "缺少 human_task_id"}, ensure_ascii=False)
ok, msg = await complete_human_task(human_task_id, result_data, operator_id=user_id)
if ok:
return json.dumps({"success": True, "id": msg}, ensure_ascii=False)
return json.dumps({"success": False, "error": msg}, ensure_ascii=False)

View File

@ -0,0 +1,27 @@
# human_task_create.dspy - 派发项目级人类任务(仅项目 owner
user_id = await get_user()
if not user_id:
return json.dumps({"success": False, "error": "未登录"}, ensure_ascii=False)
project_id = params_kw.get('project_id', '').strip()
title = params_kw.get('title', '').strip()
description = params_kw.get('description', '')
assignee_role = params_kw.get('assignee_role', '').strip()
assignee_id = params_kw.get('assignee_id', '').strip()
if not project_id or not title:
return json.dumps({"success": False, "error": "缺少 project_id 或 title"}, ensure_ascii=False)
dbname = get_module_dbname('pipeline-sdlc')
async with DBPools().sqlorContext(dbname) as sor:
ok, emsg = await check_project_owner(project_id, user_id, sor)
if not ok:
return json.dumps({"success": False, "error": emsg}, ensure_ascii=False)
ok, msg = await create_human_task(project_id, title, description,
assignee_role=assignee_role, assignee_id=assignee_id,
created_by=user_id)
if ok:
return json.dumps({"success": True, "id": msg}, ensure_ascii=False)
return json.dumps({"success": False, "error": msg}, ensure_ascii=False)

View File

@ -0,0 +1,9 @@
# my_todos.dspy - 我的待办(跨项目:人类任务 + bug 验收 + 冒泡问题)
user_id = await get_user()
if not user_id:
return json.dumps({"success": False, "error": "未登录"}, ensure_ascii=False)
todos = await list_my_human_todos(user_id)
return json.dumps({"success": True, "todos": todos}, ensure_ascii=False, default=str)

View File

@ -0,0 +1,10 @@
# project_human_count.dspy - 项目角标 X = 指派给本人的待办数(问题+人类任务)
user_id = await get_user()
if not user_id:
return json.dumps({"count": 0}, ensure_ascii=False)
project_id = params_kw.get('project_id', '').strip()
count = await count_my_human_tasks(user_id, project_id)
return json.dumps({"count": count}, ensure_ascii=False)