From 63c5a3b2e2f06c58fc1bce4aa9d858b0079a2acd Mon Sep 17 00:00:00 2001 From: selfrelease Date: Sat, 1 Aug 2026 13:55:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=87=AA=E5=8A=A8=E6=B6=88=E9=99=A4?= =?UTF-8?q?=E5=B7=B2=E8=A7=A3=E5=86=B3=E7=9A=84PENDING=E9=A3=8E=E9=99=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:员工补签合同后,旧的未签合同/合同到期风险仍显示在待办中 原因:runRiskDetection只去重和更新,不会自动消除不再触发的风险 方案:检测后比较新风险key集合,PENDING但不再出现的自动标记RESOLVED --- backend/src/services/risk.service.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/backend/src/services/risk.service.ts b/backend/src/services/risk.service.ts index d715bc6..19e9a5e 100644 --- a/backend/src/services/risk.service.ts +++ b/backend/src/services/risk.service.ts @@ -606,6 +606,25 @@ export async function runRiskDetection(orgId: string) { await prisma.riskItem.createMany({ data: createData }) } + // 自动消除:PENDING 风险在最新检测结果中不再出现,说明问题已自然解决 + // 例如:员工补签了合同,则旧的"未签合同"风险应自动标记为 RESOLVED + const newRiskKeys = new Set(nonMonthlyRisks.map((r) => `${r.employeeId}:${r.type}`)) + const toResolve: string[] = [] + for (const r of existingRisks) { + if (r.status === 'PENDING' && r.employeeId) { + const key = `${r.employeeId}:${r.type}` + if (!newRiskKeys.has(key)) { + toResolve.push(r.id) + } + } + } + if (toResolve.length > 0) { + await prisma.riskItem.updateMany({ + where: { id: { in: toResolve } }, + data: { status: 'RESOLVED', resolvedAt: new Date() }, + }) + } + return toCreate.length }