fix: 身份证号必填+去重+报告按姓名兜底
- 后端 createEmployeeSchema 加 idCardNumber 必填18位校验 - 后端 updateEmployeeSchema 加 idCardNumber 可选编辑 - updateEmployee 支持编辑身份证号,自动生成 hash/生日/性别 - Excel 导入时身份证号必填,为空跳过 - 年度价值报告去重 key 改为 idCardHash > name > employeeId 兜底
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import prisma from '../lib/prisma'
|
||||
import { encrypt, decrypt, sha256 } from '../lib/crypto'
|
||||
import { runRiskDetection } from './risk.service'
|
||||
import { extractBirthDateFromIdCard, extractGenderFromIdCard } from './retirement.service'
|
||||
|
||||
function daysBetween(a: Date, b: Date): number {
|
||||
return Math.floor((a.getTime() - b.getTime()) / (1000 * 60 * 60 * 24))
|
||||
@@ -525,6 +526,15 @@ export async function updateEmployee(orgId: string, id: string, data: any) {
|
||||
if (data.gender !== undefined) updateData.gender = data.gender
|
||||
if (data.femaleWorkerType !== undefined) updateData.femaleWorkerType = data.femaleWorkerType
|
||||
if (data.phone !== undefined) updateData.phone = data.phone
|
||||
if (data.idCardNumber !== undefined) {
|
||||
updateData.idCardNumber = encrypt(data.idCardNumber)
|
||||
updateData.idCardHash = sha256(data.idCardNumber)
|
||||
updateData.birthDate = extractBirthDateFromIdCard(data.idCardNumber)
|
||||
if (!updateData.gender) {
|
||||
const gender = extractGenderFromIdCard(data.idCardNumber)
|
||||
if (gender) updateData.gender = gender
|
||||
}
|
||||
}
|
||||
if (data.bankName !== undefined) updateData.bankName = data.bankName
|
||||
if (data.bankAccount !== undefined) updateData.bankAccount = encrypt(data.bankAccount)
|
||||
if (data.emergencyContact !== undefined) updateData.emergencyContact = data.emergencyContact
|
||||
|
||||
@@ -1674,8 +1674,8 @@ export async function getAnnualValueReport(orgId: string, year: number) {
|
||||
}
|
||||
|
||||
for (const r of employeeRiskDetails) {
|
||||
// 按身份证号分组,无身份证号时回退到 employeeId
|
||||
const personKey = r.employee?.idCardHash || r.employeeId || '_unknown'
|
||||
// 去重优先级:身份证号 > 姓名回退到姓名,避免同一人多条 Employee 记录被重复计算
|
||||
const personKey = r.employee?.idCardHash || r.employee?.name || r.employeeId || '_unknown'
|
||||
if (!personBreakdown[personKey]) {
|
||||
personBreakdown[personKey] = {
|
||||
personKey,
|
||||
|
||||
Reference in New Issue
Block a user