From be0a44c2510e41c23947145882b8ec2ea1f0f6ef Mon Sep 17 00:00:00 2001 From: freedakgmail Date: Mon, 17 Aug 2026 20:44:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=97=A5=E5=8E=86=E9=A3=8E=E9=99=A9?= =?UTF-8?q?=E6=88=AA=E6=AD=A2=E4=BA=8B=E4=BB=B6=E6=8C=89=20employeeId:type?= =?UTF-8?q?=20=E5=8E=BB=E9=87=8D=EF=BC=8C=E9=81=BF=E5=85=8D=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/services/risk.service.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/backend/src/services/risk.service.ts b/backend/src/services/risk.service.ts index d691c40..6033fc0 100644 --- a/backend/src/services/risk.service.ts +++ b/backend/src/services/risk.service.ts @@ -1167,7 +1167,7 @@ export async function getMonthlyCalendar(orgId: string, month: string) { } } - // 5. 风险截止日期 + // 5. 风险截止日期(按 employeeId:type 去重,同一员工同一类型只保留最新一条) const riskDeadlines = await prisma.riskItem.findMany({ where: { orgId, @@ -1175,8 +1175,13 @@ export async function getMonthlyCalendar(orgId: string, month: string) { deadline: { gte: monthStart, lte: monthEnd }, }, include: { employee: true }, + orderBy: { createdAt: 'desc' }, }) + const seenRiskKeys = new Set() for (const r of riskDeadlines) { + const dedupKey = `${r.employeeId}:${r.type}` + if (r.employeeId && seenRiskKeys.has(dedupKey)) continue + if (r.employeeId) seenRiskKeys.add(dedupKey) events.push({ date: r.deadline!.toISOString().slice(0, 10), type: 'RISK_DEADLINE',