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

93 lines
4.8 KiB
Java
Raw Normal View History

2022-11-16 10:32:05 +08:00
package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.entity.salaryformula.ExpressFormula;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.dto.SalarySobBackItemAggregateDTO;
import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO;
import com.engine.salary.service.SalaryFormulaService;
import com.engine.salary.service.SalaryItemService;
import com.engine.salary.service.SalarySobBackItemService;
import com.engine.salary.service.impl.SalaryFormulaServiceImpl;
import com.engine.salary.service.impl.SalaryItemServiceImpl;
import com.engine.salary.service.impl.SalarySobBackItemServiceImpl;
import com.engine.salary.util.SalaryEntityUtil;
import weaver.hrm.User;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author Harryxzy
* @date 2022/11/15 15:56
* @description 薪资账套的回算项目
*/
public class SalarySobBackItemWrapper extends Service {
private SalarySobBackItemService getSalarySobBackItemService(User user) {
return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user);
}
private SalaryItemService getSalaryItemService(User user) {
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
}
private SalaryFormulaService getSalaryFormulaService(User user) {
return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user);
}
/**
* @description 查看详情
* @return SalarySobBackItemAggregateDTO
* @author Harryxzy
* @date 2022/11/15 15:59
*/
public SalarySobBackItemAggregateDTO getAggregate(Long salarySobId) {
List<SalarySobBackItemPO> salarySobBackItemPOS = getSalarySobBackItemService(user).listBySalarySobId(salarySobId);
// 查询薪资项目
Set<Long> salaryItemIds = SalaryEntityUtil.properties(salarySobBackItemPOS, SalarySobBackItemPO::getSalaryItemId);
List<SalaryItemPO> salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds);
Map<Long, SalaryItemPO> salaryItemMap = SalaryEntityUtil.convert2Map(salaryItemPOS, SalaryItemPO::getId);
// 查询公式详情
Set<Long> formulaIds = salarySobBackItemPOS.stream()
.map(SalarySobBackItemPO::getFormulaId)
.filter(formulaId -> !Objects.equals(formulaId, 0L))
.collect(Collectors.toSet());
List<ExpressFormula> expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds);
Map<Long, String> expressFormulaContentMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId, ExpressFormula::getFormula);
// 已发项目设置
List<SalarySobBackItemAggregateDTO.SalarySobBackItemDTO> issuedItems = convert2DTO(salarySobBackItemPOS, salaryItemMap,
expressFormulaContentMap, 0);
// 补发项目设置
List<SalarySobBackItemAggregateDTO.SalarySobBackItemDTO> reissueItems = convert2DTO(salarySobBackItemPOS, salaryItemMap,
expressFormulaContentMap, 1);
return SalarySobBackItemAggregateDTO.builder()
.salarySobId(salarySobId)
.issuedItems(issuedItems)
.reissueItems(reissueItems).build();
}
private List<SalarySobBackItemAggregateDTO.SalarySobBackItemDTO> convert2DTO(List<SalarySobBackItemPO> salarySobBackItemPOS,
Map<Long, SalaryItemPO> salaryItemMap,
Map<Long, String> expressFormulaContentMap, Integer backCalcType) {
return salarySobBackItemPOS.stream()
.filter(salarySobBackItemPO -> Objects.equals(salarySobBackItemPO.getBackCalcType(), backCalcType))
.map(salarySobBackItemPO -> {
SalaryItemPO salaryItemPO = salaryItemMap.get(salarySobBackItemPO.getSalaryItemId());
return SalarySobBackItemAggregateDTO.SalarySobBackItemDTO.builder()
.id(salarySobBackItemPO.getId())
.name(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getName).orElse(""))
.salaryItemId(salarySobBackItemPO.getSalaryItemId())
.formulaId(salarySobBackItemPO.getFormulaId())
.formulaContent(expressFormulaContentMap.getOrDefault(salarySobBackItemPO.getFormulaId(), "输入"))
.dataType(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getDataType).orElse(""))
.sortedIndex(0)
.canEdit(true)
.canDelete(false).build();
}).collect(Collectors.toList());
}
}