fix: 自动消除已解决的PENDING风险
问题:员工补签合同后,旧的未签合同/合同到期风险仍显示在待办中 原因:runRiskDetection只去重和更新,不会自动消除不再触发的风险 方案:检测后比较新风险key集合,PENDING但不再出现的自动标记RESOLVED
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user