weaver-hrm-salary/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java

874 lines
53 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.entity.salaryacct.bo;
import cn.hutool.core.util.ObjectUtil;
import com.engine.salary.annotation.SalaryFormulaVar;
import com.engine.salary.component.WeaTableColumnGroup;
import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeInfoDTO;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO;
import com.engine.salary.entity.salaryacct.param.SalaryAcctResultSaveParam;
import com.engine.salary.entity.salaryacct.po.*;
import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.dto.SalarySobEmpFieldDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO;
import com.engine.salary.entity.salarysob.po.*;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.SalaryValueTypeEnum;
import com.engine.salary.enums.UserStatusEnum;
import com.engine.salary.enums.salaryaccounting.LockStatusEnum;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.page.SalaryPageUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.BeanUtils;
import weaver.general.Util;
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 SalaryAcctResultBO {
/**
* 数据类型的后缀标识
* 为了展示千分位,薪资核算结果列表、线上线下对比结果列表需要返回给前端列表字段的数据类型,字段索引+后缀标识
*/
private static final String DATA_TYPE_SUFFIX = "_type";
// /**
// * 构建薪资核算结果列表的表头(线下对比)
// *
// * @param salarySobItemAggregateDTO
// * @return
// */
// public static List<WeaTableColumn> buildTableColumns4ComparisonResult(SalarySobItemAggregateDTO salarySobItemAggregateDTO, Set<Long> excludeSalaryItemIds) {
// List<WeaTableColumn> columns = Lists.newArrayList();
// // 员工信息字段
// for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) {
// columns.add(new WeaTableColumn("150", salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId()));
// }
// // 薪资项目分组下的薪资项目
// for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) {
// if (CollectionUtils.isEmpty(salarySobItemGroupDTO.getItems())) {
// continue;
// }
// for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) {
// if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
// continue;
// }
// columns.add(new WeaTableColumn("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId()));
// }
// }
// // 没有分类的薪资项目
// for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) {
// if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
// continue;
// }
// columns.add(new WeaTableColumn("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId()));
// }
// return columns;
// }
/**
* 构建薪资核算结果列表的表头(线下对比)
*
* @param salarySobItemAggregateDTO
* @return
*/
public static List<WeaTableColumnGroup> buildTableColumns4ComparisonResult(SalarySobItemAggregateDTO salarySobItemAggregateDTO, Set<Long> excludeSalaryItemIds) {
List<WeaTableColumnGroup> columns = Lists.newArrayList();
// 员工信息字段
for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) {
columns.add(new WeaTableColumnGroup("150", salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId(), salarySobEmpFieldDTO.getFieldId()));
}
// 薪资项目分组下的薪资项目
for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) {
if (CollectionUtils.isEmpty(salarySobItemGroupDTO.getItems())) {
continue;
}
List<WeaTableColumnGroup> childrenColumns = Lists.newArrayList();
for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) {
if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
continue;
}
childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId()));
}
WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup("150", salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns);
columns.add(weaTableColumnWapper);
}
// 没有分类的薪资项目
for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) {
if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
continue;
}
columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId()));
}
return columns;
}
/**
* 构建薪资核算结果列表的表头(线下对比)
*
* @param salarySobItemAggregateDTO
* @return
*/
public static List<WeaTableColumnGroup> buildTableColumns4ComparisonResultByGroup(SalarySobItemAggregateDTO salarySobItemAggregateDTO, Set<Long> excludeSalaryItemIds) {
List<WeaTableColumnGroup> columns = Lists.newArrayList();
// 员工信息字段
for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) {
columns.add(new WeaTableColumnGroup("150", salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId(), salarySobEmpFieldDTO.getFieldId()));
}
// 薪资项目分组下的薪资项目
for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) {
if (CollectionUtils.isEmpty(salarySobItemGroupDTO.getItems())) {
continue;
}
List<WeaTableColumnGroup> childrenColumns = Lists.newArrayList();
for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) {
if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
continue;
}
childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId()));
}
WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup("150", salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns);
columns.add(weaTableColumnWapper);
}
// 没有分类的薪资项目
for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) {
if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
continue;
}
columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId()));
}
return columns;
}
/**
* 构建薪资核算结果列表的表头
*
* @param salarySobItemAggregateDTO
* @return
*/
public static List<WeaTableColumnGroup> buildTableColumns(SalarySobItemAggregateDTO salarySobItemAggregateDTO, List<Long> lockSalaryItemIds) {
List<WeaTableColumnGroup> columns = Lists.newArrayList();
// 员工信息字段
for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) {
columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobEmpFieldDTO.getFieldName(), 0), salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId()));
}
// 薪资项目分组下的薪资项目
for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) {
if (CollectionUtils.isEmpty(salarySobItemGroupDTO.getItems())) {
continue;
}
List<WeaTableColumnGroup> childrenColumns = Lists.newArrayList();
for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) {
if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
childrenColumns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName(), salarySobItemDTO.getWidth()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getDefaultLabel(), salarySobItemDTO.getPattern(), salarySobItemDTO.getDataType()));
} else {
childrenColumns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName(), salarySobItemDTO.getWidth()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getDefaultLabel(), salarySobItemDTO.getPattern(), salarySobItemDTO.getDataType()));
}
}
WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemGroupDTO.getName(), 0), salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns);
columns.add(weaTableColumnWapper);
}
// 没有分类的薪资项目
for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) {
if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName(), salarySobItemDTO.getWidth()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getDefaultLabel(), salarySobItemDTO.getPattern(), salarySobItemDTO.getDataType()));
} else {
columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName(), salarySobItemDTO.getWidth()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getDefaultLabel(), salarySobItemDTO.getPattern(), salarySobItemDTO.getDataType()));
}
}
// 回算的薪资项目
for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getBackCalcItems()) {
if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName(), 0), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getDefaultLabel(), salarySobItemDTO.getPattern(), salarySobItemDTO.getDataType()));
} else {
columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName(), 0), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getDefaultLabel(), salarySobItemDTO.getPattern(), salarySobItemDTO.getDataType()));
}
}
return columns;
}
/**
* 构建核算结果表头-供报表使用
*
* @param salarySobItemAggregateDTO
* @return
*/
public static Map<String, Object> buildColumns(SalarySobItemAggregateDTO salarySobItemAggregateDTO) {
Map<String, Object> map = new HashMap<>();
// 员工信息字段
for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) {
map.put(salarySobEmpFieldDTO.getFieldId(), salarySobEmpFieldDTO.getFieldName());
}
// 薪资项目分组下的薪资项目
// 薪资项目分组下的薪资项目
for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) {
if (CollectionUtils.isEmpty(salarySobItemGroupDTO.getItems())) {
continue;
}
for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) {
map.put(salarySobItemDTO.getSalaryItemId() + "", salarySobItemDTO.getName());
}
}
// 没有分类的薪资项目
for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) {
map.put(salarySobItemDTO.getSalaryItemId() + "", salarySobItemDTO.getName());
}
return map;
}
/**
* 转船成薪资核算结果列表的表格数据
*
* @param salaryItems
* @param salarySobEmpFields
* @param simpleEmployees
* @param salaryAcctEmployees
* @param salaryAccountingResults
* @param taxAgents
* @param consolidatedTaxSalaryAcctEmpIds
* @param customBackCalcParameters
* @param dynamicEmpInfo
* @return
*/
public static List<Map<String, Object>> buildTableData(List<SalaryItemPO> salaryItems,
List<SalarySobEmpFieldPO> salarySobEmpFields,
List<DataCollectionEmployee> simpleEmployees,
List<SalaryAcctEmployeePO> salaryAcctEmployees,
List<SalaryAcctResultPO> salaryAccountingResults,
List<TaxAgentPO> taxAgents,
Set<Long> consolidatedTaxSalaryAcctEmpIds,
Map<Long, String> customParameters,
Map<Long, String> customBackCalcParameters,
boolean dynamicEmpInfo) {
if (CollectionUtils.isEmpty(salaryAcctEmployees)) {
return Collections.emptyList();
}
SalaryI18nUtil.i18nList(salaryAcctEmployees);
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(simpleEmployees, DataCollectionEmployee::getEmployeeId);
Map<Long, List<SalaryAcctResultPO>> acctResultMap = SalaryEntityUtil.group2Map(salaryAccountingResults, SalaryAcctResultPO::getEmployeeId);
Map<Long, String> taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName);
return salaryAcctEmployees.stream().map(e -> {
Map<Long, Object> resultValueMap = SalaryEntityUtil.convert2Map(acctResultMap.getOrDefault(e.getEmployeeId(), Collections.emptyList()),
SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue);
// 薪资项目的值
Map<String, Object> map = SalaryEntityUtil.convert2Map(salaryItems, o -> "" + o.getId(), o -> resultValueMap.getOrDefault(o.getId(), StringUtils.EMPTY));
// 薪资项目的字段类型(前端依据这个判断是否需要展示千分位)
Map<String, String> dataTypeMap = SalaryEntityUtil.convert2Map(salaryItems, salaryItemPO -> salaryItemPO.getId() + DATA_TYPE_SUFFIX, SalaryItemPO::getDataType);
map.putAll(dataTypeMap);
// 人员信息字段的值
Map<String, String> fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(e.getEmployeeId()), e, true);
for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) {
// 员工信息字段的字段类型
if (dynamicEmpInfo) {
map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode()));
} else {
if ("departmentName".equals(salarySobEmpField.getFieldCode())) {
map.put("departmentName", e.getDepartmentName());
} else if ("departmentId".equals(salarySobEmpField.getFieldCode())) {
map.put("departmentId", e.getDepartmentId());
} else if ("subcompanyName".equals(salarySobEmpField.getFieldCode())) {
map.put("subcompanyName", e.getSubcompanyName());
} else if ("jobcall".equals(salarySobEmpField.getFieldCode())) {
map.put("jobcall", e.getJobcall());
} else if ("jobcallId".equals(salarySobEmpField.getFieldCode())) {
map.put("jobcallId", e.getJobcallId());
} else if ("jobtitleName".equals(salarySobEmpField.getFieldCode())) {
map.put("jobtitleName", e.getJobtitleName());
} else if ("jobtitleId".equals(salarySobEmpField.getFieldCode())) {
map.put("jobtitleId", e.getJobtitleId());
} else if ("status".equals(salarySobEmpField.getFieldCode())) {
map.put("status", e.getStatus());
} else if ("statusName".equals(salarySobEmpField.getFieldCode())) {
map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(Util.null2s(e.getStatus(),"1"))));
} else {
map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode()));
}
}
map.put(salarySobEmpField.getFieldCode() + DATA_TYPE_SUFFIX, SalaryDataTypeEnum.STRING.getValue());
}
// 主键id
map.put("id", e.getId());
//锁定状态
map.put("lockStatus", LockStatusEnum.getByValue(e.getLockStatus()).getDefaultLabel());
//人员id
map.put("employeeId", e.getEmployeeId());
// 个税扣缴义务人
String taxAgentName = taxAgentNameMap.getOrDefault(e.getTaxAgentId(), StringUtils.EMPTY);
map.put("taxAgentName", taxAgentName);
// 是否属于"合并计税"的标记
map.put("consolidatedTaxation", StringUtils.isNotEmpty(taxAgentName) && consolidatedTaxSalaryAcctEmpIds.contains(e.getId()));
// 个税扣缴义务人的字段类型
map.put("taxAgentName" + DATA_TYPE_SUFFIX, SalaryDataTypeEnum.STRING.getValue());
// 公式详情
customParameters.putAll(customBackCalcParameters);
map.put("customParameters", customParameters);
return map;
}).collect(Collectors.toList());
}
/**
* 转转成薪资核算线下对比结果
*
* @param salaryItems
* @param salarySobEmpFields
* @param simpleEmployees
* @param salaryAcctEmployees
* @param salaryAcctResultPOS
* @param excelAcctResultPOS
* @param taxAgents
* @param consolidatedTaxSalaryAcctEmpIds
* @return
*/
public static List<Map<String, Object>> buildComparisonTableData(List<SalaryItemPO> salaryItems,
List<SalarySobEmpFieldPO> salarySobEmpFields,
List<DataCollectionEmployee> simpleEmployees,
List<SalaryAcctEmployeePO> salaryAcctEmployees,
List<SalaryAcctResultPO> salaryAcctResultPOS,
List<ExcelAcctResultPO> excelAcctResultPOS,
List<TaxAgentPO> taxAgents,
Map<Long, String> customParameters,
Set<Long> consolidatedTaxSalaryAcctEmpIds,
Set<Long> includeSalaryItemIds,
boolean dynamicEmpInfo) {
if (CollectionUtils.isEmpty(simpleEmployees)) {
return Collections.emptyList();
}
Map<Long, List<ExcelAcctResultPO>> excelResultMap = SalaryEntityUtil.group2Map(excelAcctResultPOS, ExcelAcctResultPO::getSalaryAcctEmpId);
Map<Long, List<SalaryAcctResultPO>> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryAcctEmpId);
Map<Long, String> taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName);
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(simpleEmployees, DataCollectionEmployee::getEmployeeId);
List<Map<String, Object>> resultList = Lists.newArrayListWithExpectedSize(salaryAcctEmployees.size());
for (SalaryAcctEmployeePO salaryAcctEmployee : salaryAcctEmployees) {
// 线下值和系统值之间是否存在差异
boolean different = false;
Map<String, Object> map = Maps.newHashMap();
// 员工信息字段的值
Map<String, String> fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(salaryAcctEmployee.getEmployeeId()), salaryAcctEmployee, false);
for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) {
// 员工信息字段的字段类型
if (dynamicEmpInfo) {
map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode()));
} else {
if ("departmentName".equals(salarySobEmpField.getFieldCode())) {
map.put("departmentName", salaryAcctEmployee.getDepartmentName());
} else if ("departmentId".equals(salarySobEmpField.getFieldCode())) {
map.put("departmentId", salaryAcctEmployee.getDepartmentId());
} else if ("subcompanyName".equals(salarySobEmpField.getFieldCode())) {
map.put("subcompanyName", salaryAcctEmployee.getSubcompanyName());
} else if ("jobcall".equals(salarySobEmpField.getFieldCode())) {
map.put("jobcall", salaryAcctEmployee.getJobcall());
} else if ("jobcallId".equals(salarySobEmpField.getFieldCode())) {
map.put("jobcallId", salaryAcctEmployee.getJobcallId());
} else if ("jobtitleName".equals(salarySobEmpField.getFieldCode())) {
map.put("jobtitleName", salaryAcctEmployee.getJobtitleName());
} else if ("jobtitleId".equals(salarySobEmpField.getFieldCode())) {
map.put("jobtitleId", salaryAcctEmployee.getJobtitleId());
} else if ("status".equals(salarySobEmpField.getFieldCode())) {
map.put("status", salaryAcctEmployee.getStatus());
} else if ("statusName".equals(salarySobEmpField.getFieldCode())) {
map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(Util.null2s(salaryAcctEmployee.getStatus(), "1"))));
} else {
map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode()));
}
}
map.put(salarySobEmpField.getFieldCode() + DATA_TYPE_SUFFIX, SalaryDataTypeEnum.STRING.getValue());
}
// 系统值
Map<Long, String> acctResultValueMap = SalaryEntityUtil.convert2Map(acctResultMap.getOrDefault(salaryAcctEmployee.getId(), Collections.emptyList()),
SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue);
// 线下值
Map<Long, String> excelResultValueMap = SalaryEntityUtil.convert2Map(excelResultMap.getOrDefault(salaryAcctEmployee.getId(), Collections.emptyList()),
ExcelAcctResultPO::getSalaryItemId, ExcelAcctResultPO::getResultValue);
// 薪资项目字段的值
for (SalaryItemPO salaryItem : salaryItems) {
Map<String, Object> temp = Maps.newHashMap();
// 系统值
String acctResultValue = acctResultValueMap.get(salaryItem.getId());
// 线下值
String excelResultValue = excelResultValueMap.get(salaryItem.getId());
temp.put("acctResultValue", acctResultValue);
temp.put("excelResultValue", excelResultValue);
map.put(String.valueOf(salaryItem.getId()), temp);
// 薪资项目字段的字段类型
map.put(salaryItem.getId() + DATA_TYPE_SUFFIX, salaryItem.getDataType());
SalaryDataTypeEnum dataTypeEnum = SalaryDataTypeEnum.parseByValue(salaryItem.getDataType());
if (dataTypeEnum == SalaryDataTypeEnum.STRING) {
if (!StringUtils.equals(acctResultValue, excelResultValue)) {
different = true;
includeSalaryItemIds.add(salaryItem.getId());
}
} else {
if (SalaryEntityUtil.empty2Zero(acctResultValue).compareTo(SalaryEntityUtil.empty2Zero(excelResultValue)) != 0) {
different = true;
includeSalaryItemIds.add(salaryItem.getId());
}
}
}
// 主键id
map.put("id", salaryAcctEmployee.getId());
// 个税扣缴义务人
String taxAgentName = taxAgentNameMap.getOrDefault(salaryAcctEmployee.getTaxAgentId(), StringUtils.EMPTY);
map.put("taxAgentName", taxAgentName);
// 个税扣缴义务人的字段类型
map.put("taxAgentName" + DATA_TYPE_SUFFIX, SalaryDataTypeEnum.STRING.getValue());
// 是否属于"合并计税"的标记
map.put("consolidatedTaxation", StringUtils.isNotEmpty(taxAgentName) && consolidatedTaxSalaryAcctEmpIds.contains(salaryAcctEmployee.getId()));
// 薪资项目的公式详情(前端需要展示)
map.put("customParameters", customParameters);
// 是否存在差异的标记
map.put("different", different);
resultList.add(map);
}
return resultList;
}
/**
* 转换成薪资核算结果详情dto
*
* @param simpleEmployee
* @param taxAgentPO
* @param salaryAcctEmployee
* @param salarySobEmpFields
* @param salarySobItemPOS
* @param salaryItems
* @param salaryAcctResults
* @return
*/
public static SalaryAcctResultDetailDTO convert2DetailDTO(DataCollectionEmployee simpleEmployee,
TaxAgentPO taxAgentPO,
SalaryAcctEmployeePO salaryAcctEmployee,
List<SalarySobEmpFieldPO> salarySobEmpFields,
List<SalarySobItemGroupPO> salarySobItemGroupPOS,
List<SalarySobItemPO> salarySobItemPOS,
List<SalaryItemPO> salaryItems,
List<SalaryAcctResultPO> salaryAcctResults,
List<SalarySobBackItemPO> salarySobBackItemPOS,
List<SalaryItemPO> salaryBackItemPOS,
Map<Long, String> salaryBackItemFormula,
Map<String, SalaryAcctResultListColumnDTO> formulaContentMap,
List<Long> lockItems) {
// 员工信息字段
Map<String, String> employeeFieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(simpleEmployee, salaryAcctEmployee, false);
// 个税扣缴义务人
employeeFieldValueMap.put("taxAgentName", Optional.ofNullable(taxAgentPO).map(TaxAgentPO::getName).orElse(StringUtils.EMPTY));
Map<String, String> employeeFieldNameMap = buildEmployeeFieldName();
List<String> canEditKeys = Arrays.asList("subcompany", "department", "jobtitle", "jobcall");
List<SalaryAcctEmployeeInfoDTO> employeeInfos = salarySobEmpFields.stream()
.map(e -> {
String fieldCode = e.getFieldCode();
String fieldType = employeeFieldNameMap.getOrDefault(fieldCode + "_type", StringUtils.EMPTY);
SalaryAcctEmployeeInfoDTO dto = SalaryAcctEmployeeInfoDTO.builder()
.fieldCode(fieldCode)
.fieldName(employeeFieldNameMap.getOrDefault(fieldCode, StringUtils.EMPTY))
.fieldValue(employeeFieldValueMap.getOrDefault(fieldCode, StringUtils.EMPTY))
.fieldType(fieldType)
.canEdit(fieldType.contains("Browser") ? true : false)
.build();
String codeKey = fieldCode.replace("Id", "").replace("Name", "");
if (canEditKeys.contains(codeKey)) {
// 前端用于回写浏览框
Map<String, String> fieldValueMap = new HashMap<>();
fieldValueMap.put("id", employeeFieldValueMap.getOrDefault(codeKey + "Id", StringUtils.EMPTY));
fieldValueMap.put("name", employeeFieldValueMap.getOrDefault(codeKey + "Name", StringUtils.EMPTY));
dto.setFieldValue(fieldValueMap);
}
return dto;
})
.collect(Collectors.toList());
List<String> needRemoveFieldNames = new ArrayList<String>();
// 过滤出是浏览框类型的且人员信息中同时存在名称和id的字段
employeeInfos.stream()
.filter(e -> e.getFieldType().contains("Browser"))
.map(e -> SalaryAcctEmployeeInfoDTO.builder().fieldName(e.getFieldName().replace("ID","")).build())
.collect(Collectors.groupingBy(SalaryAcctEmployeeInfoDTO::getFieldName))
.forEach((k,v) -> {
if (v.size() > 1) {
needRemoveFieldNames.add(k+"ID");
}
});
// 移除字段
employeeInfos = employeeInfos.stream().filter(info -> !needRemoveFieldNames.contains(info.getFieldName())).collect(Collectors.toList());
// 薪资项目的值
Map<Long, String> resultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResults, SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue);
Map<Long, SalaryItemPO> salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId);
Map<Long, SalaryItemPO> salaryBackItemMap = SalaryEntityUtil.convert2Map(salaryBackItemPOS, SalaryItemPO::getId);
Map<Long, List<SalarySobItemPO>> salarySobItemPOMap = SalaryEntityUtil.group2Map(salarySobItemPOS, SalarySobItemPO::getSalarySobItemGroupId);
// 对分组进行排序
salarySobItemGroupPOS = sortGroup(salarySobItemGroupPOS);
// 对分组内薪资项目排序
sortItem(salarySobItemPOMap);
// 根据账套分组封装薪资项目的值
List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemByGroupDTO> itemsByGroup = new ArrayList<>();
for (SalarySobItemGroupPO groupPO : salarySobItemGroupPOS) {
List<SalarySobItemPO> groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(), Collections.emptyList());
if (CollectionUtils.isNotEmpty(groupItems)) {
List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO> items = groupItems.stream()
.map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap, formulaContentMap, lockItems))
.collect(Collectors.toList());
itemsByGroup.add(SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemByGroupDTO.builder()
.salarySobItemGroupId(groupPO.getId())
.salarySobItemGroupName(groupPO.getName())
.salaryItems(items)
.sortedIndex(groupPO.getSortedIndex()).build());
}
}
// 未分类
List<SalarySobItemPO> noGroupItems = salarySobItemPOMap.getOrDefault(0L, Collections.emptyList());
if (CollectionUtils.isNotEmpty(noGroupItems)) {
List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO> items = noGroupItems.stream()
.map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap, formulaContentMap, lockItems))
.collect(Collectors.toList());
itemsByGroup.add(SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemByGroupDTO.builder()
.salarySobItemGroupId(0L)
.salarySobItemGroupName("未分类")
.salaryItems(items)
.sortedIndex(itemsByGroup.size()).build());
}
// // 公式项的值不根据salaryItemPO的valueType判断是因为薪资项目的valueType属性改变后并不会同步更新薪资账套中的薪资项目的formulaId字段
// List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO> formulaItems = salarySobItemPOS.stream()
// .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() > 0)
// .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap))
// .collect(Collectors.toList());
// // 输入/导入项目的值
// List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO> inputItems = salarySobItemPOS.stream()
// .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() <= 0)
// .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap))
// .collect(Collectors.toList());
// // TODO 临时处理,后续删除,将已发补发加入输入、导入
// formulaItems.addAll(salarySobBackItemPOS.stream()
// .map(salarySobBackItemPO -> backItemConvert2SalaryAcctResultDetailItemDTO(salarySobBackItemPO, salaryBackItemMap.get(salarySobBackItemPO.getSalaryItemId()), resultValueMap, salaryBackItemFormula))
// .collect(Collectors.toList()));
// 已发/补发项目的值
List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO> issuedAndReissueItems = salarySobBackItemPOS.stream()
.map(salarySobBackItemPO -> backItemConvert2SalaryAcctResultDetailItemDTO(salarySobBackItemPO, salaryBackItemMap.get(salarySobBackItemPO.getSalaryItemId()), resultValueMap, salaryBackItemFormula))
.collect(Collectors.toList());
return SalaryAcctResultDetailDTO.builder()
.id(salaryAcctEmployee.getId())
.employeeId(salaryAcctEmployee.getEmployeeId())
.employeeInfos(employeeInfos)
// .formulaItems(formulaItems)
// .inputItems(inputItems)
.itemsByGroup(itemsByGroup)
.issuedAndReissueItems(issuedAndReissueItems)
.build();
}
public static List<SalarySobItemGroupPO> sortGroup(List<SalarySobItemGroupPO> salarySobItemGroupPOS) {
if (CollectionUtils.isEmpty(salarySobItemGroupPOS)) {
return Collections.emptyList();
}
return salarySobItemGroupPOS.stream().sorted(Comparator.comparingInt(SalarySobItemGroupPO::getSortedIndex)).collect(Collectors.toList());
}
/**
* 薪资账套的薪资项目按照sortedIndex排序
*/
public static void sortItem(Map<Long, List<SalarySobItemPO>> salarySobItemPOMap) {
for (Map.Entry<Long, List<SalarySobItemPO>> entry : salarySobItemPOMap.entrySet()) {
List<SalarySobItemPO> items = entry.getValue();
if (CollectionUtils.isNotEmpty(items)) {
List<SalarySobItemPO> sortedValue = items.stream().sorted(Comparator.comparingInt(SalarySobItemPO::getSortedIndex)).collect(Collectors.toList());
salarySobItemPOMap.put(entry.getKey(), sortedValue);
}
}
}
/**
* 转换成薪资核算结果详情dto
*
* @param salarySobItemPO
* @param salaryItemPO
* @param resultValueMap
* @return
*/
private static SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO convert2SalaryAcctResultDetailItemDTO(SalarySobItemPO salarySobItemPO,
SalaryItemPO salaryItemPO,
Map<Long, String> resultValueMap,
Map<String, SalaryAcctResultListColumnDTO> formulaContentMap,
List<Long> lockItems) {
SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(Optional.ofNullable(salarySobItemPO).map(SalarySobItemPO::getValueType).orElse(1));
String itemFormulaContent;
if (Objects.equals(salaryValueTypeEnum.getValue(), SalaryValueTypeEnum.FORMULA.getValue())) {
itemFormulaContent = Optional.ofNullable(formulaContentMap.get(salarySobItemPO.getSalaryItemId().toString())).map(SalaryAcctResultListColumnDTO::getFormulaContent).orElse("");
} else {
itemFormulaContent = salaryValueTypeEnum == null ? "" : salaryValueTypeEnum.getDefaultLabel();
}
// 薪资项目的数据类型
return SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO.builder()
.salaryItemId(salarySobItemPO.getSalaryItemId())
.salaryItemName(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY))
.resultValue(resultValueMap.getOrDefault(salarySobItemPO.getSalaryItemId(), StringUtils.EMPTY))
.dataType(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue()))
.itemFormulaContent(itemFormulaContent)
// .canEdit(Objects.equals(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getUseInEmployeeSalary).orElse(0), 0))
.canEdit(true)
.pattern(salarySobItemPO.getPattern())
.lockStatus(lockItems.contains(salarySobItemPO.getSalaryItemId()) ? LockStatusEnum.LOCK.getDefaultLabel() : LockStatusEnum.UNLOCK.getDefaultLabel())
.build();
}
/**
* 薪资回算项目转换成薪资核算结果详情dto
*
* @param salarySobBackItemPO
* @param salaryItemPO
* @param resultValueMap
* @return
*/
private static SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO backItemConvert2SalaryAcctResultDetailItemDTO(SalarySobBackItemPO salarySobBackItemPO,
SalaryItemPO salaryItemPO,
Map<Long, String> resultValueMap,
Map<Long, String> salaryBackItemFormula) {
// 薪资项目的数据类型
return SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO.builder()
.salaryItemId(salarySobBackItemPO.getSalaryItemId())
.salaryItemName(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY))
.resultValue(resultValueMap.getOrDefault(salarySobBackItemPO.getSalaryItemId(), StringUtils.EMPTY))
.itemFormulaContent(salaryBackItemFormula.get(salarySobBackItemPO.getSalaryItemId()))
.dataType(Optional.ofNullable(salarySobBackItemPO).map(SalarySobBackItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue()))
.canEdit(Objects.equals(Optional.ofNullable(salaryItemPO).map(SalaryItemPO::getUseInEmployeeSalary).orElse(0), 0))
.build();
}
/**
* 薪资核算结果保存参数转换成薪资核算结果po
*
* @param saveParam 前端保存参数
* @param salaryAcctEmployee 薪资核算人员po
* @param employeeId 当前登陆人员id
* @return
*/
public static List<SalaryAcctResultPO> convert2PO(List<SalaryAcctResultPO> salaryAcctResultPOSOld,
SalaryAcctResultSaveParam saveParam,
SalaryAcctEmployeePO salaryAcctEmployee,
Long employeeId) {
if (CollectionUtils.isEmpty(saveParam.getItems())) {
return Collections.emptyList();
}
// 获取薪资项目回算前的值
Map<String, String> salaryAcctResultOldPOMap = salaryAcctResultPOSOld.stream()
.collect(Collectors.groupingBy(p -> p.getSalaryAcctEmpId() + "-" + p.getSalaryItemId(),
Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(SalaryAcctResultPO::getId)),
s -> s.map(SalaryAcctResultPO::getOriginResultValue).orElse(""))));
Date now = new Date();
return saveParam.getItems().stream()
.map(e -> SalaryAcctResultPO.builder()
.salarySobId(salaryAcctEmployee.getSalarySobId())
.salaryItemId(e.getSalaryItemId())
.salaryAcctRecordId(salaryAcctEmployee.getSalaryAcctRecordId())
.salaryAcctEmpId(salaryAcctEmployee.getId())
.employeeId(salaryAcctEmployee.getEmployeeId())
.taxAgentId(salaryAcctEmployee.getTaxAgentId())
.resultValue(StringUtils.trim(e.getResultValue()))
.originResultValue(salaryAcctResultOldPOMap.get(saveParam.getSalaryAcctEmpId() + "-" + e.getSalaryItemId()))
.creator(employeeId)
.createTime(now)
.updateTime(now)
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build())
.collect(Collectors.toList());
}
public static List<SalaryAcctResultPO> batchEditConvert2PO(Map<String, String> salaryAcctResultOldPOMap,
List<SalaryAcctResultSaveParam.SalaryAcctResultDetailItemParam> items,
SalaryAcctEmployeePO salaryAcctEmployee,
Long employeeId) {
if (CollectionUtils.isEmpty(items) || ObjectUtil.isEmpty(salaryAcctEmployee)) {
return Collections.emptyList();
}
Date now = new Date();
return items.stream()
.map(e -> SalaryAcctResultPO.builder()
.salarySobId(salaryAcctEmployee.getSalarySobId())
.salaryItemId(e.getSalaryItemId())
.salaryAcctRecordId(salaryAcctEmployee.getSalaryAcctRecordId())
.salaryAcctEmpId(salaryAcctEmployee.getId())
.employeeId(salaryAcctEmployee.getEmployeeId())
.taxAgentId(salaryAcctEmployee.getTaxAgentId())
.resultValue(StringUtils.trim(e.getResultValue()))
.originResultValue(salaryAcctResultOldPOMap.get(salaryAcctEmployee.getId() + "-" + e.getSalaryItemId()))
.creator(employeeId)
.createTime(now)
.updateTime(now)
.deleteType(NumberUtils.INTEGER_ZERO)
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
.build())
.collect(Collectors.toList());
}
public static Map<String, String> buildEmployeeFieldName() {
Field[] declaredFields = SalaryFormulaEmployeeDTO.class.getDeclaredFields();
Map<String, String> employeeFieldNameMap = Maps.newHashMapWithExpectedSize(declaredFields.length);
for (Field declaredField : declaredFields) {
if (!declaredField.isAnnotationPresent(SalaryFormulaVar.class)) {
continue;
}
SalaryFormulaVar annotation = declaredField.getAnnotation(SalaryFormulaVar.class);
employeeFieldNameMap.put(declaredField.getName(), SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.defaultLabel()));
employeeFieldNameMap.put(declaredField.getName() + "_type", annotation.dataType());
}
return employeeFieldNameMap;
}
public static ConsolidatedTaxDetailDTO convert2ConsolidatedTaxDetailDTO(DataCollectionEmployee simpleEmployee,
TaxAgentPO taxAgent,
List<SalarySobEmpFieldPO> salarySobEmpFields,
List<SalaryItemPO> salaryItems,
List<SalaryAcctEmployeePO> salaryAcctEmployees,
List<SalarySobPO> salarySobs,
List<SalaryAcctRecordPO> salaryAcctRecords,
List<SalaryAcctResultPO> salaryAcctResults) {
return ConsolidatedTaxDetailDTO.builder()
// .employeeInfo(buildConsolidatedTaxationEmpInfo(simpleEmployee, taxAgent, salarySobEmpFields))
// .salaryAcctResult(buildConsolidatedTaxationAcctResult(salaryItems, salaryAcctEmployees, salarySobs, salaryAcctRecords, salaryAcctResults))
.build();
}
/**
* 合并计税详情-员工信息
*
* @param simpleEmployee
* @param salarySobEmpFields
* @return
*/
// private static WeaForm buildConsolidatedTaxationEmpInfo(DataCollectionEmployee simpleEmployee, TaxAgent taxAgent, List<SalarySobEmpFieldPO> salarySobEmpFields) {
// Map<String, String> employeeFieldNameMap = buildEmployeeFieldName();
// Map<String, String> fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(simpleEmployee);
// fieldValueMap.put("taxAgentName", taxAgent.getName());
// Map<String, Object> data = Maps.newHashMap();
// Map<String, WeaFormItem> items = Maps.newHashMap();
// List<List<WeaFormLayout>> layout = Lists.newArrayList();
// List<WeaFormLayout> temp = Lists.newArrayList();
// for (SalarySobEmpFieldPO field : salarySobEmpFields) {
// // 字段属性
// WeaFormItem weaFormItem = new WeaFormItem(WeaFormItemType.INPUT);
// weaFormItem.setReadOnly(true);
// weaFormItem.setValue(fieldValueMap.getOrDefault(field.getFieldCode(), ""));
// items.put(field.getFieldCode(), weaFormItem);
// // 字段布局
// if (temp.size() == 3) {
// layout.add(new ArrayList<>(temp));
// temp = Lists.newArrayList();
// }
// WeaFormLayout weaFormLayout = new WeaFormLayout(field.getFieldCode(), employeeFieldNameMap.getOrDefault(field.getFieldCode(), ""), new String[]{field.getFieldCode()});
// temp.add(weaFormLayout);
// // 字段的值
// data.put(field.getFieldCode(), weaFormItem.getValue());
// }
// if (CollectionUtils.isNotEmpty(temp)) {
// layout.add(new ArrayList<>(temp));
// }
// WeaForm weaForm = new WeaForm();
// weaForm.setData(data);
// weaForm.setItems(items);
// weaForm.setLayout(layout);
// return weaForm;
// }
/**
* 合并计税详情-核算结果列表
*
* @param salaryItems
* @param salaryAcctResults
* @return
*/
// private static WeaTable<Map<String, Object>> buildConsolidatedTaxationAcctResult(List<SalaryItemPO> salaryItems,
// List<SalaryAcctEmployeePO> salaryAcctEmployees,
// List<SalarySobPO> salarySobs,
// List<SalaryAcctRecordPO> salaryAcctRecords,
// List<SalaryAcctResultPO> salaryAcctResults) {
// // 薪资核算人员
// Map<Long, SalaryAcctEmployeePO> salaryAcctEmployeeMap = SalaryEntityUtil.convert2Map(salaryAcctEmployees, SalaryAcctEmployeePO::getId);
// // 薪资账套
// Map<Long, String> salarySobNameMap = SalaryEntityUtil.convert2Map(salarySobs, SalarySobPO::getId, SalarySobPO::getName);
// // 薪资核算记录
// Map<Long, SalaryAcctRecordPO> salaryAcctRecordMap = SalaryEntityUtil.convert2Map(salaryAcctRecords, SalaryAcctRecordPO::getId);
// // 薪资核算结果
// Map<Long, List<SalaryAcctResultPO>> salaryAcctResultMap = SalaryEntityUtil.group2Map(salaryAcctResults, SalaryAcctResultPO::getSalaryAcctEmpId);
// List<WeaTableColumn> weaTableColumns = Lists.newArrayList(new WeaTableColumn("核算批次", "salarySobName"));
// weaTableColumns.addAll(salaryItems.stream()
// .map(e -> new WeaTableColumn(e.getName(), "" + e.getId(), false))
// .collect(Collectors.toList()));
// WeaTable<Map<String, Object>> weaTable = new WeaTable<>();
// weaTable.setTableType(WeaTableTypeEnum.NONE);
// weaTable.setCurrent(0);
// weaTable.setPageSize(salaryAcctResultMap.size());
// weaTable.setTotal(salaryAcctResultMap.size());
// weaTable.setColumns(weaTableColumns);
// if (CollectionUtils.isEmpty(salaryAcctResults)) {
// return weaTable;
// }
// List<Map<String, Object>> data = Lists.newArrayList();
// salaryAcctResultMap.forEach((k, v) -> {
// // 薪资核算的结果
// Map<String, Object> valueMap = SalaryEntityUtil.convert2Map(v, e -> "" + e.getSalaryItemId(), SalaryAcctResultPO::getResultValue);
// // 核算批次
// SalaryAcctEmployeePO salaryAcctEmployeePO = salaryAcctEmployeeMap.get(k);
// SalaryAcctRecordPO salaryAcctRecordPO = salaryAcctRecordMap.get(salaryAcctEmployeePO.getSalaryAcctRecordId());
// String salarySobName = salarySobNameMap.getOrDefault(salaryAcctRecordPO.getSalarySobId(), "");
// valueMap.put("salarySobName", "第" + salaryAcctRecordPO.getAcctTimes() + "次(" + salarySobName + "");
// data.add(valueMap);
// });
// weaTable.setData(data);
// weaTable.setDisplayData(data);
// return weaTable;
// }
/**
* 薪资核算结果临时存储转成薪资核算结果po
*
* @param temps
* @return
*/
public static List<SalaryAcctResultPO> convert2ResultPO(Collection<SalaryAcctResultTempPO> temps) {
if (CollectionUtils.isEmpty(temps)) {
return Collections.emptyList();
}
return temps.stream().map(e -> {
SalaryAcctResultPO salaryAcctResult = new SalaryAcctResultPO();
BeanUtils.copyProperties(e, salaryAcctResult);
return salaryAcctResult;
}).collect(Collectors.toList());
}
}