weaver-hrm-salary/src/com/engine/salary/wrapper/SalarySobItemWrapper.java

181 lines
7.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.annotation.SalaryFormulaVar;
import com.engine.salary.entity.salaryformula.ExpressFormula;
import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO;
import com.engine.salary.entity.salaryitem.bo.SalaryItemBO;
import com.engine.salary.entity.salaryitem.dto.SalaryItemSobListDTO;
import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO;
import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam;
import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.auth.AuthFilterTypeEnum;
import com.engine.salary.service.*;
import com.engine.salary.service.impl.*;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils;
import weaver.hrm.User;
import java.lang.reflect.Field;
import java.util.*;
import java.util.stream.Collectors;
/**
* 薪资账套的薪资项目
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
public class SalarySobItemWrapper extends Service {
private SalarySobItemService getSalarySobItemService(User user) {
return ServiceUtil.getService(SalarySobItemServiceImpl.class, user);
}
private SalarySobItemGroupService getSalarySobItemGroupService(User user) {
return ServiceUtil.getService(SalarySobItemGroupServiceImpl.class, user);
}
private TaxAgentService getTaxAgentService(User user) {
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
}
private SalaryItemService getSalaryItemService(User user) {
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
}
private SalaryFormulaService getSalaryFormulaService(User user) {
return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user);
}
private SysSalaryItemService getSysSalaryItemService(User user) {
return ServiceUtil.getService(SysSalaryItemServiceImpl.class, user);
}
/**
* 薪资账套可选薪资项目列表
*
* @param queryParam 列表查询条件
* @return
*/
public PageInfo<SalaryItemSobListDTO> listPage4SalaryItem(SalaryItemSearchParam queryParam) {
Integer searchPageSize = queryParam.getPageSize();
Integer searchCurrent = queryParam.getCurrent();
List<SalaryItemPO> salaryItemList = getSalaryItemService(user).listByParam(queryParam);
TaxAgentQueryParam param = TaxAgentQueryParam.builder().build();
param.setFilterType(AuthFilterTypeEnum.QUERY_DATA);
Set<Long> taxAgentIds = getTaxAgentService(user).listAuth(param).stream().map(TaxAgentPO::getId).collect(Collectors.toSet());
salaryItemList = salaryItemList.stream()
.filter(po -> getSalaryItemService(user).filterInRange(taxAgentIds, po))
.collect(Collectors.toList());
// 薪资项目排序薪资项目放在前面首先按照设置的排序没有设置按照id倒序系统薪资项目放在最后档案字段放在后面
salaryItemList = salaryItemList.stream()
.sorted(new Comparator<SalaryItemPO>() {
@Override
public int compare(SalaryItemPO o1, SalaryItemPO o2) {
return Integer.compare(o1.getUseInEmployeeSalary(),o2.getUseInEmployeeSalary());
}
})
.collect(Collectors.toList());
//最终返回的分页对象
PageInfo<SalaryItemSobListDTO> dtoPage = new PageInfo<>(SalaryItemSobListDTO.class);
dtoPage.setPageSize(searchPageSize);
dtoPage.setPageNum(searchCurrent);
dtoPage.setTotal(salaryItemList.size());
List<SalaryItemPO> list = SalaryPageUtil.buildPage(searchCurrent, searchPageSize, salaryItemList).getList();
if (CollectionUtils.isNotEmpty(list)) {
// 查询公式
Set<Long> formulaIds = SalaryEntityUtil.properties(list, SalaryItemPO::getFormulaId);
List<ExpressFormula> expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds);
// 查询系统薪资项目
Set<Long> sysSalaryItemIds = SalaryEntityUtil.properties(list, SalaryItemPO::getSysSalaryItemId);
List<SysSalaryItemPO> sysSalaryItemPOS = getSysSalaryItemService(user).listByIds(sysSalaryItemIds);
// 转换成薪资项目列表dto
dtoPage.setList(SalaryItemBO.convert2itemSobListDTO(list, expressFormulas, sysSalaryItemPOS));
}
return dtoPage;
}
/**
* 获取薪资账套的薪资项目详情
*
* @param salarySobItemGroupId 薪资账套的薪资项目的id
* @return
*/
public SalarySobItemGroupPO getGroupForm(Long salarySobItemGroupId) {
return getSalarySobItemGroupService(user).getById(salarySobItemGroupId);
}
/**
* 获取薪资账套的薪资项目详情
*
* @param salarySobId 薪资账套的id
* @return
*/
public SalarySobItemAggregateDTO getForm(Long salarySobId) {
return getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId);
}
/**
* 保存
*
* @param saveParam 保存参数
*/
public void save(SalarySobItemSaveParam saveParam) {
getSalarySobItemService(user).save(saveParam);
}
/**
* 基础信息浏览按钮(下拉框)
*
* @return
*/
public Collection<Map<String, String>> empFieldList() {
Field[] declaredFields = SalaryFormulaEmployeeDTO.class.getDeclaredFields();
Map<String, String> empFieldMap = Maps.newHashMapWithExpectedSize(declaredFields.length);
List<Map<String, String>> list = new ArrayList();
for (Field declaredField : declaredFields) {
Map<String, String> item = new HashMap<>();
if (!declaredField.isAnnotationPresent(SalaryFormulaVar.class)) {
continue;
}
SalaryFormulaVar annotation = declaredField.getAnnotation(SalaryFormulaVar.class);
empFieldMap.put(declaredField.getName(), SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.defaultLabel()));
item.put("name", SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.defaultLabel()));
item.put("id", declaredField.getName());
list.add(item);
}
return list;
}
/**
* 薪资项目的详情
*/
public SalarySobItemFormDTO getSalaryItemForm(SalarySobItemPO param) {
return getSalarySobItemService(user).getSalaryItemForm(param);
}
}