| | |
| | | /** |
| | | * 批量删除核算记录(全选后一键删除) |
| | | * |
| | | * 说明:按业务要求,批量删除不限制状态,勾选即删。 |
| | | * 不存在的 ID 直接跳过,不报错(避免前端勾选列表与库不一致时整体失败)。 |
| | | * 说明: |
| | | * 1. 按业务要求,批量删除不限制核算单状态,勾选即删; |
| | | * 2. 不存在的 ID 直接跳过,不报错(避免前端勾选列表与库不一致时整体失败); |
| | | * 3. 已被「工资发放明细」引用的记录会跳过不删,避免发放明细变成孤儿数据。 |
| | | * |
| | | * @return 实际删除的条数(可能小于传入条数) |
| | | */ |
| | | @Override |
| | | public Integer deleteSalaryCalculationList(List<Long> ids) { |
| | |
| | | if (CollUtil.isEmpty(existIds)) { |
| | | return 0; |
| | | } |
| | | salaryCalculationMapper.deleteByIds(existIds); |
| | | return existIds.size(); |
| | | // 引用保护:已进入工资发放流程的核算单不允许删除 |
| | | Set<Long> referencedIds = salaryPaymentDetailMapper.selectListByCalculationIds(existIds).stream() |
| | | .map(HrmSalaryPaymentDetailDO::getCalculationId) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.toSet()); |
| | | List<Long> deletableIds = existIds.stream() |
| | | .filter(id -> !referencedIds.contains(id)) |
| | | .collect(Collectors.toList()); |
| | | if (CollUtil.isEmpty(deletableIds)) { |
| | | return 0; |
| | | } |
| | | salaryCalculationMapper.deleteByIds(deletableIds); |
| | | return deletableIds.size(); |
| | | } |
| | | |
| | | } |