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;
|
2022-11-16 15:18:43 +08:00
|
|
|
import com.engine.salary.entity.salaryitem.bo.SalaryItemBO;
|
2022-11-16 10:32:05 +08:00
|
|
|
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
|
|
|
|
|
import com.engine.salary.entity.salarysob.dto.SalarySobBackItemAggregateDTO;
|
2022-11-18 14:20:18 +08:00
|
|
|
import com.engine.salary.entity.salarysob.dto.SalarySobBackItemDTO;
|
2022-11-16 15:18:43 +08:00
|
|
|
import com.engine.salary.entity.salarysob.dto.SalarySobBackItemFormDTO;
|
2022-11-18 14:20:18 +08:00
|
|
|
import com.engine.salary.entity.salarysob.param.SalarySobBackItemSaveParam;
|
2022-11-16 10:32:05 +08:00
|
|
|
import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO;
|
2022-11-16 15:18:43 +08:00
|
|
|
import com.engine.salary.enums.SalaryRoundingModeEnum;
|
|
|
|
|
import com.engine.salary.enums.SalaryValueTypeEnum;
|
|
|
|
|
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
|
2022-11-16 10:32:05 +08:00
|
|
|
import com.engine.salary.service.SalaryFormulaService;
|
|
|
|
|
import com.engine.salary.service.SalaryItemService;
|
|
|
|
|
import com.engine.salary.service.SalarySobBackItemService;
|
2022-11-16 15:18:43 +08:00
|
|
|
import com.engine.salary.service.SysSalaryItemService;
|
2022-11-16 10:32:05 +08:00
|
|
|
import com.engine.salary.service.impl.SalaryFormulaServiceImpl;
|
|
|
|
|
import com.engine.salary.service.impl.SalaryItemServiceImpl;
|
|
|
|
|
import com.engine.salary.service.impl.SalarySobBackItemServiceImpl;
|
2022-11-16 15:18:43 +08:00
|
|
|
import com.engine.salary.service.impl.SysSalaryItemServiceImpl;
|
2022-11-16 10:32:05 +08:00
|
|
|
import com.engine.salary.util.SalaryEntityUtil;
|
2022-11-16 15:18:43 +08:00
|
|
|
import com.wbi.util.Util;
|
2022-11-16 10:32:05 +08:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-16 15:18:43 +08:00
|
|
|
private SysSalaryItemService getSysSalaryItemService(User user) {
|
|
|
|
|
return ServiceUtil.getService(SysSalaryItemServiceImpl.class, user);
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-16 10:32:05 +08:00
|
|
|
/**
|
|
|
|
|
* @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)
|
2022-12-14 18:21:25 +08:00
|
|
|
.canDelete(false)
|
|
|
|
|
.backCalcType(Objects.equals(backCalcType,0) ? "issuedItems" :"reissueItems").build();
|
2022-11-16 10:32:05 +08:00
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2022-11-16 15:18:43 +08:00
|
|
|
public SalarySobBackItemFormDTO getForm(Long salarySobBackItemId) {
|
|
|
|
|
// 查询薪资账套的薪资回算项目
|
|
|
|
|
SalarySobBackItemPO salarySobBackItem = getSalarySobBackItemService(user).getById(salarySobBackItemId);
|
|
|
|
|
// 查询薪资项目
|
|
|
|
|
SalaryItemPO salaryItem = getSalaryItemService(user).getById(salarySobBackItem.getSalaryItemId());
|
|
|
|
|
// 查询公式
|
|
|
|
|
ExpressFormula expressFormula = getSalaryFormulaService(user).getExpressFormula(salarySobBackItem.getFormulaId());
|
|
|
|
|
// 转换为dto
|
2022-11-17 16:30:29 +08:00
|
|
|
|
|
|
|
|
HashMap<String, Object> map = new HashMap<>();
|
|
|
|
|
map.put("id",Util.null2String(salaryItem.getId()));
|
|
|
|
|
map.put("name",salaryItem.getName());
|
2022-11-16 15:18:43 +08:00
|
|
|
SalarySobBackItemFormDTO salarySobBackItemFormDTO = SalarySobBackItemFormDTO.builder()
|
|
|
|
|
.id(salarySobBackItem.getId())
|
2022-11-17 16:30:29 +08:00
|
|
|
.salaryItem( Collections.singletonList(map))
|
2022-11-16 15:18:43 +08:00
|
|
|
.dataType(SalaryDataTypeEnum.parseByValue(salaryItem.getDataType()))
|
2022-12-16 11:22:43 +08:00
|
|
|
.roundingMode(SalaryRoundingModeEnum.parseByValue(salarySobBackItem.getRoundingMode()))
|
2022-11-16 15:18:43 +08:00
|
|
|
.pattern(Util.null2String(salarySobBackItem.getPattern()))
|
|
|
|
|
.valueType(SalaryValueTypeEnum.parseByValue(salarySobBackItem.getValueType()))
|
|
|
|
|
.formulaId(salarySobBackItem.getFormulaId())
|
|
|
|
|
.formulaContent(expressFormula == null ? "" : expressFormula.getFormula())
|
|
|
|
|
.taxDeclarationColumn(SalaryItemBO.buildTaxDeclarationColumn(salaryItem.getCode())).build();
|
|
|
|
|
return salarySobBackItemFormDTO;
|
|
|
|
|
}
|
2022-11-18 14:20:18 +08:00
|
|
|
|
|
|
|
|
public List<SalarySobBackItemDTO> save(SalarySobBackItemSaveParam saveParam) {
|
|
|
|
|
return getSalarySobBackItemService(user).save(saveParam);
|
|
|
|
|
}
|
2022-11-16 10:32:05 +08:00
|
|
|
}
|