@ -1,5 +1,7 @@
package com.engine.salary.service.impl ;
import cn.hutool.core.bean.BeanUtil ;
import com.api.formmode.page.util.Util ;
import com.cloudstore.eccom.pc.table.WeaTableColumn ;
import com.engine.common.util.ServiceUtil ;
import com.engine.core.impl.Service ;
@ -7,6 +9,7 @@ import com.engine.salary.common.LocalDateRange;
import com.engine.salary.component.WeaTableColumnGroup ;
import com.engine.salary.entity.datacollection.DataCollectionEmployee ;
import com.engine.salary.entity.hrm.DeptInfo ;
import com.engine.salary.entity.hrm.SubCompanyInfo ;
import com.engine.salary.entity.ly.dto.LyFzhsInfo ;
import com.engine.salary.entity.ly.param.LySalaryReportQueryParam ;
import com.engine.salary.entity.ly.po.LySalaryReportPO ;
@ -14,9 +17,12 @@ import com.engine.salary.entity.ly.po.UfGjjInfo;
import com.engine.salary.entity.ly.po.UfSbInfo ;
import com.engine.salary.entity.salaryacct.bo.SalaryAcctFormulaBO ;
import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO ;
import com.engine.salary.entity.salaryacct.dto.LyDazjtjReportDTO ;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO ;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO ;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO ;
import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO ;
import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO ;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO ;
import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO ;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO ;
@ -25,6 +31,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.UserStatusEnum ;
import com.engine.salary.enums.ly.LyPushStatusEnum ;
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum ;
import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum ;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum ;
import com.engine.salary.exception.SalaryRunTimeException ;
import com.engine.salary.mapper.ly.LySalaryReportMapper ;
@ -51,6 +58,7 @@ import weaver.hrm.User;
import weaver.wechat.util.Utils ;
import java.math.BigDecimal ;
import java.math.RoundingMode ;
import java.text.SimpleDateFormat ;
import java.util.* ;
import java.util.stream.Collectors ;
@ -107,6 +115,11 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
return MapperProxyFactory . getProxy ( UfSbgjjMapper . class ) ;
}
private SalaryArchiveService getSalaryArchiveService ( User user ) {
return ServiceUtil . getService ( SalaryArchiveServiceImpl . class , user ) ;
}
/ * *
* 查询所有记录
*
@ -2738,4 +2751,544 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
}
}
}
@Override
public Map < String , Object > listLyXcdazjtjReport ( ) {
/ / 查询所有发薪的薪资档案
List < SalaryArchivePO > salaryArchivePOList = getSalaryArchiveService ( user ) . listSome ( SalaryArchivePO . builder ( ) . runStatusList ( Arrays . asList ( SalaryArchiveStatusEnum . FIXED . getValue ( ) , SalaryArchiveStatusEnum . SUSPEND . getValue ( ) ) ) . build ( ) ) ;
BaseBean baseBean = new BaseBean ( ) ;
String gwzjField = baseBean . getPropValue ( " lySalaryReport " , " gwzj_field_id " ) ;
String pqField = baseBean . getPropValue ( " lySalaryReport " , " pq_field_id " ) ;
RecordSet rs = new RecordSet ( ) ;
/ / 查询职等职级信息
rs . execute ( " select id,gwzj from uf_zdzj_new " ) ;
Map < String , Integer > zdzjInfoMap = new HashMap < > ( ) ;
while ( rs . next ( ) ) {
String [ ] split = StringUtils . split ( rs . getString ( " gwzj " ) , " - " ) ;
if ( split ! = null & & split . length > 0 ) {
String gwzj = split [ 0 ] ;
zdzjInfoMap . put ( rs . getString ( " id " ) , SalaryEntityUtil . string2Integer ( gwzj ) ) ;
}
}
/ / 查询员工对应的职级 、 片区信息
List < Long > employeeIds = salaryArchivePOList . stream ( ) . map ( salaryArchivePO - > salaryArchivePO . getEmployeeId ( ) ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < List < Long > > partition = Lists . partition ( employeeIds , 800 ) ;
Map < Long , Integer > empZjMap = new HashMap < > ( ) ;
Map < Long , String > empPqMap = new HashMap < > ( ) ;
partition . forEach ( part - > {
rs . execute ( " select id, " + gwzjField + " , " + pqField + " from cus_fielddata where scope='HrmCustomFieldByInfoType' and scopeid=-1 and id in ( " + StringUtils . join ( part , " , " ) + " ) " ) ;
while ( rs . next ( ) ) {
String gwzj = Utils . null2String ( rs . getString ( gwzjField ) ) ;
if ( StringUtils . isNotBlank ( gwzj ) ) {
if ( gwzj . contains ( " _ " ) ) {
String [ ] split = gwzj . split ( " _ " ) ;
gwzj = split ! = null & & split . length > 0 ? split [ split . length - 1 ] : " " ;
}
empZjMap . put ( Long . valueOf ( rs . getInt ( " id " ) ) , zdzjInfoMap . get ( gwzj ) ) ;
}
empPqMap . put ( Long . valueOf ( rs . getInt ( " id " ) ) , Utils . null2String ( rs . getString ( pqField ) ) ) ;
}
} ) ;
/ / 获取人员分部信息
Map < Long , DataCollectionEmployee > employeeMap = SalaryEntityUtil . convert2Map ( getSalaryEmployeeService ( user ) . listByIds ( employeeIds ) , DataCollectionEmployee : : getEmployeeId ) ;
/ / 获取所有分部信息
Map < Long , SubCompanyInfo > subCompanyInfoMap = SalaryEntityUtil . convert2Map ( getSalaryEmployeeService ( user ) . listAllSubCompanyInfoList ( ) , SubCompanyInfo : : getId ) ;
/ / 所有档案赋值职级
salaryArchivePOList . stream ( ) . forEach ( salaryArchivePO - > {
int zj = empZjMap . get ( salaryArchivePO . getEmployeeId ( ) ) = = null ? - 1 : empZjMap . get ( salaryArchivePO . getEmployeeId ( ) ) ;
salaryArchivePO . setLyzj ( zj ) ;
salaryArchivePO . setLypq ( Utils . null2String ( empPqMap . get ( salaryArchivePO . getEmployeeId ( ) ) ) ) ;
salaryArchivePO . setLyxm ( Utils . null2String ( employeeMap . get ( salaryArchivePO . getEmployeeId ( ) ) = = null ? " " : employeeMap . get ( salaryArchivePO . getEmployeeId ( ) ) . getSubcompanyid ( ) ) ) ;
} ) ;
/ / 获取薪资档案字段id值
Long ndyssyzeItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_ndyssrze_field_id " ) ) ;
Long ydbzgzItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_ydbzgz_field_id " ) ) ;
Long ydjxzeItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_ydjx_field_id " ) ) ;
Long gdffblItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_gdffbl_field_id " ) ) ;
Long lbjtItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_lbjt_field_id " ) ) ;
Long nzjxsItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_nzjxs_field_id " ) ) ;
List < Long > salaryItemIds = Arrays . asList ( ndyssyzeItemId , ydbzgzItemId , ydjxzeItemId , gdffblItemId , lbjtItemId , nzjxsItemId ) ;
List < List < SalaryArchivePO > > archivePartition = Lists . partition ( salaryArchivePOList , 500 ) ;
/ / 查询员工当前生效的薪资档案数据
List < SalaryArchiveItemPO > archiveItemPOS = new ArrayList < > ( ) ;
archivePartition . forEach ( part - > {
List < Long > archiveIds = part . stream ( ) . map ( SalaryArchivePO : : getId ) . collect ( Collectors . toList ( ) ) ;
archiveItemPOS . addAll ( getSalaryArchiveService ( user ) . getCurrentEffectiveItemList ( archiveIds , salaryItemIds ) ) ;
} ) ;
Map < Long , List < SalaryArchiveItemPO > > archiveItemPOSGroupByAchiveId = SalaryEntityUtil . group2Map ( archiveItemPOS , SalaryArchiveItemPO : : getSalaryArchiveId ) ;
/ / 薪资档案根据职级分组
List < LyDazjtjReportDTO > reportDTOS = new ArrayList < LyDazjtjReportDTO > ( ) ;
Map < String , List < SalaryArchivePO > > archivePOGroupByZj = SalaryEntityUtil . group2Map ( salaryArchivePOList , po - > po . getLyzj ( ) + " _split " + po . getLypq ( ) + " _split " + po . getLyxm ( ) ) ;
BigDecimal [ ] allNdsrzeSumVal = new BigDecimal [ ] { new BigDecimal ( " 0 " ) } ;
for ( Map . Entry < String , List < SalaryArchivePO > > entry : archivePOGroupByZj . entrySet ( ) ) {
Map < String , BigDecimal > zjSumValueMap = new HashMap < > ( ) ;
String [ ] split = entry . getKey ( ) . split ( " _split " ) ;
Long zj = split ! = null & & split . length > 0 & & NumberUtils . isCreatable ( split [ 0 ] ) ? Long . valueOf ( split [ 0 ] ) : - 1 ;
String lypq = split ! = null & & split . length > 1 ? split [ 1 ] : " " ;
String lyxm = split ! = null & & split . length > 2 ? split [ 2 ] : " " ;
List < Long > singleGroupArchiveIds = entry . getValue ( ) . stream ( ) . map ( SalaryArchivePO : : getId ) . collect ( Collectors . toList ( ) ) ;
singleGroupArchiveIds . stream ( ) . forEach ( archiveId - > {
List < SalaryArchiveItemPO > salaryArchiveItemPOList = archiveItemPOSGroupByAchiveId . get ( archiveId ) ;
if ( CollectionUtils . isNotEmpty ( salaryArchiveItemPOList ) ) {
Map < Long , String > archiveValueMap = SalaryEntityUtil . convert2Map ( salaryArchiveItemPOList , SalaryArchiveItemPO : : getSalaryItemId , SalaryArchiveItemPO : : getItemValue ) ;
BigDecimal ndsrzezbSumVal = zjSumValueMap . computeIfAbsent ( " ndsrze " , k - > new BigDecimal ( " 0 " ) ) ;
BigDecimal ndsrzezbVal = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( ndyssyzeItemId ) ) ;
zjSumValueMap . put ( " ndsrze " , ndsrzezbSumVal . add ( ndsrzezbVal ) ) ;
allNdsrzeSumVal [ 0 ] = allNdsrzeSumVal [ 0 ] . add ( ndsrzezbVal ) ;
BigDecimal ydbzgzSumVal = zjSumValueMap . computeIfAbsent ( " ydbzgz " , k - > new BigDecimal ( " 0 " ) ) ;
BigDecimal ydbzgzVal = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( ydbzgzItemId ) ) ;
zjSumValueMap . put ( " ydbzgz " , ydbzgzSumVal . add ( ydbzgzVal ) ) ;
BigDecimal ydjxzeSumVal = zjSumValueMap . computeIfAbsent ( " ydjx " , k - > new BigDecimal ( " 0 " ) ) ;
BigDecimal ydjxzeVal = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( ydjxzeItemId ) ) ;
zjSumValueMap . put ( " ydjx " , ydjxzeSumVal . add ( ydjxzeVal ) ) ;
BigDecimal yjdjxVal = new BigDecimal ( " 0 " ) ;
BigDecimal sjdjxVal = new BigDecimal ( " 0 " ) ;
if ( ! zj . equals ( new Long ( " 0 " ) ) & & ! zj . equals ( new Long ( " 1 " ) ) & & ! zj . equals ( new Long ( " 2 " ) ) ) {
/ / 年度预算收入总额 * ( 1 - 固定比例 ) * 20 %
BigDecimal gdblVal = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( gdffblItemId ) ) ;
yjdjxVal = ( new BigDecimal ( " 1 " ) . subtract ( gdblVal ) ) . multiply ( new BigDecimal ( " 0.2 " ) ) . multiply ( ndsrzezbVal ) ;
BigDecimal yjdjxValSum = zjSumValueMap . computeIfAbsent ( " yjdjx " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " yjdjx " , yjdjxValSum . add ( yjdjxVal ) ) ;
BigDecimal ejdjxValSum = zjSumValueMap . computeIfAbsent ( " ejdjx " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " ejdjx " , ejdjxValSum . add ( yjdjxVal ) ) ;
/ / 年度预算收入总额 * ( 1 - 固定比例 ) * 30 %
sjdjxVal = ( new BigDecimal ( " 1 " ) . subtract ( gdblVal ) ) . multiply ( new BigDecimal ( " 0.3 " ) ) . multiply ( ndsrzezbVal ) ;
BigDecimal sjdjxValSum = zjSumValueMap . computeIfAbsent ( " sjdjx " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " sjdjx " , sjdjxValSum . add ( sjdjxVal ) ) ;
BigDecimal sijdjxValSum = zjSumValueMap . computeIfAbsent ( " sijdjx " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " sijdjx " , sijdjxValSum . add ( sjdjxVal ) ) ;
}
/ / ( 月度标准工资 + 月度绩效 + 领班津贴 ) * 年终奖系数
BigDecimal nzjzeVal = ( ydbzgzVal . add ( ydjxzeVal ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( lbjtItemId ) ) ) )
. multiply ( SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( nzjxsItemId ) ) ) ;
BigDecimal nzjzeValSum = zjSumValueMap . computeIfAbsent ( " nzjze " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " nzjze " , nzjzeValSum . add ( nzjzeVal ) ) ;
BigDecimal jdjxzeVal = yjdjxVal . add ( yjdjxVal ) . add ( sjdjxVal ) . add ( sjdjxVal ) ;
BigDecimal jdjxzeValSum = zjSumValueMap . computeIfAbsent ( " jdjxze " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " jdjxze " , jdjxzeValSum . add ( jdjxzeVal ) ) ;
}
} ) ;
/ / 封装
SubCompanyInfo lypqInfo = subCompanyInfoMap . get ( SalaryEntityUtil . string2Long ( lypq ) ) ;
SubCompanyInfo lyxmInfo = subCompanyInfoMap . get ( SalaryEntityUtil . string2Long ( lyxm ) ) ;
reportDTOS . add ( LyDazjtjReportDTO . builder ( )
. lypq ( lypqInfo = = null ? " " : Utils . null2String ( lypqInfo . getName ( ) ) )
. lypqShowOrder ( lypqInfo = = null | | lypqInfo . getShoworder ( ) = = null ? - 1 : lypqInfo . getShoworder ( ) )
. lyxm ( lyxmInfo = = null ? " " : Utils . null2String ( lyxmInfo . getName ( ) ) )
. lyxmShowOrder ( lyxmInfo = = null | | lyxmInfo . getShoworder ( ) = = null ? - 1 : lyxmInfo . getShoworder ( ) )
. zj ( zj = = null ? " -1 " : zj . toString ( ) )
. zzrs ( entry . getValue ( ) . size ( ) )
. ndsrze ( Util . null2String ( zjSumValueMap . get ( " ndsrze " ) ) )
. ydbzgzze ( Util . null2String ( zjSumValueMap . get ( " ydbzgz " ) ) )
. ydjxze ( Util . null2String ( zjSumValueMap . get ( " ydjx " ) ) )
. yjdjxze ( Util . null2String ( zjSumValueMap . get ( " yjdjx " ) ) )
. ejdjxze ( Util . null2String ( zjSumValueMap . get ( " ejdjx " ) ) )
. sjdjxze ( Util . null2String ( zjSumValueMap . get ( " sjdjx " ) ) )
. sijdjxze ( Util . null2String ( zjSumValueMap . get ( " sijdjx " ) ) )
. nzjze ( Util . null2String ( zjSumValueMap . get ( " nzjze " ) ) )
. jdjxze ( Util . null2String ( zjSumValueMap . get ( " jdjxze " ) ) )
. build ( ) ) ;
}
/ / 计算年度收入总额占比
reportDTOS . stream ( ) . forEach ( dto - > {
if ( NumberUtils . isCreatable ( dto . getNdsrze ( ) ) ) {
BigDecimal ndsrze = SalaryEntityUtil . string2BigDecimalDefault0 ( dto . getNdsrze ( ) ) ;
dto . setNdsrzezb ( ndsrze . divide ( allNdsrzeSumVal [ 0 ] , 4 , RoundingMode . HALF_UP ) . multiply ( new BigDecimal ( " 100 " ) ) . setScale ( 2 , RoundingMode . HALF_UP ) . toPlainString ( ) ) ;
}
} ) ;
/ / reportDTOS根据lypq和lyxm和zj排序
reportDTOS = reportDTOS . stream ( ) . sorted ( new Comparator < LyDazjtjReportDTO > ( ) {
@Override
public int compare ( LyDazjtjReportDTO o1 , LyDazjtjReportDTO o2 ) {
Integer o1zj = NumberUtils . isCreatable ( o1 . getZj ( ) ) ? Integer . valueOf ( o1 . getZj ( ) ) : - 1 ;
Integer o2zj = NumberUtils . isCreatable ( o2 . getZj ( ) ) ? Integer . valueOf ( o2 . getZj ( ) ) : - 1 ;
if ( o1zj . equals ( o2zj ) ) {
Integer o1pq = o1 . getLypqShowOrder ( ) = = null ? - 1 : o1 . getLypqShowOrder ( ) ;
Integer o2pq = o2 . getLypqShowOrder ( ) = = null ? - 1 : o2 . getLypqShowOrder ( ) ;
if ( o1pq . equals ( o2pq ) ) {
Integer o1xm = o1 . getLyxmShowOrder ( ) = = null ? - 1 : o1 . getLyxmShowOrder ( ) ;
Integer o2xm = o2 . getLyxmShowOrder ( ) = = null ? - 1 : o2 . getLyxmShowOrder ( ) ;
return o1xm . compareTo ( o2xm ) ;
} else {
return o1pq . compareTo ( o2pq ) ;
}
}
return o1zj . compareTo ( o2zj ) ;
}
} ) . collect ( Collectors . toList ( ) ) ;
/ / 计算饼状图 ( 根据职级汇总 )
LinkedHashMap < String , String > chartsMap = new LinkedHashMap < > ( ) ;
Map < String , List < LyDazjtjReportDTO > > groupByzj = SalaryEntityUtil . group2Map ( reportDTOS , LyDazjtjReportDTO : : getZj ) ;
LinkedHashMap < String , List < LyDazjtjReportDTO > > sortedGroupByzj = groupByzj . entrySet ( ) . stream ( )
. sorted ( new Comparator < Map . Entry < String , List < LyDazjtjReportDTO > > > ( ) {
@Override
public int compare ( Map . Entry < String , List < LyDazjtjReportDTO > > o1 , Map . Entry < String , List < LyDazjtjReportDTO > > o2 ) {
Long key1 = NumberUtils . isCreatable ( o1 . getKey ( ) ) ? Long . valueOf ( o1 . getKey ( ) ) : - 1L ;
Long key2 = NumberUtils . isCreatable ( o2 . getKey ( ) ) ? Long . valueOf ( o2 . getKey ( ) ) : - 1L ;
return key1 . compareTo ( key2 ) ;
}
} )
. collect ( Collectors . toMap ( Map . Entry : : getKey , Map . Entry : : getValue , ( oldValue , newValue ) - > oldValue ,
LinkedHashMap : : new ) ) ;
for ( Map . Entry < String , List < LyDazjtjReportDTO > > entry : sortedGroupByzj . entrySet ( ) ) {
String zj = entry . getKey ( ) ;
BigDecimal sumVal = entry . getValue ( ) . stream ( ) . map ( LyDazjtjReportDTO : : getNdsrze ) . filter ( NumberUtils : : isCreatable ) . map ( BigDecimal : : new )
. reduce ( new BigDecimal ( " 0 " ) , BigDecimal : : add ) ;
String zb = sumVal . divide ( allNdsrzeSumVal [ 0 ] , 4 , RoundingMode . HALF_UP ) . multiply ( new BigDecimal ( " 100 " ) ) . setScale ( 2 , RoundingMode . HALF_UP ) . toPlainString ( ) ;
chartsMap . put ( zj , zb ) ;
}
/ / 构建表头
List < WeaTableColumn > columns = new ArrayList < > ( ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 片区 " , " lypq " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 项目 " , " lyxm " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 职级 " , " zj " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 在职人数 " , " zzrs " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 年度收入总额 " , " ndsrze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 年度收入总额占比 " , " ndsrzezb " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 月度标准工资总额 " , " ydbzgzze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 月度绩效总额 " , " ydjxze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 1季度绩效总额 " , " yjdjxze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 2季度绩效总额 " , " ejdjxze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 3季度绩效总额 " , " sjdjxze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 4季度绩效总额 " , " sijdjxze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 年终奖总额 " , " nzjze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 季度绩效总额 " , " jdjxze " ) ) ;
Map < String , Object > map = new HashMap < > ( ) ;
/ / if ( param . isExport ( ) ) {
/ / / / 合计或导出需要合计行
/ / Map < String , Object > sumResultMap = new HashMap < > ( ) ;
/ / sumResultMap . put ( gsmcItemId . toString ( ) , " 合计 " ) ;
/ / for ( SalaryItemPO salaryItem : salaryItemList ) {
/ / if ( salaryItem . getDataType ( ) . equals ( SalaryDataTypeEnum . NUMBER . getValue ( ) ) ) {
/ / BigDecimal sumValue = acctResultMap . stream ( )
/ / . map ( m - > m . get ( salaryItem . getId ( ) . toString ( ) ) )
/ / . filter ( value - > value ! = null & & NumberUtils . isCreatable ( value . toString ( ) ) )
/ / . map ( e - > SalaryEntityUtil . empty2Zero ( e . toString ( ) ) )
/ / . reduce ( BigDecimal . ZERO , BigDecimal : : add ) ;
/ / sumResultMap . put ( salaryItem . getId ( ) . toString ( ) , sumValue ) ;
/ / }
/ / }
/ / map . put ( " sumRow " , sumResultMap ) ;
/ / }
map . put ( " columns " , columns ) ;
map . put ( " data " , reportDTOS ) ;
map . put ( " chartsData " , chartsMap ) ;
return map ;
}
@Override
public XSSFWorkbook exportXcdazjtjReport ( ) {
Map < String , Object > resultMap = listLyXcdazjtjReport ( ) ;
List < LyDazjtjReportDTO > dataList = ( List < LyDazjtjReportDTO > ) resultMap . get ( " data " ) ;
List < WeaTableColumn > columns = ( List < WeaTableColumn > ) resultMap . get ( " columns " ) ;
/ / Map < String , Object > sum = ( Map < String , Object > ) resultMap . get ( " sum " ) ;
/ / dataList . add ( sum ) ;
List < Object > headerList = new ArrayList < > ( columns . stream ( ) . map ( WeaTableColumn : : getText ) . collect ( Collectors . toList ( ) ) ) ;
List < List < Object > > rows = new ArrayList < > ( ) ;
rows . add ( headerList ) ;
for ( LyDazjtjReportDTO dto : dataList ) {
List < Object > row = Lists . newArrayList ( ) ;
Map < String , Object > valueMap = BeanUtil . beanToMap ( dto ) ;
for ( WeaTableColumn column : columns ) {
row . add ( Utils . null2String ( valueMap . get ( column . getColumn ( ) ) ) ) ;
}
rows . add ( row ) ;
}
/ / 获取excel
return ExcelUtilPlus . genWorkbookV2 ( rows , " 薪酬档案职级统计报表 " , false ) ;
}
@Override
public Map < String , Object > listLyXcdazwjstjReport ( ) {
/ / 查询所有发薪的薪资档案
List < SalaryArchivePO > salaryArchivePOList = getSalaryArchiveService ( user ) . listSome ( SalaryArchivePO . builder ( ) . runStatusList ( Arrays . asList ( SalaryArchiveStatusEnum . FIXED . getValue ( ) , SalaryArchiveStatusEnum . SUSPEND . getValue ( ) ) ) . build ( ) ) ;
BaseBean baseBean = new BaseBean ( ) ;
String gwzjField = baseBean . getPropValue ( " lySalaryReport " , " gwzj_field_id " ) ;
String pqField = baseBean . getPropValue ( " lySalaryReport " , " pq_field_id " ) ;
String zwjsField = baseBean . getPropValue ( " lySalaryReport " , " zwjs_field_id " ) ;
RecordSet rs = new RecordSet ( ) ;
/ / 查询职等职级信息
rs . execute ( " select id,gwzj from uf_zdzj_new " ) ;
Map < String , Integer > zdzjInfoMap = new HashMap < > ( ) ;
while ( rs . next ( ) ) {
String [ ] split = StringUtils . split ( rs . getString ( " gwzj " ) , " - " ) ;
if ( split ! = null & & split . length > 0 ) {
String gwzj = split [ 0 ] ;
zdzjInfoMap . put ( rs . getString ( " id " ) , SalaryEntityUtil . string2Integer ( gwzj ) ) ;
}
}
/ / 查询员工对应的职级 、 片区信息
List < Long > employeeIds = salaryArchivePOList . stream ( ) . map ( salaryArchivePO - > salaryArchivePO . getEmployeeId ( ) ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < List < Long > > partition = Lists . partition ( employeeIds , 800 ) ;
Map < Long , Integer > empZjMap = new HashMap < > ( ) ;
Map < Long , String > empPqMap = new HashMap < > ( ) ;
partition . forEach ( part - > {
rs . execute ( " select id, " + gwzjField + " , " + pqField + " from cus_fielddata where scope='HrmCustomFieldByInfoType' and scopeid=-1 and id in ( " + StringUtils . join ( part , " , " ) + " ) " ) ;
while ( rs . next ( ) ) {
String gwzj = Utils . null2String ( rs . getString ( gwzjField ) ) ;
if ( StringUtils . isNotBlank ( gwzj ) ) {
if ( gwzj . contains ( " _ " ) ) {
String [ ] split = gwzj . split ( " _ " ) ;
gwzj = split ! = null & & split . length > 0 ? split [ split . length - 1 ] : " " ;
}
empZjMap . put ( Long . valueOf ( rs . getInt ( " id " ) ) , zdzjInfoMap . get ( gwzj ) ) ;
}
empPqMap . put ( Long . valueOf ( rs . getInt ( " id " ) ) , Utils . null2String ( rs . getString ( pqField ) ) ) ;
}
} ) ;
/ / 查询员工对应的职务角色信息
Map < Long , String > empZwjsMap = new HashMap < > ( ) ;
partition . forEach ( part - > {
rs . execute ( " select id, " + zwjsField + " from cus_fielddata where scope='HrmCustomFieldByInfoType' and scopeid=3 and id in ( " + StringUtils . join ( part , " , " ) + " ) " ) ;
while ( rs . next ( ) ) {
empZwjsMap . put ( Long . valueOf ( rs . getInt ( " id " ) ) , Utils . null2String ( rs . getString ( zwjsField ) ) ) ;
}
} ) ;
/ / 获取人员分部信息
Map < Long , DataCollectionEmployee > employeeMap = SalaryEntityUtil . convert2Map ( getSalaryEmployeeService ( user ) . listByIds ( employeeIds ) , DataCollectionEmployee : : getEmployeeId ) ;
/ / 获取所有分部信息
Map < Long , SubCompanyInfo > subCompanyInfoMap = SalaryEntityUtil . convert2Map ( getSalaryEmployeeService ( user ) . listAllSubCompanyInfoList ( ) , SubCompanyInfo : : getId ) ;
/ / 获取所有职务角色数据
rs . execute ( " select id,mc from uf_zwjs " ) ;
Map < String , String > zwjsMap = new HashMap < > ( ) ;
while ( rs . next ( ) ) {
zwjsMap . put ( rs . getString ( " id " ) , rs . getString ( " mc " ) ) ;
}
/ / 所有档案赋值职级
salaryArchivePOList . stream ( ) . forEach ( salaryArchivePO - > {
int zj = empZjMap . get ( salaryArchivePO . getEmployeeId ( ) ) = = null ? - 1 : empZjMap . get ( salaryArchivePO . getEmployeeId ( ) ) ;
salaryArchivePO . setLyzj ( zj ) ;
String zwjs = empZwjsMap . get ( salaryArchivePO . getEmployeeId ( ) ) = = null ? " " : empZwjsMap . get ( salaryArchivePO . getEmployeeId ( ) ) ;
salaryArchivePO . setLyzwjs ( zwjs ) ;
salaryArchivePO . setLypq ( Utils . null2String ( empPqMap . get ( salaryArchivePO . getEmployeeId ( ) ) ) ) ;
salaryArchivePO . setLyxm ( Utils . null2String ( employeeMap . get ( salaryArchivePO . getEmployeeId ( ) ) = = null ? " " : employeeMap . get ( salaryArchivePO . getEmployeeId ( ) ) . getSubcompanyid ( ) ) ) ;
} ) ;
/ / 获取薪资档案字段id值
Long ndyssyzeItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_ndyssrze_field_id " ) ) ;
Long ydbzgzItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_ydbzgz_field_id " ) ) ;
Long ydjxzeItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_ydjx_field_id " ) ) ;
Long gdffblItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_gdffbl_field_id " ) ) ;
Long lbjtItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_lbjt_field_id " ) ) ;
Long nzjxsItemId = SalaryEntityUtil . string2Long ( baseBean . getPropValue ( " lySalaryReport " , " xzdazjtj_nzjxs_field_id " ) ) ;
List < Long > salaryItemIds = Arrays . asList ( ndyssyzeItemId , ydbzgzItemId , ydjxzeItemId , gdffblItemId , lbjtItemId , nzjxsItemId ) ;
List < List < SalaryArchivePO > > archivePartition = Lists . partition ( salaryArchivePOList , 500 ) ;
/ / 查询员工当前生效的薪资档案数据
List < SalaryArchiveItemPO > archiveItemPOS = new ArrayList < > ( ) ;
archivePartition . forEach ( part - > {
List < Long > archiveIds = part . stream ( ) . map ( SalaryArchivePO : : getId ) . collect ( Collectors . toList ( ) ) ;
archiveItemPOS . addAll ( getSalaryArchiveService ( user ) . getCurrentEffectiveItemList ( archiveIds , salaryItemIds ) ) ;
} ) ;
Map < Long , List < SalaryArchiveItemPO > > archiveItemPOSGroupByAchiveId = SalaryEntityUtil . group2Map ( archiveItemPOS , SalaryArchiveItemPO : : getSalaryArchiveId ) ;
/ / 薪资档案根据职务角色分组
List < LyDazjtjReportDTO > reportDTOS = new ArrayList < LyDazjtjReportDTO > ( ) ;
Map < String , List < SalaryArchivePO > > archivePOGroupByZj = SalaryEntityUtil . group2Map ( salaryArchivePOList , po - > po . getLyzwjs ( ) + " _split " + po . getLypq ( ) + " _split " + po . getLyxm ( ) ) ;
BigDecimal [ ] allNdsrzeSumVal = new BigDecimal [ ] { new BigDecimal ( " 0 " ) } ;
for ( Map . Entry < String , List < SalaryArchivePO > > entry : archivePOGroupByZj . entrySet ( ) ) {
Map < String , BigDecimal > zjSumValueMap = new HashMap < > ( ) ;
String [ ] split = entry . getKey ( ) . split ( " _split " ) ;
String zwjs = split ! = null & & split . length > 0 ? split [ 0 ] : " -1 " ;
String lypq = split ! = null & & split . length > 1 ? split [ 1 ] : " " ;
String lyxm = split ! = null & & split . length > 2 ? split [ 2 ] : " " ;
List < SalaryArchivePO > singleGroupArchive = entry . getValue ( ) . stream ( ) . collect ( Collectors . toList ( ) ) ;
singleGroupArchive . stream ( ) . forEach ( archive - > {
Long archiveId = archive . getId ( ) ;
List < SalaryArchiveItemPO > salaryArchiveItemPOList = archiveItemPOSGroupByAchiveId . get ( archiveId ) ;
if ( CollectionUtils . isNotEmpty ( salaryArchiveItemPOList ) ) {
Map < Long , String > archiveValueMap = SalaryEntityUtil . convert2Map ( salaryArchiveItemPOList , SalaryArchiveItemPO : : getSalaryItemId , SalaryArchiveItemPO : : getItemValue ) ;
BigDecimal ndsrzezbSumVal = zjSumValueMap . computeIfAbsent ( " ndsrze " , k - > new BigDecimal ( " 0 " ) ) ;
BigDecimal ndsrzezbVal = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( ndyssyzeItemId ) ) ;
zjSumValueMap . put ( " ndsrze " , ndsrzezbSumVal . add ( ndsrzezbVal ) ) ;
allNdsrzeSumVal [ 0 ] = allNdsrzeSumVal [ 0 ] . add ( ndsrzezbVal ) ;
BigDecimal ydbzgzSumVal = zjSumValueMap . computeIfAbsent ( " ydbzgz " , k - > new BigDecimal ( " 0 " ) ) ;
BigDecimal ydbzgzVal = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( ydbzgzItemId ) ) ;
zjSumValueMap . put ( " ydbzgz " , ydbzgzSumVal . add ( ydbzgzVal ) ) ;
BigDecimal ydjxzeSumVal = zjSumValueMap . computeIfAbsent ( " ydjx " , k - > new BigDecimal ( " 0 " ) ) ;
BigDecimal ydjxzeVal = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( ydjxzeItemId ) ) ;
zjSumValueMap . put ( " ydjx " , ydjxzeSumVal . add ( ydjxzeVal ) ) ;
BigDecimal yjdjxVal = new BigDecimal ( " 0 " ) ;
BigDecimal sjdjxVal = new BigDecimal ( " 0 " ) ;
if ( ! archive . getLyzj ( ) . equals ( new Integer ( " 0 " ) ) & & ! archive . getLyzj ( ) . equals ( new Integer ( " 1 " ) ) & & ! archive . getLyzj ( ) . equals ( new Integer ( " 2 " ) ) ) {
/ / 年度预算收入总额 * ( 1 - 固定比例 ) * 20 %
BigDecimal gdblVal = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( gdffblItemId ) ) ;
yjdjxVal = ( new BigDecimal ( " 1 " ) . subtract ( gdblVal ) ) . multiply ( new BigDecimal ( " 0.2 " ) ) . multiply ( ndsrzezbVal ) ;
BigDecimal yjdjxValSum = zjSumValueMap . computeIfAbsent ( " yjdjx " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " yjdjx " , yjdjxValSum . add ( yjdjxVal ) ) ;
BigDecimal ejdjxValSum = zjSumValueMap . computeIfAbsent ( " ejdjx " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " ejdjx " , ejdjxValSum . add ( yjdjxVal ) ) ;
/ / 年度预算收入总额 * ( 1 - 固定比例 ) * 30 %
sjdjxVal = ( new BigDecimal ( " 1 " ) . subtract ( gdblVal ) ) . multiply ( new BigDecimal ( " 0.3 " ) ) . multiply ( ndsrzezbVal ) ;
BigDecimal sjdjxValSum = zjSumValueMap . computeIfAbsent ( " sjdjx " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " sjdjx " , sjdjxValSum . add ( sjdjxVal ) ) ;
BigDecimal sijdjxValSum = zjSumValueMap . computeIfAbsent ( " sijdjx " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " sijdjx " , sijdjxValSum . add ( sjdjxVal ) ) ;
}
/ / ( 月度标准工资 + 月度绩效 + 领班津贴 ) * 年终奖系数
BigDecimal nzjzeVal = ( ydbzgzVal . add ( ydjxzeVal ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( lbjtItemId ) ) ) )
. multiply ( SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( nzjxsItemId ) ) ) ;
BigDecimal nzjzeValSum = zjSumValueMap . computeIfAbsent ( " nzjze " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " nzjze " , nzjzeValSum . add ( nzjzeVal ) ) ;
BigDecimal jdjxzeVal = yjdjxVal . add ( yjdjxVal ) . add ( sjdjxVal ) . add ( sjdjxVal ) ;
BigDecimal jdjxzeValSum = zjSumValueMap . computeIfAbsent ( " jdjxze " , k - > new BigDecimal ( " 0 " ) ) ;
zjSumValueMap . put ( " jdjxze " , jdjxzeValSum . add ( jdjxzeVal ) ) ;
}
} ) ;
/ / 封装
SubCompanyInfo lypqInfo = subCompanyInfoMap . get ( SalaryEntityUtil . string2Long ( lypq ) ) ;
SubCompanyInfo lyxmInfo = subCompanyInfoMap . get ( SalaryEntityUtil . string2Long ( lyxm ) ) ;
reportDTOS . add ( LyDazjtjReportDTO . builder ( )
. lypq ( lypqInfo = = null ? " " : Utils . null2String ( lypqInfo . getName ( ) ) )
. lypqShowOrder ( lypqInfo = = null | | lypqInfo . getShoworder ( ) = = null ? - 1 : lypqInfo . getShoworder ( ) )
. lyxm ( lyxmInfo = = null ? " " : Utils . null2String ( lyxmInfo . getName ( ) ) )
. lyxmShowOrder ( lyxmInfo = = null | | lyxmInfo . getShoworder ( ) = = null ? - 1 : lyxmInfo . getShoworder ( ) )
. zwjs ( zwjsMap . getOrDefault ( zwjs , " " ) )
. zwjsId ( NumberUtils . isCreatable ( zwjs ) ? Long . valueOf ( zwjs ) : - 1 )
. zzrs ( entry . getValue ( ) . size ( ) )
. ndsrze ( Util . null2String ( zjSumValueMap . get ( " ndsrze " ) ) )
. ydbzgzze ( Util . null2String ( zjSumValueMap . get ( " ydbzgz " ) ) )
. ydjxze ( Util . null2String ( zjSumValueMap . get ( " ydjx " ) ) )
. yjdjxze ( Util . null2String ( zjSumValueMap . get ( " yjdjx " ) ) )
. ejdjxze ( Util . null2String ( zjSumValueMap . get ( " ejdjx " ) ) )
. sjdjxze ( Util . null2String ( zjSumValueMap . get ( " sjdjx " ) ) )
. sijdjxze ( Util . null2String ( zjSumValueMap . get ( " sijdjx " ) ) )
. nzjze ( Util . null2String ( zjSumValueMap . get ( " nzjze " ) ) )
. jdjxze ( Util . null2String ( zjSumValueMap . get ( " jdjxze " ) ) )
. build ( ) ) ;
}
/ / 计算年度收入总额占比
reportDTOS . stream ( ) . forEach ( dto - > {
if ( NumberUtils . isCreatable ( dto . getNdsrze ( ) ) ) {
BigDecimal ndsrze = SalaryEntityUtil . string2BigDecimalDefault0 ( dto . getNdsrze ( ) ) ;
dto . setNdsrzezb ( ndsrze . divide ( allNdsrzeSumVal [ 0 ] , 4 , RoundingMode . HALF_UP ) . multiply ( new BigDecimal ( " 100 " ) ) . setScale ( 2 , RoundingMode . HALF_UP ) . toPlainString ( ) ) ;
}
} ) ;
/ / reportDTOS根据lypq和lyxm和zj排序
reportDTOS = reportDTOS . stream ( ) . sorted ( new Comparator < LyDazjtjReportDTO > ( ) {
@Override
public int compare ( LyDazjtjReportDTO o1 , LyDazjtjReportDTO o2 ) {
Long o1zwjs = o1 . getZwjsId ( ) ! = null ? o1 . getZwjsId ( ) : - 1 ;
Long o2zwjs = o2 . getZwjsId ( ) ! = null ? o2 . getZwjsId ( ) : - 1 ;
if ( o1zwjs . equals ( o2zwjs ) ) {
Integer o1pq = o1 . getLypqShowOrder ( ) = = null ? - 1 : o1 . getLypqShowOrder ( ) ;
Integer o2pq = o2 . getLypqShowOrder ( ) = = null ? - 1 : o2 . getLypqShowOrder ( ) ;
if ( o1pq . equals ( o2pq ) ) {
Integer o1xm = o1 . getLyxmShowOrder ( ) = = null ? - 1 : o1 . getLyxmShowOrder ( ) ;
Integer o2xm = o2 . getLyxmShowOrder ( ) = = null ? - 1 : o2 . getLyxmShowOrder ( ) ;
return o1xm . compareTo ( o2xm ) ;
} else {
return o1pq . compareTo ( o2pq ) ;
}
}
return o1zwjs . compareTo ( o2zwjs ) ;
}
} ) . collect ( Collectors . toList ( ) ) ;
/ / 计算饼状图 ( 根据职级汇总 )
LinkedHashMap < String , String > chartsMap = new LinkedHashMap < > ( ) ;
Map < Long , List < LyDazjtjReportDTO > > groupByzwjsId = SalaryEntityUtil . group2Map ( reportDTOS , LyDazjtjReportDTO : : getZwjsId ) ;
LinkedHashMap < Long , List < LyDazjtjReportDTO > > sortedGroupByzj = groupByzwjsId . entrySet ( ) . stream ( ) . sorted ( Map . Entry . comparingByKey ( ) )
. collect ( Collectors . toMap ( Map . Entry : : getKey , Map . Entry : : getValue , ( oldValue , newValue ) - > oldValue ,
LinkedHashMap : : new ) ) ;
for ( Map . Entry < Long , List < LyDazjtjReportDTO > > entry : sortedGroupByzj . entrySet ( ) ) {
Long zwjsId = entry . getKey ( ) ;
BigDecimal sumVal = entry . getValue ( ) . stream ( ) . map ( LyDazjtjReportDTO : : getNdsrze ) . filter ( NumberUtils : : isCreatable ) . map ( BigDecimal : : new )
. reduce ( new BigDecimal ( " 0 " ) , BigDecimal : : add ) ;
String zb = sumVal . divide ( allNdsrzeSumVal [ 0 ] , 4 , RoundingMode . HALF_UP ) . multiply ( new BigDecimal ( " 100 " ) ) . setScale ( 2 , RoundingMode . HALF_UP ) . toPlainString ( ) ;
chartsMap . put ( zwjsMap . getOrDefault ( Utils . null2String ( zwjsId ) , " " ) , zb ) ;
}
/ / 构建表头
List < WeaTableColumn > columns = new ArrayList < > ( ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 片区 " , " lypq " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 项目 " , " lyxm " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 职务角色 " , " zwjs " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 在职人数(发薪员工) " , " zzrs " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 年度收入总额 " , " ndsrze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 年度收入总额占比 " , " ndsrzezb " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 月度标准工资总额 " , " ydbzgzze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 月度绩效总额 " , " ydjxze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 1季度绩效总额 " , " yjdjxze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 2季度绩效总额 " , " ejdjxze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 3季度绩效总额 " , " sjdjxze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 4季度绩效总额 " , " sijdjxze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 年终奖总额 " , " nzjze " ) ) ;
columns . add ( new WeaTableColumn ( " 150px " , " 季度绩效总额 " , " jdjxze " ) ) ;
Map < String , Object > map = new HashMap < > ( ) ;
/ / if ( param . isExport ( ) ) {
/ / / / 合计或导出需要合计行
/ / Map < String , Object > sumResultMap = new HashMap < > ( ) ;
/ / sumResultMap . put ( gsmcItemId . toString ( ) , " 合计 " ) ;
/ / for ( SalaryItemPO salaryItem : salaryItemList ) {
/ / if ( salaryItem . getDataType ( ) . equals ( SalaryDataTypeEnum . NUMBER . getValue ( ) ) ) {
/ / BigDecimal sumValue = acctResultMap . stream ( )
/ / . map ( m - > m . get ( salaryItem . getId ( ) . toString ( ) ) )
/ / . filter ( value - > value ! = null & & NumberUtils . isCreatable ( value . toString ( ) ) )
/ / . map ( e - > SalaryEntityUtil . empty2Zero ( e . toString ( ) ) )
/ / . reduce ( BigDecimal . ZERO , BigDecimal : : add ) ;
/ / sumResultMap . put ( salaryItem . getId ( ) . toString ( ) , sumValue ) ;
/ / }
/ / }
/ / map . put ( " sumRow " , sumResultMap ) ;
/ / }
map . put ( " columns " , columns ) ;
map . put ( " data " , reportDTOS ) ;
map . put ( " chartsData " , chartsMap ) ;
return map ;
}
@Override
public XSSFWorkbook exportXcdazwjstjReport ( ) {
Map < String , Object > resultMap = listLyXcdazwjstjReport ( ) ;
List < LyDazjtjReportDTO > dataList = ( List < LyDazjtjReportDTO > ) resultMap . get ( " data " ) ;
List < WeaTableColumn > columns = ( List < WeaTableColumn > ) resultMap . get ( " columns " ) ;
/ / Map < String , Object > sum = ( Map < String , Object > ) resultMap . get ( " sum " ) ;
/ / dataList . add ( sum ) ;
List < Object > headerList = new ArrayList < > ( columns . stream ( ) . map ( WeaTableColumn : : getText ) . collect ( Collectors . toList ( ) ) ) ;
List < List < Object > > rows = new ArrayList < > ( ) ;
rows . add ( headerList ) ;
for ( LyDazjtjReportDTO dto : dataList ) {
List < Object > row = Lists . newArrayList ( ) ;
Map < String , Object > valueMap = BeanUtil . beanToMap ( dto ) ;
for ( WeaTableColumn column : columns ) {
row . add ( Utils . null2String ( valueMap . get ( column . getColumn ( ) ) ) ) ;
}
rows . add ( row ) ;
}
/ / 获取excel
return ExcelUtilPlus . genWorkbookV2 ( rows , " 薪酬档案职级统计报表 " , false ) ;
}
}