feat(knowledge): 工单验收自动生成草稿,核对后发布,来源可追
- knowledge_doc 与 item 1:1,除 source_kind=manual 外必须有来源(库级约束) - 状态机 draft/in_review/published/archived,发布要 owner/admin;非法动作回 allowed_from 与 allowed_actions - 工单验收通过自动落 postmortem 草稿(generated_by=rule),同一来源只生成一次 - 接口:列表/详情/手记/改内容/状态动作/从事项沉淀;已发布禁改,改内容带乐观锁 - Web 知识页 + 详情抽屉;任务与工单详情里可「沉淀成知识」 - 8 个后端用例 + e2e 7 项断言(沉淀 → 待核对 → 发布)
This commit is contained in:
@@ -288,6 +288,41 @@ async def promote(item_id: uuid.UUID, body: PromoteIn, ctx: MemberDep, session:
|
||||
|
||||
|
||||
# -- 办理/验收 ----------------------------------------------------------
|
||||
async def _draft_knowledge(
|
||||
session: AsyncSession,
|
||||
ctx: TenantCtx,
|
||||
ticket: Item,
|
||||
ext: TicketExt,
|
||||
resolution_md: str,
|
||||
now: datetime,
|
||||
) -> None:
|
||||
"""验收通过时自动整理一份知识草稿(M3 闭环沉淀)。
|
||||
|
||||
只落 draft 不发布:自动整理的东西得有人扫一眼才敢进团队检索。
|
||||
同一张工单只沉淀一次(重复点验收、历史数据补跑都不会重复产出)。
|
||||
"""
|
||||
from ..services.knowledge import create_draft_from_source, find_doc_by_source
|
||||
|
||||
if await find_doc_by_source(session, ctx.ws_id, ticket.id) is not None:
|
||||
return
|
||||
doc_item, _doc = await create_draft_from_source(
|
||||
session,
|
||||
ws_id=ctx.ws_id,
|
||||
source=ticket,
|
||||
author_id=ctx.user.id,
|
||||
generated_by="rule",
|
||||
resolution_md=resolution_md or ext.resolution_md or "",
|
||||
doc_type="postmortem",
|
||||
)
|
||||
await _log(
|
||||
session,
|
||||
doc_item,
|
||||
ctx.user.id,
|
||||
"knowledge_created",
|
||||
{"source_item_id": str(ticket.id), "generated_by": "rule"},
|
||||
)
|
||||
|
||||
|
||||
async def _advance(
|
||||
ctx: TenantCtx,
|
||||
session: AsyncSession,
|
||||
@@ -391,6 +426,11 @@ async def _advance(
|
||||
body="它对应的工单已验收通过",
|
||||
)
|
||||
|
||||
# 验收通过 -> 顺手整理一份知识草稿(闭环沉淀)。
|
||||
# 只落草稿不发布:自动整理的东西得有人扫一眼才敢进团队检索。
|
||||
if action == "approve":
|
||||
await _draft_knowledge(session, ctx, ticket, ext, resolution_md, now)
|
||||
|
||||
await session.flush()
|
||||
return await _ticket_out(session, ctx.ws_id, ticket, ext)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user