1feada76d1
- 新增 HolidayConfig 模型,支持法定节假日和调休工作日配置 - 加班费同步逻辑改用 HolidayConfig 判断日期类型 - 员工端考勤显示加班工时、费率和日期类型 - 周末/节假日出勤状态显示为"周末出勤"/"节假日出勤" - 新增 Employee.defaultShiftId 字段,支持长期排班(工作日班次) - 排班管理拆分为独立页面(班次管理+排班),考勤管理保留出勤相关功能 - 排班和每日出勤页面增加身份证号列 - 修复岗位和部门编辑失败问题(POST 改 PUT) - 新增 backfill 脚本:合同薪资回填、默认班次回填 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
/**
|
|
* 迁移脚本:将员工月工资复制到合同的 baseSalary
|
|
* 当合同 baseSalary=0 且 performanceSalary=0 时,用员工 monthlySalary 填充 baseSalary
|
|
* 月工资 = baseSalary + performanceSalary
|
|
*/
|
|
import prisma from '../src/lib/prisma'
|
|
import { decrypt } from '../src/lib/crypto'
|
|
|
|
async function main() {
|
|
const contracts = await prisma.laborContract.findMany({
|
|
where: {
|
|
baseSalary: 0,
|
|
performanceSalary: 0,
|
|
},
|
|
include: {
|
|
employee: {
|
|
select: { monthlySalary: true, baseSalary: true, performanceSalary: true },
|
|
},
|
|
},
|
|
})
|
|
|
|
console.log(`找到 ${contracts.length} 个合同 baseSalary=0 且 performanceSalary=0`)
|
|
|
|
let updated = 0
|
|
for (const contract of contracts) {
|
|
const emp = contract.employee
|
|
if (!emp?.monthlySalary) continue
|
|
|
|
let empBase = 0
|
|
let empPerf = 0
|
|
try {
|
|
empBase = emp.baseSalary ? Number(decrypt(emp.baseSalary)) || 0 : 0
|
|
empPerf = emp.performanceSalary ? Number(decrypt(emp.performanceSalary)) || 0 : 0
|
|
} catch {}
|
|
|
|
// 优先用员工的 baseSalary/performanceSalary
|
|
let newBase = empBase
|
|
let newPerf = empPerf
|
|
|
|
// 如果员工也没有拆分工资,用 monthlySalary 作为 baseSalary
|
|
if (newBase === 0 && newPerf === 0) {
|
|
let monthly = 0
|
|
try {
|
|
monthly = Number(decrypt(emp.monthlySalary)) || 0
|
|
} catch {}
|
|
if (monthly > 0) {
|
|
newBase = monthly
|
|
newPerf = 0
|
|
}
|
|
}
|
|
|
|
if (newBase > 0 || newPerf > 0) {
|
|
await prisma.laborContract.update({
|
|
where: { id: contract.id },
|
|
data: { baseSalary: newBase, performanceSalary: newPerf },
|
|
})
|
|
console.log(` ✓ 合同 ${contract.id} (员工 ${contract.employeeId}): base=${newBase}, perf=${newPerf}`)
|
|
updated++
|
|
}
|
|
}
|
|
|
|
console.log(`\n完成:共更新 ${updated} 个合同`)
|
|
}
|
|
|
|
main()
|
|
.catch(console.error)
|
|
.finally(() => prisma.$disconnect())
|