diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java index c27b10ac8..bf441252c 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java @@ -117,4 +117,11 @@ public interface SalaryAcctEmployeeMapper { * @return 返回记录,没有返回null */ SalaryAcctEmployeePO getById(Long id); + + /** + * 根据核算记录id,员工id删除 + * @param salaryAcctRecordId + * @param empIdList + */ + void deleteByIdAndEmpIds(@Param("id") Long salaryAcctRecordId, @Param("empIds") List empIdList); } diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index 06d86e035..b302d85d3 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -1131,6 +1131,17 @@ + + update hrsa_salary_acct_emp + set delete_type=1 + where delete_type=0 + and id=#{id} + and employee_id in + + #{employeeId} + + + diff --git a/src/com/engine/salary/service/SalaryAcctEmployeeService.java b/src/com/engine/salary/service/SalaryAcctEmployeeService.java index 91bc0ec48..0a9bbf9d8 100644 --- a/src/com/engine/salary/service/SalaryAcctEmployeeService.java +++ b/src/com/engine/salary/service/SalaryAcctEmployeeService.java @@ -256,4 +256,9 @@ public interface SalaryAcctEmployeeService { */ List listByTaxAgentAndSalaryMonth(List taxAgentIds, Set salaryMonths); + /** + * 宁波精华二开 - 删除离职账套中包含的人员 + * @param salaryAcctRecordId + */ + void deleteResignationEmp(Long salaryAcctRecordId); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 5e12b5bc2..4174d4a5e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -2,9 +2,11 @@ package com.engine.salary.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.common.LocalDateRange; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.hrmelog.entity.dto.LoggerContext; @@ -40,6 +42,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; +import weaver.general.BaseBean; import weaver.hrm.User; import java.util.*; @@ -121,11 +124,17 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct @Override public List listBySalaryAcctRecordId(Long salaryAcctRecordId) { + if (salaryAcctRecordId == null) { + return null; + } return getSalaryAcctEmployeeMapper().listSome(SalaryAcctEmployeePO.builder().salaryAcctRecordId(salaryAcctRecordId).build()); } @Override public List listBySalaryAcctRecordIds(Collection salaryAcctRecordIds) { + if (CollectionUtils.isEmpty(salaryAcctRecordIds)) { + return Collections.emptyList(); + } return getSalaryAcctEmployeeMapper().listSome(SalaryAcctEmployeePO.builder().salaryAcctRecordIds(salaryAcctRecordIds).build()); } @@ -754,4 +763,40 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct return getSalaryAcctEmployeeMapper().listSome(SalaryAcctEmployeePO.builder().taxAgentIds(taxAgentIds).salaryMonths(salaryMonths).build()); } + @Override + public void deleteResignationEmp(Long salaryAcctRecordId) { + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); + if (salaryAcctRecordPO == null) { + throw new SalaryRunTimeException("薪资核算记录不存在或已被删除!"); + } + BaseBean baseBean = new BaseBean(); + List needDeleteSobIds = Arrays.asList(baseBean.getPropValue("nbjhSalary", "needDeleteSobIds").split(",")) + .stream() + .filter(NumberUtil::isNumber) + .map(Long::valueOf).collect(Collectors.toList()); + + if (needDeleteSobIds.contains(salaryAcctRecordPO.getSalarySobId())) { + List resignationSobIds = Arrays.asList(baseBean.getPropValue("nbjhSalary", "dimissionSobIds").split(",")) + .stream() + .filter(NumberUtil::isNumber) + .map(Long::valueOf).collect(Collectors.toList()); + // TODO 是否需要限制与当前账套在同一个个税扣缴义务人下 + // 获取本月离职账套中的薪资核算记录 + LocalDateRange dateRange = new LocalDateRange(salaryAcctRecordPO.getSalaryMonth(), salaryAcctRecordPO.getSalaryMonth()); + List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(resignationSobIds, dateRange); + List resignationAcctRecordIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getId, Collectors.toList()); + // 获取离职账套中本月所包含的人员 + List resignationAcctEmployeeList = listBySalaryAcctRecordIds(resignationAcctRecordIds); + List empIdList = resignationAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList()); + // 从本次核算中删除离职人员 + deleteByIdAndEmpIds(salaryAcctRecordId, empIdList); + } + } + + private void deleteByIdAndEmpIds(Long salaryAcctRecordId, List empIdList) { + if (salaryAcctRecordId == null || CollectionUtils.isEmpty(empIdList)) { + return; + } + getSalaryAcctEmployeeMapper().deleteByIdAndEmpIds(salaryAcctRecordId, empIdList); + } } diff --git a/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java index 526fbfcb5..ae9cdeef2 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java @@ -56,6 +56,8 @@ public class SalaryAcctEmployeeWrapper extends Service { * @return */ public PageInfo listPage(SalaryAcctEmployeeQueryParam queryParam) { + // 宁波精华二开 - 删除离职账套中包含的人员 + getSalaryAcctEmployeeService(user).deleteResignationEmp(queryParam.getSalaryAcctRecordId()); // 查询薪资核算人员(人员) PageInfo page = getSalaryAcctEmployeeService(user).listPageByParam(queryParam); // 转换成列表dto