R35-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 = [];
|
||||
|
||||
在新工单中引用
屏蔽一个用户