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());
// 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;
}
// 当前可以管辖的人员
Collection taxAgentList = new ArrayList<>();
if (currentEmployeeId != 1L) {
taxAgentList = getTaxAgentService(user).listAllTaxAgents(currentEmployeeId);
Collection finalTaxAgentList = taxAgentList;
taxAgentEmpChangeList = taxAgentEmpChangeList.stream().filter(f -> finalTaxAgentList.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 ***/
}
@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());
//查询当前登录人员管理的个税扣缴义务人
List canDeleteTaxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin((long) user.getUID())
.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
boolean err = salaryArchiveList.stream().anyMatch(po -> !canDeleteTaxAgentIds.contains(po.getTaxAgentId()));
if(CollectionUtils.isEmpty(salaryArchiveList) || err){
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) {
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