feat: 退休提醒功能 - 身份证提取出生日期、渐进式退休年龄计算、AI流式获取政策、用户确认生效
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import prisma from '../src/lib/prisma'
|
||||
import { decrypt } from '../src/lib/crypto'
|
||||
|
||||
function extractBirthDate(idCard: string): Date | null {
|
||||
if (idCard.length === 18) {
|
||||
const y = parseInt(idCard.substring(6, 10))
|
||||
const m = parseInt(idCard.substring(10, 12))
|
||||
const d = parseInt(idCard.substring(12, 14))
|
||||
if (y && m && d) return new Date(y, m - 1, d)
|
||||
}
|
||||
if (idCard.length === 15) {
|
||||
const y = parseInt('19' + idCard.substring(6, 8))
|
||||
const m = parseInt(idCard.substring(8, 10))
|
||||
const d = parseInt(idCard.substring(10, 12))
|
||||
if (y && m && d) return new Date(y, m - 1, d)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const employees = await prisma.employee.findMany({ select: { id: true, idCardNumber: true, birthDate: true } })
|
||||
let updated = 0
|
||||
for (const emp of employees) {
|
||||
if (emp.birthDate) continue
|
||||
if (!emp.idCardNumber) continue
|
||||
let idCard: string
|
||||
try { idCard = decrypt(emp.idCardNumber).toString() } catch { continue }
|
||||
const birthDate = extractBirthDate(idCard)
|
||||
if (birthDate) {
|
||||
await prisma.employee.update({ where: { id: emp.id }, data: { birthDate } })
|
||||
updated++
|
||||
}
|
||||
}
|
||||
console.log(`Updated ${updated} employees with birthDate`)
|
||||
await prisma.$disconnect()
|
||||
}
|
||||
|
||||
main()
|
||||
@@ -0,0 +1,30 @@
|
||||
import prisma from '../src/lib/prisma'
|
||||
import { decrypt } from '../src/lib/crypto'
|
||||
|
||||
async function main() {
|
||||
// 查找刘洋
|
||||
const employees = await prisma.employee.findMany({
|
||||
select: { id: true, name: true, birthDate: true, retirementDaysLeft: true, gender: true, idCardNumber: true },
|
||||
})
|
||||
for (const emp of employees) {
|
||||
let idCard = ''
|
||||
if (emp.idCardNumber) {
|
||||
try { idCard = decrypt(emp.idCardNumber).toString() } catch {}
|
||||
}
|
||||
console.log(`${emp.name} | birthDate=${emp.birthDate?.toISOString().slice(0,10) || 'NULL'} | retirementDaysLeft=${emp.retirementDaysLeft ?? 'NULL'} | gender=${emp.gender} | idCard=${idCard.slice(0,6)}...`)
|
||||
}
|
||||
|
||||
// 查找刘洋的合同
|
||||
const liu = employees.find(e => e.name === '刘洋')
|
||||
if (liu) {
|
||||
const contracts = await prisma.contract.findMany({ where: { employeeId: liu.id }, select: { contractType: true, status: true } })
|
||||
console.log('\n刘洋合同:', contracts)
|
||||
}
|
||||
|
||||
// 查找已确认政策
|
||||
const policies = await prisma.retirementPolicy.findMany({ select: { id: true, version: true, status: true, maleRetireAge: true, femaleRetireAge: true, femaleWorkerAge: true } })
|
||||
console.log('\n政策:', policies)
|
||||
|
||||
await prisma.$disconnect()
|
||||
}
|
||||
main()
|
||||
@@ -0,0 +1,13 @@
|
||||
import { fetchRetirementPolicy } from '../src/services/ai.service'
|
||||
|
||||
async function main() {
|
||||
console.log('Calling AI...')
|
||||
const result = await fetchRetirementPolicy()
|
||||
console.log('maleRetireAge:', result.maleRetireAge)
|
||||
console.log('femaleRetireAge:', result.femaleRetireAge)
|
||||
console.log('femaleWorkerAge:', result.femaleWorkerAge)
|
||||
console.log('content length:', result.content.length)
|
||||
console.log('content preview:', result.content.slice(0, 500))
|
||||
}
|
||||
|
||||
main().catch(err => console.error('Error:', err.message))
|
||||
Reference in New Issue
Block a user