2022-04-08 19:08:59 +08:00
package com.engine.salary.entity.salaryacct.bo ;
import com.cloudstore.eccom.pc.table.WeaTableColumn ;
2022-04-19 15:13:08 +08:00
import com.engine.salary.annotation.SalaryFormulaVar ;
2022-04-08 19:08:59 +08:00
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.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.SalarySobEmpFieldPO ;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO ;
import com.engine.salary.entity.salarysob.po.SalarySobPO ;
import com.engine.salary.entity.taxrate.TaxAgent ;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum ;
import com.engine.salary.util.SalaryEntityUtil ;
2022-04-19 15:13:08 +08:00
import com.engine.salary.util.SalaryI18nUtil ;
2022-04-08 19:08:59 +08:00
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 java.lang.reflect.Field ;
import java.util.* ;
import java.util.stream.Collectors ;
/ * *
* @description : 薪资核算结果
* @author : xiajun
* @modified By : xiajun
* @date : Created in 12 / 6 / 21 7 : 05 PM
* @version : v1 . 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 < WeaTableColumn > buildTableColumns ( SalarySobItemAggregateDTO salarySobItemAggregateDTO ) {
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 ;
}
// Map<String, Object> group = Maps.newHashMap();
// group.put("groupName", salarySobItemGroupDTO.getName());
// group.put("groupId", String.valueOf(salarySobItemGroupDTO.getId()));
List < WeaTableColumn > childrenColumns = Lists . newArrayList ( ) ;
for ( SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO . getItems ( ) ) {
columns . add ( new WeaTableColumn ( " 150 " , salarySobItemDTO . getName ( ) , " " + salarySobItemDTO . getSalaryItemId ( ) ) ) ;
// childrenColumns.add(new WeaTableColumn("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId()));
}
// group.put("list", childrenColumns);
}
// 没有分类的薪资项目
for ( SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO . getItems ( ) ) {
columns . add ( new WeaTableColumn ( " 150 " , salarySobItemDTO . getName ( ) , " " + salarySobItemDTO . getSalaryItemId ( ) ) ) ;
}
return columns ;
}
/ * *
* 转船成薪资核算结果列表的表格数据
*
* @param salaryItems
* @param salarySobEmpFields
* @param simpleEmployees
* @param salaryAcctEmployees
* @param salaryAccountingResults
* @param taxAgents
* @param consolidatedTaxSalaryAcctEmpIds
* @return
* /
public static List < Map < String , Object > > buildTableData ( List < SalaryItemPO > salaryItems ,
List < SalarySobEmpFieldPO > salarySobEmpFields ,
List < DataCollectionEmployee > simpleEmployees ,
List < SalaryAcctEmployeePO > salaryAcctEmployees ,
List < SalaryAcctResultPO > salaryAccountingResults ,
List < TaxAgent > taxAgents ,
Set < Long > consolidatedTaxSalaryAcctEmpIds ,
Map < Long , String > customParameters ) {
if ( CollectionUtils . isEmpty ( salaryAcctEmployees ) ) {
return Collections . emptyList ( ) ;
}
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 , TaxAgent : : getId , TaxAgent : : 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 ( ) ) ) ;
for ( SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields ) {
map . put ( salarySobEmpField . getFieldCode ( ) , fieldValueMap . get ( salarySobEmpField . getFieldCode ( ) ) ) ;
// 员工信息字段的字段类型
map . put ( salarySobEmpField . getFieldCode ( ) + DATA_TYPE_SUFFIX , SalaryDataTypeEnum . STRING . getValue ( ) ) ;
}
// 主键id
map . put ( " id " , e . getId ( ) ) ;
// 个税扣缴义务人
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 ( ) ) ;
// 公式详情
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 < TaxAgent > taxAgents ,
Map < Long , String > customParameters ,
Set < Long > consolidatedTaxSalaryAcctEmpIds ,
Set < Long > includeSalaryItemIds ) {
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 , TaxAgent : : getId , TaxAgent : : 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 ( ) ) ) ;
for ( SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields ) {
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 ,
TaxAgent taxAgentPO ,
SalaryAcctEmployeePO salaryAcctEmployee ,
List < SalarySobEmpFieldPO > salarySobEmpFields ,
List < SalarySobItemPO > salarySobItemPOS ,
List < SalaryItemPO > salaryItems ,
List < SalaryAcctResultPO > salaryAcctResults ) {
// 员工信息字段
Map < String , String > employeeFieldValueMap = SalaryAcctFormulaBO . convert2FormulaEmployee ( simpleEmployee ) ;
// 个税扣缴义务人
employeeFieldValueMap . put ( " taxAgentName " , Optional . ofNullable ( taxAgentPO ) . map ( TaxAgent : : getName ) . orElse ( StringUtils . EMPTY ) ) ;
Map < String , String > employeeFieldNameMap = buildEmployeeFieldName ( ) ;
List < SalaryAcctEmployeeInfoDTO > employeeInfos = salarySobEmpFields . stream ( )
. map ( e - > SalaryAcctEmployeeInfoDTO . builder ( )
. fieldName ( employeeFieldNameMap . getOrDefault ( e . getFieldCode ( ) , StringUtils . EMPTY ) )
. fieldValue ( employeeFieldValueMap . getOrDefault ( e . getFieldCode ( ) , StringUtils . EMPTY ) )
. build ( ) )
. collect ( Collectors . toList ( ) ) ;
// 薪资项目的值
Map < Long , String > resultValueMap = SalaryEntityUtil . convert2Map ( salaryAcctResults , SalaryAcctResultPO : : getSalaryItemId , SalaryAcctResultPO : : getResultValue ) ;
Map < Long , SalaryItemPO > salaryItemMap = SalaryEntityUtil . convert2Map ( salaryItems , SalaryItemPO : : getId ) ;
// 公式项的值( 不根据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 ( ) ) ;
return SalaryAcctResultDetailDTO . builder ( )
. id ( salaryAcctEmployee . getId ( ) )
. employeeId ( salaryAcctEmployee . getEmployeeId ( ) )
. employeeInfos ( employeeInfos )
. formulaItems ( formulaItems )
. inputItems ( inputItems )
. build ( ) ;
}
/ * *
* 转换成薪资核算结果详情dto
*
* @param salarySobItemPO
* @param salaryItemPO
* @param resultValueMap
* @return
* /
private static SalaryAcctResultDetailDTO . SalaryAcctResultDetailItemDTO convert2SalaryAcctResultDetailItemDTO ( SalarySobItemPO salarySobItemPO ,
SalaryItemPO salaryItemPO ,
Map < Long , String > resultValueMap ) {
// 薪资项目的数据类型
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 ( ) ) )
. build ( ) ;
}
/ * *
* 薪资核算结果保存参数转换成薪资核算结果po
*
* @param saveParam 前端保存参数
* @param salaryAcctEmployee 薪资核算人员po
* @param employeeId 当前登陆人员id
* @return
* /
public static List < SalaryAcctResultPO > convert2PO ( SalaryAcctResultSaveParam saveParam ,
SalaryAcctEmployeePO salaryAcctEmployee ,
Long employeeId ) {
if ( CollectionUtils . isEmpty ( saveParam . getItems ( ) ) ) {
return Collections . emptyList ( ) ;
}
Date now = new Date ( ) ;
return saveParam . getItems ( ) . stream ( )
. map ( e - > SalaryAcctResultPO . builder ( )
2022-04-06 20:01:00 +08:00
// .id(IdGenerator.generate())
2022-04-08 19:08:59 +08:00
. salarySobId ( salaryAcctEmployee . getSalarySobId ( ) )
. salaryItemId ( e . getSalaryItemId ( ) )
. salaryAcctRecordId ( salaryAcctEmployee . getSalaryAcctRecordId ( ) )
. salaryAcctEmpId ( salaryAcctEmployee . getId ( ) )
. employeeId ( salaryAcctEmployee . getEmployeeId ( ) )
. taxAgentId ( salaryAcctEmployee . getTaxAgentId ( ) )
. resultValue ( e . getResultValue ( ) )
. 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 ) ;
2022-04-19 15:13:08 +08:00
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 ( ) ) ) ;
}
2022-04-08 19:08:59 +08:00
return employeeFieldNameMap ;
}
public static ConsolidatedTaxDetailDTO convert2ConsolidatedTaxDetailDTO ( DataCollectionEmployee simpleEmployee ,
TaxAgent taxAgent ,
List < SalarySobEmpFieldPO > salarySobEmpFields ,
List < SalaryItemPO > salaryItems ,
List < SalaryAcctEmployeePO > salaryAcctEmployees ,
List < SalarySobPO > salarySobs ,
List < SalaryAcctRecordPO > salaryAcctRecords ,
List < SalaryAcctResultPO > salaryAcctResults ) {
return ConsolidatedTaxDetailDTO . builder ( )
2022-04-06 20:01:00 +08:00
// .employeeInfo(buildConsolidatedTaxationEmpInfo(simpleEmployee, taxAgent, salarySobEmpFields))
// .salaryAcctResult(buildConsolidatedTaxationAcctResult(salaryItems, salaryAcctEmployees, salarySobs, salaryAcctRecords, salaryAcctResults))
2022-04-08 19:08:59 +08:00
. build ( ) ;
}
/ * *
* 合并计税详情 - 员工信息
*
* @param simpleEmployee
* @param salarySobEmpFields
* @return
* /
// private static WeaForm buildConsolidatedTaxationEmpInfo(DataCollectionEmployee simpleEmployee, TaxAgent taxAgent, List<SalarySobEmpFieldPO> salarySobEmpFields) {
2022-04-06 20:01:00 +08:00
// 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;
// }
2022-04-08 19:08:59 +08:00
/ * *
* 合并计税详情 - 核算结果列表
*
* @param salaryItems
* @param salaryAcctResults
* @return
* /
2022-04-06 20:01:00 +08:00
// 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;
// }
2022-04-08 19:08:59 +08:00
/ * *
* 薪资核算结果临时存储转成薪资核算结果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 ( ) ) ;
}
}