| | |
| | | return; |
| | | } |
| | | BigDecimal basicSalary = resolveBasicSalary(map, staffOnJobDto); |
| | | BigDecimal attendanceBonus = resolveAttendanceBonus(staffOnJobDto); |
| | | BigDecimal attendanceBonus = resolveAttendanceBonus(map, staffOnJobDto); |
| | | BigDecimal otherIncome = normalizeMoney(getBigDecimal(map, "otherIncome")); |
| | | BigDecimal otherDeduct = normalizeMoney(getBigDecimal(map, "otherDeduct")); |
| | | BigDecimal socialSupplementAmount = resolveSocialSupplementAmount(map, staffOnJobDto); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取员工最新全勤奖金。 |
| | | * 全勤奖金统一以员工档案配置为准。 |
| | | * 获取员工全勤奖金。 |
| | | * 优先使用工资表本次传入的值(支持行内调整,含调整为 0),未传时回落到员工档案配置。 |
| | | */ |
| | | private BigDecimal resolveAttendanceBonus(StaffOnJob staffOnJobDto) { |
| | | // 全勤奖金直接取员工档案里的最新配置。 |
| | | private BigDecimal resolveAttendanceBonus(Map<String, Object> map, StaffOnJob staffOnJobDto) { |
| | | // 行内调整优先:只要本次传入全勤奖(包括 0),就直接采用传入值,负数按 0 处理。 |
| | | if (hasValue(map, "attendanceBonus")) { |
| | | BigDecimal passed = normalizeMoney(getBigDecimal(map, "attendanceBonus")); |
| | | return passed.compareTo(BigDecimal.ZERO) < 0 |
| | | ? BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP) |
| | | : passed; |
| | | } |
| | | // 未传入时保持原逻辑,取员工档案里的最新配置。 |
| | | return staffOnJobDto.getAttendanceBonus() == null |
| | | ? BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP) |
| | | : normalizeMoney(staffOnJobDto.getAttendanceBonus()); |