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
*/
@Transactional(rollbackFor = Exception.class)
public void handleSuspendData(Long currentEmployeeId) {
List personnelStatuss = new ArrayList() {{
add("4");
add("5");
add("6");
}};
// 1.定薪员工非在职
if (CollectionUtils.isNotEmpty(personnelStatuss)) {
List noNormalList = getSalaryArchiveMapper().list(SalaryArchiveQueryParam.builder()
// 离职
.personnelStatuss(personnelStatuss)
// 定薪列表
.runStatusList(Collections.singletonList(SalaryArchiveStatusEnum.FIXED.getValue()))
.build());
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());
// new LambdaUpdateChainWrapper<>(salaryArchiveMapper)
// .eq(SalaryArchivePO::getDeleteType, 0)
// .eq(SalaryArchivePO::getTenantKey, currentTenantKey)
// .eq(SalaryArchivePO::getRunStatus, SalaryArchiveStatusEnum.SUSPEND.getValue())
// .isNotNull(SalaryArchivePO::getPayEndDate)
// .gt(SalaryArchivePO::getPayEndDate, today)
// .set(SalaryArchivePO::getRunStatus, SalaryArchiveStatusEnum.FIXED.getValue())
// .update();
// 3.定薪员工维护了最后发薪日,且小于等于今天的,自动进入待停薪
getSalaryArchiveMapper().updateSuspend(SalaryArchivePO.builder().payEndDate(today).build());
// new LambdaUpdateChainWrapper<>(salaryArchiveMapper)
// .eq(SalaryArchivePO::getDeleteType, 0)
// .eq(SalaryArchivePO::getTenantKey, currentTenantKey)
// .eq(SalaryArchivePO::getRunStatus, SalaryArchiveStatusEnum.FIXED.getValue())
// .isNotNull(SalaryArchivePO::getPayEndDate)
// .le(SalaryArchivePO::getPayEndDate, today)
// .set(SalaryArchivePO::getRunStatus, SalaryArchiveStatusEnum.SUSPEND.getValue())
// .update();
}
/**
* 处理增量数据
*
* @param currentEmployeeId
*/
public void handleChangeData(Long currentEmployeeId) {
// 所有增量人员列表
List taxAgentEmpChangeList = getTaxAgentEmpChangeService(user).listAllByModule(TaxAgentEmpChangeModuleEnum.SALARY_ARCHIVE);
if (CollectionUtils.isEmpty(taxAgentEmpChangeList)) {
return;
}
// 当前可以管辖的人员
Collection taxAgentList = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId);
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());
}
// 删除增量数据
if (CollectionUtils.isNotEmpty(changeData.getChangeIds())) {
getTaxAgentEmpChangeService(user).deleleByIds(changeData.getChangeIds());
}
/** 增量处理 end ***/
}
/**
* 设置档案状态
*
* @param taxAgentEmployeesMap
* @param list
* @return
*/
@NotNull
private List setSalaryArchiveStatus(Map> taxAgentEmployeesMap, Collection list) {
list = list.stream().peek(dto -> {
List taxAgentEmployees = taxAgentEmployeesMap.get(dto.getTaxAgentId());
Set employeeIds = SalaryEntityUtil.properties(taxAgentEmployees, TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee::getEmployeeId);
if (employeeIds.contains(dto.getEmployeeId())) {
dto.setArchiveStatus(ArchiveStatusEnum.EFFICIENT.getValue());
} else {
dto.setArchiveStatus(ArchiveStatusEnum.ARCHIVE.getValue());
}
}).collect(Collectors.toList());
return (List) list;
}
@Override
public List list(SalaryArchiveQueryParam queryParam) {
long currentEmployeeId = user.getUID();
//排序配置
OrderRuleVO orderRule = getSalarySysConfService(user).orderRule();
queryParam.setOrderRule(orderRule);
Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId);
if (needAuth) {
Boolean adminEnable = getTaxAgentService(user).isAdminEnable(currentEmployeeId);
//不是管理员看不到数据,返回空
if (!adminEnable) {
return new ArrayList<>();
}
//获取管理的人员范围
List taxAgentEmployeeDTOS = getTaxAgentService(user).listTaxAgentAndEmployee(currentEmployeeId);
Set employeeId = SalaryEntityUtil.properties(taxAgentEmployeeDTOS, TaxAgentEmployeeDTO::getEmployeeId);
Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin(currentEmployeeId);
Set taxAgentIds = SalaryEntityUtil.properties(taxAgentPOS, TaxAgentPO::getId);
//获取所有薪资档案
List list = getSalaryArchiveMapper().list(queryParam);
List finalAllArchive = list.stream().filter(dto -> employeeId.contains(dto.getEmployeeId()) && taxAgentIds.contains(dto.getTaxAgentId())).collect(Collectors.toList());
return finalAllArchive;
} else {
return getSalaryArchiveMapper().list(queryParam);
}
}
/**
* 获取薪资档案对应的当前生效的薪资项目
*
* @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