diff --git a/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml b/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml index e3d729fd4..a97e91e6c 100644 --- a/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml +++ b/src/com/engine/salary/mapper/salarybill/SalarySendMapper.xml @@ -218,7 +218,7 @@ AND send_status = #{sendStatus} - AND salary_acct_type = #{salaryAcctTypec} + AND salary_acct_type = #{salaryAcctType} AND creator = #{creator} diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index af9f51f1e..ed126d32a 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -247,6 +247,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService if (CollectionUtils.isEmpty(acctRecords)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100498, "核算记录不存在")); } + SalaryAcctRecordPO salaryAcctRecord = acctRecords.get(0); + // 工资单模板类型:0,正常核算,1是回算,todo 后续可能还有别的算,需要改这里 + Integer templateType = salaryAcctRecord.getBackCalcStatus(); List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(Collections.singletonList(salaryAccountingId)); @@ -288,12 +291,20 @@ public class SalarySendServiceImpl extends Service implements SalarySendService .collect(Collectors.toSet()); salaryAcctEmployees = salaryAcctEmployees.stream().filter(se -> salaryAcctEmployeeIds.contains(se.getId())).collect(Collectors.toList()); } - // 将未冻结的给冻结掉 if (salarySend != null) { salarySend.setSendStatus(NumberUtils.INTEGER_ONE); mapper.updateById(salarySend); } + sendPO = new SalarySendPO(); + sendPO.setDeleteType(0); + sendPO.setSalaryAccountingId(salaryAccountingId); + sendPO.setSalaryAcctType(templateType); + List salarySendPOS = mapper.listSome(sendPO); + if (CollectionUtils.isNotEmpty(salarySendPOS)) { + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100499, "工资单已生成过,不可再重复生成")); + return ""; + } // 2.正常核算 } else { SalarySendPO sendPO = new SalarySendPO(); @@ -301,15 +312,14 @@ public class SalarySendServiceImpl extends Service implements SalarySendService sendPO.setSalaryAccountingId(salaryAccountingId); List salarySends = mapper.listSome(sendPO); if (CollectionUtils.isNotEmpty(salarySends)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100499, "工资单已生成过,不可再重复生成")); + // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100499, "工资单已生成过,不可再重复生成")); + return ""; } } Long salarySendId = IdGenerator.generate(); - SalaryAcctRecordPO salaryAcctRecord = acctRecords.get(0); - // 工资单模板类型:0,正常核算,1是回算,todo 后续可能还有别的算,需要改这里 - Integer templateType = salaryAcctRecord.getBackCalcStatus(); + // 构建工资单发放数据 List salarySendInfos = salaryAcctEmployees.stream().map(m -> @@ -407,24 +417,27 @@ public class SalarySendServiceImpl extends Service implements SalarySendService .sendStatus(SalarySendStatusEnum.ALREADYSEND.getValue()) .salaryAcctType(NumberUtils.INTEGER_ZERO).build(); List salarySendInfos = getSalarySendInfoMapper().listSome(sendInfo); - if ((salarySend.getSendNum() > 0 || CollectionUtils.isNotEmpty(salarySendInfos)) && Objects.equals(salarySend.getSalaryAcctType(), NumberUtils.INTEGER_ONE)) { + if ((salarySend.getSendNum() > 0 || CollectionUtils.isNotEmpty(salarySendInfos)) && Objects.equals(salarySend.getSalaryAcctType(), NumberUtils.INTEGER_ONE) && salarySend.getSendNum().equals(salarySend.getSendTotal())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100507, "补发工资单已经发放,不可进行回算")); - } else if (salarySend.getSendNum() > 0 || CollectionUtils.isNotEmpty(salarySendInfos)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100507, "工资单已经发放,不可撤销,可以进行回算")); + } else if (salarySend.getSendNum() > 0 && salarySend.getSendNum().equals(salarySend.getSendTotal())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100507, "工资单已经全部发放,不可撤销,请先撤回至少一条工资单")); + } + // 所有工资单都被撤回 + if (salarySend.getSendNum() == 0 || CollectionUtils.isEmpty(salarySendInfos)) { + // 删除工资单 + SalarySendPO salarySendPO = SalarySendPO.builder() + .id(salarySend.getId()) + .sendNum(0) + .deleteType(1) + .build(); + getSalarySendMapper().updateIgnoreNull(salarySendPO); + // 删除工资单发放 + SalarySendInfoPO infoPO = SalarySendInfoPO.builder() + .salarySendId(salarySend.getId()) + .deleteType(1) + .build(); + getSalarySendInfoMapper().updateGrantWithdraw(infoPO, salarySend.getId(), null, null); } - // 删除工资单 - SalarySendPO salarySendPO = SalarySendPO.builder() - .id(salarySend.getId()) - .sendNum(0) - .deleteType(1) - .build(); - getSalarySendMapper().updateIgnoreNull(salarySendPO); - // 删除工资单发放 - SalarySendInfoPO infoPO = SalarySendInfoPO.builder() - .salarySendId(salarySend.getId()) - .deleteType(1) - .build(); - getSalarySendInfoMapper().updateGrantWithdraw(infoPO, salarySend.getId(), null, null); }