@ -1,6 +1,9 @@
package com.engine.salary.service.impl ;
import cn.hutool.core.collection.CollUtil ;
import cn.hutool.core.date.DateField ;
import cn.hutool.core.date.DateTime ;
import cn.hutool.core.date.DateUtil ;
import com.engine.common.util.ServiceUtil ;
import com.engine.core.impl.Service ;
import com.engine.hrmelog.entity.dto.LoggerContext ;
@ -20,6 +23,7 @@ import com.engine.salary.entity.progress.ProgressDTO;
import com.engine.salary.entity.report.po.SalaryAcctResultReportPO ;
import com.engine.salary.entity.salaryacct.bo.* ;
import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO ;
import com.engine.salary.entity.salaryacct.dto.FsdReportLssjDTO ;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO ;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO ;
import com.engine.salary.entity.salaryacct.param.* ;
@ -48,6 +52,7 @@ import com.engine.salary.sys.entity.po.SalarySysConfPO;
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum ;
import com.engine.salary.sys.service.SalarySysConfService ;
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl ;
import com.engine.salary.util.JsonUtil ;
import com.engine.salary.util.SalaryDateUtil ;
import com.engine.salary.util.SalaryEntityUtil ;
import com.engine.salary.util.SalaryI18nUtil ;
@ -67,10 +72,13 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils ;
import org.springframework.jdbc.datasource.DataSourceTransactionManager ;
import org.springframework.util.StopWatch ;
import weaver.conn.RecordSet ;
import weaver.general.BaseBean ;
import weaver.hrm.User ;
import weaver.wechat.util.Utils ;
import java.math.BigDecimal ;
import java.math.RoundingMode ;
import java.util.* ;
import java.util.concurrent.BlockingDeque ;
import java.util.concurrent.CountDownLatch ;
@ -1360,4 +1368,278 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
batchSave ( list ) ;
}
}
public String result4FsdReportBatch ( FsdReportBatchQueryParam param ) {
Date salaryMonth = SalaryDateUtil . dateStrToLocalYearMonth ( param . getSalaryMonth ( ) ) ;
if ( salaryMonth = = null ) {
throw new SalaryRunTimeException ( " 日期不存在或格式错误, 正确格式yyyy-MM " ) ;
}
log . info ( " salaryReport salaryMonth{} " , param . getSalaryMonth ( ) ) ;
/ / 获取对应社保薪资项目id
BaseBean baseBean = new BaseBean ( ) ;
Long ylaogrItemId = NumberUtils . isCreatable ( baseBean . getPropValue ( " zhfsdSalary " , " ylaogr_item_id " ) ) ? Long . valueOf ( baseBean . getPropValue ( " zhfsdSalary " , " ylaogr_item_id " ) ) : 0L ;
Long yliaogrItemId = NumberUtils . isCreatable ( baseBean . getPropValue ( " zhfsdSalary " , " yliaogr_item_id " ) ) ? Long . valueOf ( baseBean . getPropValue ( " zhfsdSalary " , " yliaogr_item_id " ) ) : 0L ;
Long gjjgrItemId = NumberUtils . isCreatable ( baseBean . getPropValue ( " zhfsdSalary " , " gjjgr_item_id " ) ) ? Long . valueOf ( baseBean . getPropValue ( " zhfsdSalary " , " gjjgr_item_id " ) ) : 0L ;
List < Long > sumItemIds = Arrays . asList ( baseBean . getPropValue ( " zhfsdSalary " , " need_sum_salary_item_ids " ) . split ( " , " ) ) . stream ( ) . filter ( NumberUtils : : isCreatable ) . map ( Long : : valueOf ) . collect ( Collectors . toList ( ) ) ;
List < Long > itemIds = new ArrayList < > ( ) ;
itemIds . addAll ( sumItemIds ) ;
itemIds . add ( ylaogrItemId ) ;
itemIds . add ( yliaogrItemId ) ;
itemIds . add ( gjjgrItemId ) ;
/ / 当月数据
/ / 获取薪资核算记录
LocalDateRange dateRange = LocalDateRange . builder ( ) . fromDate ( salaryMonth ) . endDate ( salaryMonth ) . build ( ) ;
List < SalaryAcctRecordPO > acctRecordList = getSalaryAcctRecordService ( user ) . listBySalaryMonth ( dateRange ) ;
/ / 过滤未归档的数据
acctRecordList = acctRecordList . stream ( ) . filter ( record - > record . getStatus ( ) > SalaryAcctRecordStatusEnum . NOT_ARCHIVED . getValue ( ) ) . collect ( Collectors . toList ( ) ) ;
List < Long > salaryAcctRecordIds = acctRecordList . stream ( ) . map ( SalaryAcctRecordPO : : getId ) . collect ( Collectors . toList ( ) ) ;
/ / 查询薪资核算人员
List < SalaryAcctEmployeePO > totalSalaryAcctEmployeeList = new ArrayList < > ( ) ;
if ( CollectionUtils . isNotEmpty ( salaryAcctRecordIds ) ) {
totalSalaryAcctEmployeeList = getSalaryAcctEmployeeService ( user ) . listBySalaryAcctRecordIds ( salaryAcctRecordIds ) ;
}
List < Long > totalSalaryAcctEmpIds = totalSalaryAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getId ) . collect ( Collectors . toList ( ) ) ;
log . info ( " salaryReport 当月核算人数{} " , totalSalaryAcctEmpIds = = null ? 0 : totalSalaryAcctEmpIds . size ( ) ) ;
List < SalaryAcctResultPO > totalAcctResultPOList = listByAcctEmployeeIdsAndSalaryItemIds ( totalSalaryAcctEmpIds , itemIds ) ;
/ / 获取建模中的历史数据
RecordSet rs = new RecordSet ( ) ;
List < FsdReportLssjDTO > lssjList = new ArrayList < FsdReportLssjDTO > ( ) ;
rs . execute ( " select lb,xzssy,dygzrs,dygzze from uf_xcfxbzblssj where xzssy >= ' " + SalaryDateUtil . getFormatYearMonth ( salaryMonth ) + " ' and xzssy <=' " + SalaryDateUtil . getFormatYearMonth ( salaryMonth ) + " ' " ) ;
while ( rs . next ( ) ) {
lssjList . add ( FsdReportLssjDTO . builder ( )
. lb ( rs . getString ( " lb " ) )
. xzssy ( rs . getString ( " xzssy " ) )
. dygzrs ( rs . getInt ( " dygzrs " ) )
. dygzze ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " dygzze " ) ) )
. build ( ) ) ;
}
log . info ( " salaryReport 当月核算历史数据人数{} " , lssjList = = null ? 0 : lssjList . size ( ) ) ;
Map < String , List < FsdReportLssjDTO > > lssjMap = SalaryEntityUtil . group2Map ( lssjList , FsdReportLssjDTO : : getLb ) ;
List < FsdReportJSONParam > fsdReportJSONParams = JsonUtil . parseList ( param . getParam ( ) , FsdReportJSONParam . class ) ;
for ( FsdReportJSONParam rangeParam : fsdReportJSONParams ) {
List < FsdReportJSONParam > childrenParamList = rangeParam . getChildren ( ) ;
Map < String , Object > valueMap = countFsdReportDTO ( lssjMap , rangeParam , totalSalaryAcctEmployeeList , totalAcctResultPOList , itemIds , sumItemIds , ylaogrItemId , yliaogrItemId , gjjgrItemId ) ;
Map < String , Object > resultValueMap = new HashMap < > ( ) ;
resultValueMap . put ( " thisMonthEmpNums " , valueMap . get ( " empNum " ) ) ;
resultValueMap . put ( " thisMonthValue " , valueMap . get ( " value " ) ) ;
rangeParam . setResultValue ( resultValueMap ) ;
if ( ! CollectionUtils . isEmpty ( childrenParamList ) ) {
for ( FsdReportJSONParam childrenParam : childrenParamList ) {
valueMap = countFsdReportDTO ( lssjMap , childrenParam , totalSalaryAcctEmployeeList , totalAcctResultPOList , itemIds , sumItemIds , ylaogrItemId , yliaogrItemId , gjjgrItemId ) ;
resultValueMap = new HashMap < > ( ) ;
resultValueMap . put ( " thisMonthEmpNums " , valueMap . get ( " empNum " ) ) ;
resultValueMap . put ( " thisMonthValue " , valueMap . get ( " value " ) ) ;
childrenParam . setResultValue ( resultValueMap ) ;
}
}
}
/ / 本年数据
Date thisYearStartDate = SalaryDateUtil . getFirstDayDateOfYear ( salaryMonth ) ;
/ / 获取薪资核算记录
LocalDateRange thisYearDateRange = LocalDateRange . builder ( ) . fromDate ( thisYearStartDate ) . endDate ( salaryMonth ) . build ( ) ;
int monthValue = salaryMonth . getMonth ( ) + 1 ;
acctRecordList = getSalaryAcctRecordService ( user ) . listBySalaryMonth ( thisYearDateRange ) ;
/ / 过滤未归档的数据
acctRecordList = acctRecordList . stream ( ) . filter ( record - > record . getStatus ( ) > SalaryAcctRecordStatusEnum . NOT_ARCHIVED . getValue ( ) ) . collect ( Collectors . toList ( ) ) ;
salaryAcctRecordIds = acctRecordList . stream ( ) . map ( SalaryAcctRecordPO : : getId ) . collect ( Collectors . toList ( ) ) ;
/ / 查询薪资核算人员
totalSalaryAcctEmployeeList = new ArrayList < > ( ) ;
if ( CollectionUtils . isNotEmpty ( salaryAcctRecordIds ) ) {
totalSalaryAcctEmployeeList = getSalaryAcctEmployeeService ( user ) . listBySalaryAcctRecordIds ( salaryAcctRecordIds ) ;
}
totalSalaryAcctEmployeeList = getSalaryAcctEmployeeService ( user ) . listBySalaryAcctRecordIds ( salaryAcctRecordIds ) ;
totalSalaryAcctEmpIds = totalSalaryAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getId ) . collect ( Collectors . toList ( ) ) ;
log . info ( " salaryReport 本年核算人数{} " , totalSalaryAcctEmpIds = = null ? 0 : totalSalaryAcctEmpIds . size ( ) ) ;
totalAcctResultPOList = listByAcctEmployeeIdsAndSalaryItemIds ( totalSalaryAcctEmpIds , itemIds ) ;
/ / 获取建模中的历史数据
lssjList = new ArrayList < FsdReportLssjDTO > ( ) ;
rs . execute ( " select lb,xzssy,dygzrs,dygzze from uf_xcfxbzblssj where xzssy >= ' " + SalaryDateUtil . getFormatYearMonth ( thisYearStartDate ) + " ' and xzssy <=' " + SalaryDateUtil . getFormatYearMonth ( salaryMonth ) + " ' " ) ;
while ( rs . next ( ) ) {
lssjList . add ( FsdReportLssjDTO . builder ( )
. lb ( rs . getString ( " lb " ) )
. xzssy ( rs . getString ( " xzssy " ) )
. dygzrs ( rs . getInt ( " dygzrs " ) )
. dygzze ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " dygzze " ) ) )
. build ( ) ) ;
}
log . info ( " salaryReport 本年核算历史数据人数{} " , lssjList = = null ? 0 : lssjList . size ( ) ) ;
lssjMap = SalaryEntityUtil . group2Map ( lssjList , FsdReportLssjDTO : : getLb ) ;
for ( FsdReportJSONParam rangeParam : fsdReportJSONParams ) {
List < FsdReportJSONParam > childrenParamList = rangeParam . getChildren ( ) ;
Map < String , Object > valueMap = countFsdReportDTO ( lssjMap , rangeParam , totalSalaryAcctEmployeeList , totalAcctResultPOList , itemIds , sumItemIds , ylaogrItemId , yliaogrItemId , gjjgrItemId ) ;
Map < String , Object > resultValueMap = rangeParam . getResultValue ( ) ;
String avgEmpNums = ( NumberUtils . isCreatable ( Utils . null2String ( valueMap . get ( " empNum " ) ) ) ? new BigDecimal ( Utils . null2String ( valueMap . get ( " empNum " ) ) ) : new BigDecimal ( " 0 " ) )
. divide ( new BigDecimal ( monthValue ) , 2 , RoundingMode . HALF_UP ) . toString ( ) ;
resultValueMap . put ( " thisYearAveEmpNums " , avgEmpNums ) ;
resultValueMap . put ( " thisYearValue " , valueMap . get ( " value " ) ) ;
rangeParam . setResultValue ( resultValueMap ) ;
if ( ! CollectionUtils . isEmpty ( childrenParamList ) ) {
for ( FsdReportJSONParam childrenParam : childrenParamList ) {
valueMap = countFsdReportDTO ( lssjMap , childrenParam , totalSalaryAcctEmployeeList , totalAcctResultPOList , itemIds , sumItemIds , ylaogrItemId , yliaogrItemId , gjjgrItemId ) ;
resultValueMap = childrenParam . getResultValue ( ) ;
avgEmpNums = ( NumberUtils . isCreatable ( Utils . null2String ( valueMap . get ( " empNum " ) ) ) ? new BigDecimal ( Utils . null2String ( valueMap . get ( " empNum " ) ) ) : new BigDecimal ( " 0 " ) )
. divide ( new BigDecimal ( monthValue ) , 2 , RoundingMode . HALF_UP ) . toString ( ) ;
resultValueMap . put ( " thisYearAveEmpNums " , avgEmpNums ) ;
resultValueMap . put ( " thisYearValue " , valueMap . get ( " value " ) ) ;
childrenParam . setResultValue ( resultValueMap ) ;
}
}
}
/ / 上年数据
DateTime lastYearStartDate = DateUtil . offset ( thisYearStartDate , DateField . YEAR , - 1 ) ;
DateTime lastYearEndDate = DateUtil . offset ( salaryMonth , DateField . YEAR , - 1 ) ;
/ / 获取薪资核算记录
LocalDateRange lastYearDateRange = LocalDateRange . builder ( ) . fromDate ( lastYearStartDate ) . endDate ( lastYearEndDate ) . build ( ) ;
acctRecordList = getSalaryAcctRecordService ( user ) . listBySalaryMonth ( lastYearDateRange ) ;
/ / 过滤未归档的数据
acctRecordList = acctRecordList . stream ( ) . filter ( record - > record . getStatus ( ) > SalaryAcctRecordStatusEnum . NOT_ARCHIVED . getValue ( ) ) . collect ( Collectors . toList ( ) ) ;
salaryAcctRecordIds = acctRecordList . stream ( ) . map ( SalaryAcctRecordPO : : getId ) . collect ( Collectors . toList ( ) ) ;
/ / 查询薪资核算人员
totalSalaryAcctEmployeeList = new ArrayList < > ( ) ;
if ( CollectionUtils . isNotEmpty ( salaryAcctRecordIds ) ) {
totalSalaryAcctEmployeeList = getSalaryAcctEmployeeService ( user ) . listBySalaryAcctRecordIds ( salaryAcctRecordIds ) ;
}
totalSalaryAcctEmployeeList = getSalaryAcctEmployeeService ( user ) . listBySalaryAcctRecordIds ( salaryAcctRecordIds ) ;
totalSalaryAcctEmpIds = totalSalaryAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getId ) . collect ( Collectors . toList ( ) ) ;
log . info ( " salaryReport 去年核算人数{} " , totalSalaryAcctEmpIds = = null ? 0 : totalSalaryAcctEmpIds . size ( ) ) ;
totalAcctResultPOList = listByAcctEmployeeIdsAndSalaryItemIds ( totalSalaryAcctEmpIds , itemIds ) ;
/ / 获取建模中的历史数据
lssjList = new ArrayList < FsdReportLssjDTO > ( ) ;
rs . execute ( " select lb,xzssy,dygzrs,dygzze from uf_xcfxbzblssj where xzssy >= ' " + SalaryDateUtil . getFormatYearMonth ( lastYearStartDate ) + " ' and xzssy <=' " + SalaryDateUtil . getFormatYearMonth ( lastYearEndDate ) + " ' " ) ;
while ( rs . next ( ) ) {
lssjList . add ( FsdReportLssjDTO . builder ( )
. lb ( rs . getString ( " lb " ) )
. xzssy ( rs . getString ( " xzssy " ) )
. dygzrs ( rs . getInt ( " dygzrs " ) )
. dygzze ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " dygzze " ) ) )
. build ( ) ) ;
}
log . info ( " salaryReport 去年核算历史数据人数{} " , lssjList = = null ? 0 : lssjList . size ( ) ) ;
lssjMap = SalaryEntityUtil . group2Map ( lssjList , FsdReportLssjDTO : : getLb ) ;
for ( FsdReportJSONParam rangeParam : fsdReportJSONParams ) {
List < FsdReportJSONParam > childrenParamList = rangeParam . getChildren ( ) ;
Map < String , Object > valueMap = countFsdReportDTO ( lssjMap , rangeParam , totalSalaryAcctEmployeeList , totalAcctResultPOList , itemIds , sumItemIds , ylaogrItemId , yliaogrItemId , gjjgrItemId ) ;
Map < String , Object > resultValueMap = rangeParam . getResultValue ( ) ;
BigDecimal avgEmpNumsVal = ( NumberUtils . isCreatable ( Utils . null2String ( valueMap . get ( " empNum " ) ) ) ? new BigDecimal ( Utils . null2String ( valueMap . get ( " empNum " ) ) ) : new BigDecimal ( " 0 " ) )
. divide ( new BigDecimal ( " 12 " ) , 2 , RoundingMode . HALF_UP ) ;
resultValueMap . put ( " lastYearAveEmpNums " , avgEmpNumsVal . toString ( ) ) ;
resultValueMap . put ( " lastYearValue " , valueMap . get ( " value " ) ) ;
/ / 获取今年平均人数和金额
BigDecimal thisYearAveEmpNums = SalaryEntityUtil . string2BigDecimalDefault0 ( Utils . null2String ( resultValueMap . get ( " thisYearAveEmpNums " ) ) ) ;
BigDecimal thisYearValue = SalaryEntityUtil . string2BigDecimalDefault0 ( Utils . null2String ( resultValueMap . get ( " thisYearValue " ) ) ) ;
BigDecimal lastYearValue = SalaryEntityUtil . string2BigDecimalDefault0 ( Utils . null2String ( valueMap . get ( " value " ) ) ) ;
resultValueMap . put ( " empNumsCy " , thisYearAveEmpNums . subtract ( avgEmpNumsVal ) . toString ( ) ) ;
resultValueMap . put ( " valueCy " , thisYearValue . subtract ( lastYearValue ) . toString ( ) ) ;
rangeParam . setResultValue ( resultValueMap ) ;
if ( ! CollectionUtils . isEmpty ( childrenParamList ) ) {
for ( FsdReportJSONParam childrenParam : childrenParamList ) {
valueMap = countFsdReportDTO ( lssjMap , childrenParam , totalSalaryAcctEmployeeList , totalAcctResultPOList , itemIds , sumItemIds , ylaogrItemId , yliaogrItemId , gjjgrItemId ) ;
resultValueMap = childrenParam . getResultValue ( ) ;
avgEmpNumsVal = ( NumberUtils . isCreatable ( Utils . null2String ( valueMap . get ( " empNum " ) ) ) ? new BigDecimal ( Utils . null2String ( valueMap . get ( " empNum " ) ) ) : new BigDecimal ( " 0 " ) )
. divide ( new BigDecimal ( " 12 " ) , 2 , RoundingMode . HALF_UP ) ;
resultValueMap . put ( " lastYearAveEmpNums " , avgEmpNumsVal . toString ( ) ) ;
resultValueMap . put ( " lastYearValue " , valueMap . get ( " value " ) ) ;
/ / 获取今年平均人数和金额
thisYearAveEmpNums = SalaryEntityUtil . string2BigDecimalDefault0 ( Utils . null2String ( resultValueMap . get ( " thisYearAveEmpNums " ) ) ) ;
thisYearValue = SalaryEntityUtil . string2BigDecimalDefault0 ( Utils . null2String ( resultValueMap . get ( " thisYearValue " ) ) ) ;
lastYearValue = SalaryEntityUtil . string2BigDecimalDefault0 ( Utils . null2String ( valueMap . get ( " value " ) ) ) ;
resultValueMap . put ( " empNumsCy " , thisYearAveEmpNums . subtract ( avgEmpNumsVal ) . toString ( ) ) ;
resultValueMap . put ( " valueCy " , thisYearValue . subtract ( lastYearValue ) . toString ( ) ) ;
childrenParam . setResultValue ( resultValueMap ) ;
}
}
}
fsdReportJSONParams . stream ( ) . forEach ( p - > {
if ( CollectionUtils . isEmpty ( p . getChildren ( ) ) ) {
p . setRule ( null ) ;
} else {
List < FsdReportJSONParam > children = p . getChildren ( ) ;
for ( FsdReportJSONParam pa : children ) {
pa . setRule ( null ) ;
}
p . setRule ( null ) ;
}
} ) ;
String s = JsonUtil . toJsonString ( fsdReportJSONParams ) ;
return s ;
}
private Map < String , Object > countFsdReportDTO ( Map < String , List < FsdReportLssjDTO > > lssjMap , FsdReportJSONParam rangeParam , List < SalaryAcctEmployeePO > totalSalaryAcctEmployeeList ,
List < SalaryAcctResultPO > totalAcctResultPOList , List < Long > itemIds ,
List < Long > sumItemIds , Long ylaogrItemId , Long yliaogrItemId , Long gjjgrItemId ) {
List < SalaryAcctEmployeePO > salaryAcctEmployeeList = new ArrayList < > ( ) ;
salaryAcctEmployeeList . addAll ( totalSalaryAcctEmployeeList ) ;
FsdReportRuleJSONParam rule = rangeParam . getRule ( ) ;
/ / 根据条件过滤核算人员
if ( CollectionUtils . isNotEmpty ( rule . getSubcomids ( ) ) ) {
salaryAcctEmployeeList = salaryAcctEmployeeList . stream ( ) . filter ( salaryAcctEmployee - > rule . getSubcomids ( ) . contains ( salaryAcctEmployee . getSubcompanyId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
}
if ( CollectionUtils . isNotEmpty ( rule . getDeptids ( ) ) ) {
salaryAcctEmployeeList = salaryAcctEmployeeList . stream ( ) . filter ( salaryAcctEmployee - > rule . getDeptids ( ) . contains ( salaryAcctEmployee . getDepartmentId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
}
if ( CollectionUtils . isNotEmpty ( rule . getJobtitleids ( ) ) ) {
salaryAcctEmployeeList = salaryAcctEmployeeList . stream ( ) . filter ( salaryAcctEmployee - > rule . getJobtitleids ( ) . contains ( salaryAcctEmployee . getJobtitleId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
}
if ( CollectionUtils . isNotEmpty ( rule . getNosubcomids ( ) ) ) {
salaryAcctEmployeeList = salaryAcctEmployeeList . stream ( ) . filter ( salaryAcctEmployee - > ! rule . getNosubcomids ( ) . contains ( salaryAcctEmployee . getSubcompanyId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
}
if ( CollectionUtils . isNotEmpty ( rule . getNodeptids ( ) ) ) {
salaryAcctEmployeeList = salaryAcctEmployeeList . stream ( ) . filter ( salaryAcctEmployee - > ! rule . getNodeptids ( ) . contains ( salaryAcctEmployee . getDepartmentId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
}
if ( CollectionUtils . isNotEmpty ( rule . getNojobtitleids ( ) ) ) {
salaryAcctEmployeeList = salaryAcctEmployeeList . stream ( ) . filter ( salaryAcctEmployee - > ! rule . getNojobtitleids ( ) . contains ( salaryAcctEmployee . getJobtitleId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
}
Map < String , Object > resultMap = new HashMap < > ( ) ;
List < FsdReportLssjDTO > lssjList = lssjMap . get ( rangeParam . getName ( ) ) ;
Integer lsEmps = 0 ;
BigDecimal lsValSum = new BigDecimal ( " 0 " ) ;
if ( CollectionUtils . isNotEmpty ( lssjList ) ) {
lsEmps = lssjList . stream ( ) . map ( ls - > ls . getDygzrs ( ) ) . filter ( rs - > rs ! = null ) . reduce ( new Integer ( " 0 " ) , Integer : : sum ) ;
lsValSum = lssjList . stream ( ) . map ( ls - > ls . getDygzze ( ) ) . filter ( val - > val ! = null ) . reduce ( new BigDecimal ( " 0 " ) , BigDecimal : : add ) ;
}
if ( CollectionUtils . isEmpty ( salaryAcctEmployeeList ) ) {
resultMap . put ( " empNum " , lsEmps . toString ( ) ) ;
resultMap . put ( " value " , lsValSum . toString ( ) ) ;
return resultMap ;
}
List < Long > salaryAcctEmpIds = salaryAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getId ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctResultPO > acctResultPOList = totalAcctResultPOList . stream ( ) . filter ( result - > salaryAcctEmpIds . contains ( result . getSalaryAcctEmpId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
Map < Long , List < SalaryAcctResultPO > > acctResultGroupByAcctEmpId = SalaryEntityUtil . group2Map ( acctResultPOList , SalaryAcctResultPO : : getSalaryAcctEmpId ) ;
BigDecimal sumValue = new BigDecimal ( " 0 " ) ;
for ( Map . Entry < Long , List < SalaryAcctResultPO > > entry : acctResultGroupByAcctEmpId . entrySet ( ) ) {
Map < Long , String > singleResultMap = SalaryEntityUtil . convert2Map ( entry . getValue ( ) , SalaryAcctResultPO : : getSalaryItemId , result - > Utils . null2String ( result . getResultValue ( ) ) ) ;
/ / 养老单位 = 养老个人 / 8 % * 16 %
BigDecimal ylaogr = SalaryEntityUtil . string2BigDecimalDefault0 ( singleResultMap . get ( ylaogrItemId ) ) ;
BigDecimal ylaodw = ylaogr . divide ( new BigDecimal ( " 0.08 " ) , 15 , RoundingMode . HALF_UP ) . multiply ( new BigDecimal ( " 0.16 " ) ) . setScale ( 2 , BigDecimal . ROUND_HALF_UP ) ;
/ / 医疗单位 = 医疗个人 / 2 % * 8 %
BigDecimal yliaogr = SalaryEntityUtil . string2BigDecimalDefault0 ( singleResultMap . get ( yliaogrItemId ) ) ;
BigDecimal yliaodw = yliaogr . divide ( new BigDecimal ( " 0.02 " ) , 15 , RoundingMode . HALF_UP ) . multiply ( new BigDecimal ( " 0.08 " ) ) . setScale ( 2 , BigDecimal . ROUND_HALF_UP ) ;
/ / 大额医疗 = 8元 / 人 ( 有医疗保险个人的 , 无医疗保险个人为0 )
String yliaogrStr = singleResultMap . get ( yliaogrItemId ) ;
BigDecimal deyl = new BigDecimal ( " 0 " ) ;
if ( yliaogrStr ! = null & & NumberUtils . isCreatable ( yliaogrStr ) & & new BigDecimal ( yliaogrStr ) . compareTo ( new BigDecimal ( " 0 " ) ) ! = 0 ) {
deyl = new BigDecimal ( " 8 " ) ;
}
/ / 失业单位 = 养老个人 / 8 % * 0 . 7 %
BigDecimal syedw = ylaogr . divide ( new BigDecimal ( " 0.08 " ) , 15 , RoundingMode . HALF_UP ) . multiply ( new BigDecimal ( " 0.007 " ) ) . setScale ( 2 , BigDecimal . ROUND_HALF_UP ) ;
/ / 工伤单位 = 养老个人 / 8 % * 0 . 56 %
BigDecimal gsdw = ylaogr . divide ( new BigDecimal ( " 0.08 " ) , 15 , RoundingMode . HALF_UP ) . multiply ( new BigDecimal ( " 0.0056 " ) ) . setScale ( 2 , BigDecimal . ROUND_HALF_UP ) ;
/ / 公积金单位 = 公积金个人 / 5 % * 12 %
BigDecimal gjjgr = SalaryEntityUtil . string2BigDecimalDefault0 ( singleResultMap . get ( gjjgrItemId ) ) ;
BigDecimal gjjdw = gjjgr . divide ( new BigDecimal ( " 0.05 " ) , 15 , RoundingMode . HALF_UP ) . multiply ( new BigDecimal ( " 0.12 " ) ) . setScale ( 2 , BigDecimal . ROUND_HALF_UP ) ;
sumValue = sumValue . add ( ylaodw ) . add ( yliaodw ) . add ( deyl ) . add ( syedw ) . add ( gsdw ) . add ( gjjdw ) ;
for ( Long itemId : sumItemIds ) {
sumValue = sumValue . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( singleResultMap . get ( itemId ) ) ) ;
}
}
resultMap . put ( " empNum " , salaryAcctEmpIds . size ( ) + lsEmps ) ;
resultMap . put ( " value " , sumValue . add ( lsValSum ) . toString ( ) ) ;
return resultMap ;
}
}