R35-2 审批通知补结构化摘要

这个提交包含在:
2026-03-25 11:38:00 +08:00
父节点 a962f4b074
当前提交 6fba13573e
共修改 12 个文件,包含 1243 行新增和 266 行删除
+49 -2
查看文件
@@ -27,6 +27,10 @@ const {
const { reserveBudgetForEntity, releaseReservedBudgetIfAny } = require("../services/purchaseBudget");
const { sendNotificationEmailSafe } = require("../services/email");
const { createNotifications, resolveRecipientsForAssignee } = require("../services/notifications");
const {
buildPendingTaskCopy,
buildWorkflowEntityMeta,
} = require("../services/notifications/workflowCopy");
const { enqueueImNotifications } = require("../services/notifications/imEnqueue");
const { NOTIFICATION_TYPES } = require("../constants/notificationTypes");
const { openReadStream, StorageNotFoundError, writeBuffer } = require("../services/storage");
@@ -914,6 +918,23 @@ function buildSkippedEmailResult(reason, failed = 0) {
return { skipped: true, reason, sent: 0, failed };
}
async function loadPurchaseSubmitSummary(prisma, purchaseRequestId) {
return prisma.purchaseRequest.findUnique({
where: { id: purchaseRequestId },
select: {
id: true,
request_no: true,
total_amount: true,
applicant: {
select: {
id: true,
name: true,
},
},
},
});
}
async function finalizePurchaseSubmitSideEffects({
prisma,
config,
@@ -925,13 +946,39 @@ async function finalizePurchaseSubmitSideEffects({
assigneeId,
assigneeRole,
actorId,
loadSummary = loadPurchaseSubmitSummary,
resolveRecipients = resolveRecipientsForAssignee,
createAppNotifications = createNotifications,
enqueueIm = enqueueImNotifications,
sendEmailSafe = sendNotificationEmailSafe,
}) {
const title = `【待办】采购申请 ${requestNo} 待审批`;
const body = `采购申请 ${requestNo} 已提交,请及时处理。`;
let copy = buildPendingTaskCopy(
buildWorkflowEntityMeta("purchase_request", { request_no: requestNo }, purchaseRequestId),
);
try {
const summary = await loadSummary(prisma, purchaseRequestId);
copy = buildPendingTaskCopy(
buildWorkflowEntityMeta(
"purchase_request",
{
...summary,
request_no: summary?.request_no ?? requestNo,
},
purchaseRequestId,
),
);
} catch (error) {
logger?.error?.(
{
err: error,
requestId,
purchaseRequestId,
},
"Failed to load purchase submit notification summary",
);
}
const { title, body } = copy;
const targetPath = `/workflow/tasks/${workflowTaskId}`;
let recipientEmployeeIds = [];