pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), SalaryArchiveListDTO.class);
pageInfo.setTotal(list.size());
pageInfo.setList(SalaryPageUtil.subList(queryParam.getCurrent(), queryParam.getPageSize(), list));
return pageInfo;
}
/**
* 1、员工的人事状态属性从在职变成非在职,且在【发薪员工】里,则自动进入【待停薪】;
* 2、若维护了最后发薪日大于当前日期,会自动清除该员工的待办数据;
* 3、个税扣缴义务人发生调整的发薪员工自动进入【待停薪】;
*
* 1.【发薪员工】中,员工的人事状态属性从在职变成非在职,则自动进入【待停薪】;
* 2.【定薪员工】中,如果维护了最后发薪日且大于今天的,自动清除待停薪,如果小于等于今天的则自动进入待停薪
*
* @param currentEmployeeId
*/
public void handleSuspendData(Long currentEmployeeId) {
List personnelStatuss = new ArrayList() {{
add("4");
add("5");
add("6");
}};
// 1.定薪员工非在职
if (CollectionUtils.isNotEmpty(personnelStatuss)) {
SalaryArchiveQueryParam queryParam = SalaryArchiveQueryParam.builder()
// 离职
.personnelStatuss(personnelStatuss)
// 定薪列表
.runStatusList(Collections.singletonList(SalaryArchiveStatusEnum.FIXED.getValue()))
.build();
List noNormalList = getSalaryArchiveList(queryParam);
if (CollectionUtils.isNotEmpty(noNormalList)) {
List idList = noNormalList.stream().map(SalaryArchiveListDTO::getId).collect(Collectors.toList());
List> partition = Lists.partition(idList, 999);
partition.forEach(part ->
getSalaryArchiveMapper().updateRunStatusByIdsAndPayEndDate(SalaryArchivePO.builder().ids(part).runStatus(SalaryArchiveStatusEnum.SUSPEND.getValue()).build())
);
}
}
Date today = new Date();
// 2.定薪员工维护了最后发薪日,且大于今天的,自动清除待停薪
getSalaryArchiveMapper().updateFixed(SalaryArchivePO.builder().payEndDate(today).build());
// 3.定薪员工维护了最后发薪日,且小于等于今天的,自动进入待停薪
getSalaryArchiveMapper().updateSuspend(SalaryArchivePO.builder().payEndDate(today).build());
}
/**
* 处理增量数据
*
* @param currentEmployeeId
*/
public void handleChangeData(Long currentEmployeeId) {
// 所有增量人员列表
List taxAgentEmpChangeList = getTaxAgentEmpChangeService(user).listAllByModule(TaxAgentEmpChangeModuleEnum.SALARY_ARCHIVE);
if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) {
return;
}
// 当前可以管辖的人员
if (currentEmployeeId != 1L) {
TaxAgentQueryParam param = TaxAgentQueryParam.builder().build();
param.setFilterType(AuthFilterTypeEnum.ADMIN_DATA);
Collection taxAgentList =getTaxAgentService(user).listAuth(param);
taxAgentEmpChangeList = taxAgentEmpChangeList.stream().filter(f -> taxAgentList.stream().anyMatch(e -> e.getId().equals(f.getTaxAgentId()))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) {
return;
}
}
// 所有档案数据
List salaryArchiveList = getSalaryArchiveMapper().listAll();
// 获取所有可被引用的薪资项目
List salaryItems = salaryItemMapper.getCanAdjustSalaryItems();
Collection salaryItemIds = salaryItems.stream().map(SalaryItemPO::getId).collect(Collectors.toList());
// 获取薪资档案所对应的当前生效的薪资项目数据
List salaryArchiveItemList = getCurrentEffectiveItemList(Lists.newArrayList(), salaryItemIds);
/** 增量处理 start ***/
SalaryArchiveBO.ChangeData changeData = SalaryArchiveBO.buildChangeData(taxAgentEmpChangeList, salaryArchiveList, salaryArchiveItemList, currentEmployeeId);
// 批量修改薪资档案
if (CollectionUtils.isNotEmpty(changeData.getSalaryArchiveUpdateTodoList())) {
salaryArchiveMapper.batchUpdate(changeData.getSalaryArchiveUpdateTodoList());
}
// 批量新增薪资档案
if (CollectionUtils.isNotEmpty(changeData.getSalaryArchiveAddTodoList())) {
salaryArchiveMapper.batchInsert(changeData.getSalaryArchiveAddTodoList());
}
// 落库处理薪资项目
if (CollectionUtils.isNotEmpty(changeData.getSalaryArchiveItemAddTodos())) {
salaryArchiveItemMapper.batchInsert(changeData.getSalaryArchiveItemAddTodos(), user);
}
// 删除增量数据
if (CollectionUtils.isNotEmpty(changeData.getChangeIds())) {
getTaxAgentEmpChangeService(user).deleleByIds(changeData.getChangeIds());
}
/** 增量处理 end ***/
}
@Override
public void deleteSalaryArchive(Collection salaryArchiveIds) {
if (CollectionUtils.isEmpty(salaryArchiveIds)) {
throw new SalaryRunTimeException("薪资档案参数为空!");
}
SalarySysConfPO canDelete = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_ARCHIVE_DELETE);
if (Objects.isNull(canDelete) || StringUtils.equals(canDelete.getConfValue(), "0")) {
throw new SalaryRunTimeException("不允许删除薪资档案,请先开启删除档案规则配置!");
}
List salaryArchiveList = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().ids(salaryArchiveIds).build());
if (CollectionUtils.isEmpty(salaryArchiveList)) {
throw new SalaryRunTimeException("薪资档案不存在");
}
//权限,可操作的档案
salaryArchiveList = getAuthService(user).auth(salaryArchiveList, AuthFilterTypeEnum.ADMIN_DATA, SalaryArchivePO.class);
if (CollectionUtils.isEmpty(salaryArchiveList)) {
throw new SalaryRunTimeException("没有权限删除该薪资档案!");
}
Optional fixedList = salaryArchiveList.stream().filter(archive -> !StringUtils.equals(archive.getRunStatus(), SalaryArchiveStatusEnum.PENDING.getValue())
&& !StringUtils.equals(archive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue())).findFirst();
if (fixedList.isPresent()) {
throw new SalaryRunTimeException("发薪员工、待停薪员工、停薪_来自待停薪,无法删除薪资档案!");
}
List deleteIds = salaryArchiveList.stream().map(SalaryArchivePO::getId).collect(Collectors.toList());
// 删除薪资档案及档案项目
if (CollectionUtils.isNotEmpty(deleteIds)) {
getSalaryArchiveMapper().deleteByIds(deleteIds);
getSalaryArchiveItemMapper().deleteBySalaryArchiveId(deleteIds);
}
}
@Override
public List list(SalaryArchiveQueryParam queryParam) {
//排序配置
OrderRuleVO orderRule = getSalarySysConfService(user).orderRule();
queryParam.setOrderRule(orderRule);
List list = getSalaryArchiveList(queryParam);
return getAuthService(user).auth(list, queryParam.getFilterType(), SalaryArchiveListDTO.class);
}
/**
* 获取薪资档案对应的当前生效的薪资项目
*
* @param salaryArchivesIds
* @return
*/
@Override
public List getCurrentEffectiveItemList(Collection salaryArchivesIds, Collection salaryItemIds) {
if (CollectionUtils.isEmpty(salaryItemIds)) {
return Collections.EMPTY_LIST;
}
List salaryArchiveItems = salaryArchiveItemMapper.getCurrentEffectiveItemList(SalaryArchiveItemQueryParam.builder().salaryArchivesIds(salaryArchivesIds).salaryItemIds(salaryItemIds).effectiveTime(new Date()).build());
return salaryArchiveItems.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getSalaryArchiveId() + "-" + f.getSalaryItemId()))), ArrayList::new));
}
/**
* 获取薪资档案对应的当前生效的个税扣缴义务人
*
* @param salaryArchivesIds
* @return
*/
@Override
public List getCurrentEffectiveTaxAgentList(Collection salaryArchivesIds) {
if (CollectionUtils.isEmpty(salaryArchivesIds)) {
return Collections.EMPTY_LIST;
}
List salaryArchiveTaxAgents = salaryArchiveTaxAgentMapper.listByParam(SalaryArchiveTaxAgentQueryParam.builder().salaryArchivesIds(salaryArchivesIds).effectiveTime(new Date()).build());
return salaryArchiveTaxAgents.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SalaryArchiveTaxAgentPO::getSalaryArchiveId))), ArrayList::new));
}
/**
* 构建薪资档案数据
*
* @param salaryArchives
* @param taxAgentLists
* @param salaryItems
* @param isPage
* @return
*/
@Override
public List