@ -1859,7 +1859,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List < SalaryAcctRecordPO > salaryAcctRecordList = getSalaryAcctRecordService ( user ) . listBySalaryMonth ( LocalDateRange . builder ( ) . fromDate ( salaryMonthDate ) . endDate ( salaryMonthDate ) . build ( ) ) ;
/ / 账套范围
List < Long > sobIds = Arrays . stream ( baseBean . getPropValue ( " ltSalaryReport " , " bmgzjjmxbjt_sob_ids " ) . split ( " , " ) ) . filter ( NumberUtils : : isCreatable ) . map ( Long : : valueOf ) . collect ( Collectors . toList ( ) ) ;
salaryAcctRecordList = salaryAcctRecordList . stream ( ) . filter ( sobId - > sobIds . contains ( sobId ) ) . collect ( Collectors . toList ( ) ) ;
salaryAcctRecordList = salaryAcctRecordList . stream ( ) . filter ( record - > sobIds . contains ( record . getSalarySobId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
if ( CollectionUtils . isEmpty ( salaryAcctRecordList ) ) {
return " success " ;
}
@ -2050,7 +2050,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List < SalaryAcctRecordPO > salaryAcctRecordList = getSalaryAcctRecordService ( user ) . listBySalaryMonth ( LocalDateRange . builder ( ) . fromDate ( salaryMonthDate ) . endDate ( salaryMonthDate ) . build ( ) ) ;
/ / 账套范围
List < Long > sobIds = Arrays . stream ( baseBean . getPropValue ( " ltSalaryReport " , " bmgzjjmxbsf_sob_ids " ) . split ( " , " ) ) . filter ( NumberUtils : : isCreatable ) . map ( Long : : valueOf ) . collect ( Collectors . toList ( ) ) ;
salaryAcctRecordList = salaryAcctRecordList . stream ( ) . filter ( sobId - > sobIds . contains ( sobId ) ) . collect ( Collectors . toList ( ) ) ;
salaryAcctRecordList = salaryAcctRecordList . stream ( ) . filter ( record - > sobIds . contains ( record . getSalarySobId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
if ( CollectionUtils . isEmpty ( salaryAcctRecordList ) ) {
return " success " ;
}
@ -2179,4 +2179,450 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
}
return " success " ;
}
/ * *
* 联特表5 - 生成人员明细工资计提表
* @param salaryMonth
* @return
* /
@Override
public String ltGenRymxgzjt ( String salaryMonth ) {
if ( ! SalaryDateUtil . checkYearMonth ( salaryMonth ) ) {
throw new SalaryRunTimeException ( " 年月错误 " ) ;
}
YearMonth yearMonth = SalaryDateUtil . String2YearMonth ( salaryMonth ) ;
BaseBean baseBean = new BaseBean ( ) ;
/ / 查询生成的报表映射关系
String reportConfigStr = baseBean . getPropValue ( " ltSalaryReport " , " rymxgzjtb_ys_config " ) ;
List < LtSalaryReportConfigDTO > reportConfigs = JsonUtil . parseList ( reportConfigStr , LtSalaryReportConfigDTO . class ) ;
List < Long > salaryItemIds = reportConfigs . stream ( ) . map ( LtSalaryReportConfigDTO : : getItem ) . collect ( Collectors . toList ( ) ) ;
List < SalaryItemPO > salaryItemList = getSalaryItemService ( user ) . listByIds ( salaryItemIds ) ;
/ / 查询薪资核算结果 ( 包含未归档 )
Date salaryMonthDate = SalaryDateUtil . localDateToDate ( yearMonth . atDay ( 1 ) ) ;
List < SalaryAcctRecordPO > salaryAcctRecordList = getSalaryAcctRecordService ( user ) . listBySalaryMonth ( LocalDateRange . builder ( ) . fromDate ( salaryMonthDate ) . endDate ( salaryMonthDate ) . build ( ) ) ;
/ / 账套范围
List < Long > sobIds = Arrays . stream ( baseBean . getPropValue ( " ltSalaryReport " , " rymxgzjtb_sob_ids " ) . split ( " , " ) ) . filter ( NumberUtils : : isCreatable ) . map ( Long : : valueOf ) . collect ( Collectors . toList ( ) ) ;
salaryAcctRecordList = salaryAcctRecordList . stream ( ) . filter ( sob - > sobIds . contains ( sob . getSalarySobId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
if ( CollectionUtils . isEmpty ( salaryAcctRecordList ) ) {
return " success " ;
}
List < Long > salaryAcctRecordIds = salaryAcctRecordList . stream ( ) . map ( SalaryAcctRecordPO : : getId ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctEmployeePO > salaryAcctEmployeeList = getSalaryAcctEmployeeService ( user ) . listBySalaryAcctRecordIds ( salaryAcctRecordIds ) ;
List < Long > employeeIdList = salaryAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getEmployeeId ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < DataCollectionEmployee > employeeList = getSalaryEmployeeService ( user ) . listByIds ( employeeIdList ) ;
/ / 查询薪资核算结果
List < Long > salaryAcctEmpIds = salaryAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getId ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctResultPO > acctResultList = getSalaryAcctResultService ( user ) . listByAcctEmployeeIdsAndSalaryItemIds ( salaryAcctEmpIds , salaryItemIds ) ;
List < TaxAgentPO > taxAgentPOS = getTaxAgentService ( user ) . listAll ( ) ;
List < Map < String , Object > > acctResultMap = SalaryAcctResultBO . buildTableData ( salaryItemList , Collections . emptyList ( ) , employeeList , salaryAcctEmployeeList ,
acctResultList , taxAgentPOS , Collections . emptySet ( ) , Collections . emptyMap ( ) , Collections . emptyMap ( ) , false ) ;
Map < String , Map < String , Object > > acctResultMapByAcctEmpId = SalaryEntityUtil . convert2Map ( acctResultMap , m - > Utils . null2String ( m . get ( " id " ) ) ) ;
/ / 查询员工薪资档案
List < SalaryArchivePO > salaryArchiveList = getSalaryArchiveService ( user ) . listSome ( SalaryArchivePO . builder ( ) . employeeIds ( employeeIdList ) . build ( ) ) ;
Map < String , Long > archiveIdMap = SalaryEntityUtil . convert2Map ( salaryArchiveList , archive - > archive . getTaxAgentId ( ) + " _ " + archive . getEmployeeId ( ) , archive - > archive . getId ( ) ) ;
List < Long > salaryArchiveIds = salaryArchiveList . stream ( ) . map ( SalaryArchivePO : : getId ) . collect ( Collectors . toList ( ) ) ;
/ / 查询档案中对应的绩效值
Long jdItemId = SalaryEntityUtil . string2LongDefault0 ( baseBean . getPropValue ( " ltSalaryReport " , " rymxgzjtb_jdjxgzbz_item_id " ) ) ;
Long bndItemId = SalaryEntityUtil . string2LongDefault0 ( baseBean . getPropValue ( " ltSalaryReport " , " rymxgzjtb_bndjxgzbz_item_id " ) ) ;
Long nzjItemId = SalaryEntityUtil . string2LongDefault0 ( baseBean . getPropValue ( " ltSalaryReport " , " rymxgzjtb_nzjbz_item_id " ) ) ;
List < Long > archiveItemIds = Arrays . asList ( jdItemId , bndItemId , nzjItemId ) ;
Date lastDayOfMonth = SalaryDateUtil . getLastDayOfMonth ( salaryMonthDate ) ;
List < SalaryArchiveItemPO > salaryArchiveItemCurrentList = getSalaryArchiveItemService ( user ) . getEffectiveItemListBySalaryMonth ( salaryArchiveIds , archiveItemIds , lastDayOfMonth ) ;
Map < Long , List < SalaryArchiveItemPO > > archiveItemGroupByArchiveId = SalaryEntityUtil . group2Map ( salaryArchiveItemCurrentList , archive - > archive . getSalaryArchiveId ( ) ) ;
/ / 查询快照表中人员信息
Map < Long , DataCollectionEmployee > employeeMap = SalaryEntityUtil . convert2Map ( getSalaryEmployeeService ( user ) . snapshot ( employeeIdList , SalaryDateUtil . localDateToDate ( yearMonth . atDay ( 1 ) ) ) , DataCollectionEmployee : : getEmployeeId ) ;
/ / 入库
/ / 删除建模数据
RecordSet rs = new RecordSet ( ) ;
rs . execute ( " delete from uf_mxgzbjt where qj = ' " + salaryMonth + " ' " ) ;
/ / 插入建模
String currDate = String . format ( " '%s' " , TimeUtil . getCurrentDateString ( ) ) ;
SimpleDateFormat sdf = new SimpleDateFormat ( " HH:mm:ss " ) ;
String currTime = String . format ( " '%s' " , sdf . format ( new Date ( ) ) ) ;
/ / 获取建模模块id
String modeId = baseBean . getPropValue ( " ltSalaryReport " , " rymxgzjtb_mode_id " ) ;
/ / 先插入一条数据
SalaryAcctEmployeePO salaryAcctEmp = salaryAcctEmployeeList . get ( 0 ) ;
StringBuilder firstSb = new StringBuilder ( ) ;
String fieldStr = reportConfigs . stream ( ) . map ( LtSalaryReportConfigDTO : : getField ) . collect ( Collectors . joining ( " , " ) ) ;
DataCollectionEmployee employee = employeeMap . getOrDefault ( salaryAcctEmp . getEmployeeId ( ) , DataCollectionEmployee . builder ( ) . build ( ) ) ;
/ / 获取员工档案绩效工资
Long archiveId = archiveIdMap . get ( salaryAcctEmp . getTaxAgentId ( ) + " _ " + salaryAcctEmp . getEmployeeId ( ) ) ;
List < SalaryArchiveItemPO > salaryArchiveItemList = archiveItemGroupByArchiveId . get ( archiveId = = null ? 0L : archiveId ) ;
String jx = " 0 " ;
String jdjx = " 0 " ;
String bndjx = " 0 " ;
String nzj = " 0 " ;
if ( CollectionUtils . isNotEmpty ( salaryArchiveItemList ) ) {
Map < Long , String > archiveValueMap = SalaryEntityUtil . convert2Map ( salaryArchiveItemList , SalaryArchiveItemPO : : getSalaryItemId , SalaryArchiveItemPO : : getItemValue ) ;
BigDecimal jdBzValue = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( jdItemId ) ) ;
BigDecimal bndBzValue = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( bndItemId ) ) ;
int monthValue = yearMonth . getMonthValue ( ) ;
/ / 绩效
if ( monthValue > = 1 & & monthValue < = 6 ) {
/ / 1 - 6月 , 季度绩效工资标准 / 3 + 半年度绩效工资标准 / 6 档案
jx = jdBzValue . divide ( new BigDecimal ( " 3 " ) , 15 , RoundingMode . HALF_UP )
. add ( bndBzValue . divide ( new BigDecimal ( " 6 " ) , 15 , RoundingMode . HALF_UP ) )
. setScale ( 2 , RoundingMode . HALF_UP ) . toPlainString ( ) ;
} else if ( monthValue > = 7 & & monthValue < = 9 ) {
/ / 7 - 9月 , 季度绩效工资标准 / 3 档案
jx = jdBzValue . divide ( new BigDecimal ( " 3 " ) , 2 , RoundingMode . HALF_UP ) . toPlainString ( ) ;
}
/ / 季度绩效
if ( monthValue = = 3 | | monthValue = = 6 | | monthValue = = 9 ) {
jdjx = jdBzValue . toString ( ) ;
/ / 半年度绩效
if ( monthValue = = 6 ) {
bndjx = bndBzValue . toString ( ) ;
}
}
/ / 年终奖
if ( monthValue = = 12 ) {
nzj = bndBzValue . toString ( ) ;
}
}
/ / 获取薪资核算结果
Map < String , Object > singleAcctResultMap = acctResultMapByAcctEmpId . get ( Utils . null2String ( salaryAcctEmp . getId ( ) ) ) ;
firstSb . append ( " insert into uf_mxgzbjt(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj, " + fieldStr + " ) values ( " ) ;
firstSb . append ( modeId ) . append ( " ,1,0, " ) . append ( currDate ) . append ( " , " ) . append ( currTime ) . append ( " ,' " )
. append ( employee . getWorkcode ( ) ) . append ( " ', " )
. append ( employee . getEmployeeId ( ) ) . append ( " , " )
. append ( employee . getSubcompanyid ( ) ) . append ( " , " )
. append ( employee . getDepartmentId ( ) ) . append ( " ,' " )
. append ( salaryMonth ) . append ( " ',' " )
. append ( Utils . null2String ( employee . getLtCbzx ( ) ) ) . append ( " ', " )
. append ( jx ) . append ( " , " ) . append ( jdjx ) . append ( " , " ) . append ( bndjx ) . append ( " , " ) . append ( nzj ) ;
for ( LtSalaryReportConfigDTO dto : reportConfigs ) {
BigDecimal val = new BigDecimal ( " 0 " ) ;
if ( singleAcctResultMap ! = null ) {
String valStr = Utils . null2String ( singleAcctResultMap . getOrDefault ( Utils . null2String ( dto . getItem ( ) ) , " 0 " ) ) ;
if ( NumberUtils . isCreatable ( valStr ) ) {
val = new BigDecimal ( valStr ) ;
}
}
firstSb . append ( " , " ) . append ( val . toPlainString ( ) ) ;
}
firstSb . append ( " ) " ) ;
rs . execute ( firstSb . toString ( ) ) ;
salaryAcctEmployeeList . remove ( 0 ) ;
/ / 获取最大值 作为权限重构的起始id
rs . execute ( " select max(id) from uf_mxgzbjt " ) ;
int minId = 0 ;
if ( rs . next ( ) ) {
minId = rs . getInt ( 1 ) ;
}
int maxId = minId + salaryAcctEmployeeList . size ( ) ;
List < List < SalaryAcctEmployeePO > > partition = Lists . partition ( salaryAcctEmployeeList , 500 ) ;
for ( List < SalaryAcctEmployeePO > part : partition ) {
StringBuilder sb = new StringBuilder ( ) ;
sb . append ( " insert into uf_mxgzbjt(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj, " + fieldStr + " ) values " ) ;
for ( SalaryAcctEmployeePO salaryAcctEmployeePO : part ) {
employee = employeeMap . getOrDefault ( salaryAcctEmployeePO . getEmployeeId ( ) , DataCollectionEmployee . builder ( ) . build ( ) ) ;
singleAcctResultMap = acctResultMapByAcctEmpId . get ( Utils . null2String ( salaryAcctEmployeePO . getId ( ) ) ) ;
/ / 获取员工档案绩效工资
archiveId = archiveIdMap . get ( salaryAcctEmployeePO . getTaxAgentId ( ) + " _ " + salaryAcctEmployeePO . getEmployeeId ( ) ) ;
salaryArchiveItemList = archiveItemGroupByArchiveId . get ( archiveId = = null ? 0L : archiveId ) ;
jx = " 0 " ;
jdjx = " 0 " ;
bndjx = " 0 " ;
nzj = " 0 " ;
if ( CollectionUtils . isNotEmpty ( salaryArchiveItemList ) ) {
Map < Long , String > archiveValueMap = SalaryEntityUtil . convert2Map ( salaryArchiveItemList , SalaryArchiveItemPO : : getSalaryItemId , SalaryArchiveItemPO : : getItemValue ) ;
BigDecimal jdBzValue = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( jdItemId ) ) ;
BigDecimal bndBzValue = SalaryEntityUtil . string2BigDecimalDefault0 ( archiveValueMap . get ( bndItemId ) ) ;
int monthValue = yearMonth . getMonthValue ( ) ;
/ / 绩效
if ( monthValue > = 1 & & monthValue < = 6 ) {
/ / 1 - 6月 , 季度绩效工资标准 / 3 + 半年度绩效工资标准 / 6 档案
jx = jdBzValue . divide ( new BigDecimal ( " 3 " ) , 15 , RoundingMode . HALF_UP )
. add ( bndBzValue . divide ( new BigDecimal ( " 6 " ) , 15 , RoundingMode . HALF_UP ) )
. setScale ( 2 , RoundingMode . HALF_UP ) . toPlainString ( ) ;
} else if ( monthValue > = 7 & & monthValue < = 9 ) {
/ / 7 - 9月 , 季度绩效工资标准 / 3 档案
jx = jdBzValue . divide ( new BigDecimal ( " 3 " ) , 2 , RoundingMode . HALF_UP ) . toPlainString ( ) ;
}
/ / 季度绩效
if ( monthValue = = 3 | | monthValue = = 6 | | monthValue = = 9 ) {
jdjx = jdBzValue . toString ( ) ;
/ / 半年度绩效
if ( monthValue = = 6 ) {
bndjx = bndBzValue . toString ( ) ;
}
}
/ / 年终奖
if ( monthValue = = 12 ) {
nzj = bndBzValue . toString ( ) ;
}
}
sb . append ( " ( " ) . append ( modeId ) . append ( " ,1,0, " ) . append ( currDate ) . append ( " , " ) . append ( currTime ) . append ( " ,' " )
. append ( employee . getWorkcode ( ) ) . append ( " ', " )
. append ( employee . getEmployeeId ( ) ) . append ( " , " )
. append ( employee . getSubcompanyid ( ) ) . append ( " , " )
. append ( employee . getDepartmentId ( ) ) . append ( " ,' " )
. append ( salaryMonth ) . append ( " ',' " )
. append ( Utils . null2String ( employee . getLtCbzx ( ) ) ) . append ( " ', " )
. append ( jx ) . append ( " , " ) . append ( jdjx ) . append ( " , " ) . append ( bndjx ) . append ( " , " ) . append ( nzj ) ;
for ( LtSalaryReportConfigDTO dto : reportConfigs ) {
BigDecimal val = new BigDecimal ( " 0 " ) ;
if ( singleAcctResultMap ! = null ) {
String valStr = Utils . null2String ( singleAcctResultMap . getOrDefault ( Utils . null2String ( dto . getItem ( ) ) , " 0 " ) ) ;
if ( NumberUtils . isCreatable ( valStr ) ) {
val = new BigDecimal ( valStr ) ;
}
}
sb . append ( " , " ) . append ( val . toPlainString ( ) ) ;
}
sb . append ( " ), " ) ;
}
rs . execute ( sb . substring ( 0 , sb . length ( ) - 1 ) . toString ( ) ) ;
}
/ / 权限重构
log . info ( " 人员明细工资计提min{} max{} " , minId , maxId ) ;
if ( modeId ! = null & & NumberUtils . isCreatable ( modeId ) ) {
Integer modeIdValue = Integer . valueOf ( modeId ) ;
for ( int i = minId ; i < = maxId ; i + + ) {
ModeRightInfo ModeRightInfo = new ModeRightInfo ( ) ;
ModeRightInfo . setNewRight ( true ) ;
ModeRightInfo . editModeDataShare ( 1 , modeIdValue , i ) ;
}
}
return " success " ;
}
/ * *
* 联特表6 - 生成人员明细工资实发表
* @param salaryMonth
* @return
* /
@Override
public String ltGenRymxgzsf ( String salaryMonth ) {
if ( ! SalaryDateUtil . checkYearMonth ( salaryMonth ) ) {
throw new SalaryRunTimeException ( " 年月错误 " ) ;
}
YearMonth yearMonth = SalaryDateUtil . String2YearMonth ( salaryMonth ) ;
BaseBean baseBean = new BaseBean ( ) ;
/ / 查询生成的报表映射关系
String reportConfigStr = baseBean . getPropValue ( " ltSalaryReport " , " rymxgzsfb_ys_config " ) ;
List < LtSalaryReportConfigDTO > reportConfigs = JsonUtil . parseList ( reportConfigStr , LtSalaryReportConfigDTO . class ) ;
List < Long > salaryItemIds = reportConfigs . stream ( ) . map ( LtSalaryReportConfigDTO : : getItem ) . collect ( Collectors . toList ( ) ) ;
List < SalaryItemPO > salaryItemList = getSalaryItemService ( user ) . listByIds ( salaryItemIds ) ;
/ / 查询薪资核算结果 ( 包含未归档 )
Date salaryMonthDate = SalaryDateUtil . localDateToDate ( yearMonth . atDay ( 1 ) ) ;
List < SalaryAcctRecordPO > salaryAcctRecordList = getSalaryAcctRecordService ( user ) . listBySalaryMonth ( LocalDateRange . builder ( ) . fromDate ( salaryMonthDate ) . endDate ( salaryMonthDate ) . build ( ) ) ;
/ / 月薪账套范围
List < Long > sobIds = Arrays . stream ( baseBean . getPropValue ( " ltSalaryReport " , " rymxgzsfb_sob_ids " ) . split ( " , " ) ) . filter ( NumberUtils : : isCreatable ) . map ( Long : : valueOf ) . collect ( Collectors . toList ( ) ) ;
salaryAcctRecordList = salaryAcctRecordList . stream ( ) . filter ( sob - > sobIds . contains ( sob . getSalarySobId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
if ( CollectionUtils . isEmpty ( salaryAcctRecordList ) ) {
return " success " ;
}
List < Long > salaryAcctRecordIds = salaryAcctRecordList . stream ( ) . map ( SalaryAcctRecordPO : : getId ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctEmployeePO > salaryAcctEmployeeList = getSalaryAcctEmployeeService ( user ) . listBySalaryAcctRecordIds ( salaryAcctRecordIds ) ;
List < Long > employeeIdList = salaryAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getEmployeeId ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < DataCollectionEmployee > employeeList = getSalaryEmployeeService ( user ) . listByIds ( employeeIdList ) ;
/ / 查询薪资核算结果
List < Long > salaryAcctEmpIds = salaryAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getId ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctResultPO > acctResultList = getSalaryAcctResultService ( user ) . listByAcctEmployeeIdsAndSalaryItemIds ( salaryAcctEmpIds , salaryItemIds ) ;
List < TaxAgentPO > taxAgentPOS = getTaxAgentService ( user ) . listAll ( ) ;
List < Map < String , Object > > acctResultMap = SalaryAcctResultBO . buildTableData ( salaryItemList , Collections . emptyList ( ) , employeeList , salaryAcctEmployeeList ,
acctResultList , taxAgentPOS , Collections . emptySet ( ) , Collections . emptyMap ( ) , Collections . emptyMap ( ) , false ) ;
Map < String , Map < String , Object > > acctResultMapByKey = SalaryEntityUtil . convert2Map ( acctResultMap , m - > Utils . null2String ( m . get ( " taxAgentId " ) ) + " _split " + Utils . null2String ( m . get ( " employeeId " ) ) ) ;
List < String > keyList = new ArrayList < > ( ) ;
Set < Long > totalEmpIds = new HashSet < > ( ) ;
keyList . addAll ( acctResultMapByKey . keySet ( ) ) ;
totalEmpIds . addAll ( employeeIdList ) ;
int monthValue = yearMonth . getMonthValue ( ) ;
List < SalaryAcctRecordPO > allRecordList = getSalaryAcctRecordService ( user ) . listBySalaryMonth ( LocalDateRange . builder ( ) . fromDate ( salaryMonthDate ) . endDate ( salaryMonthDate ) . build ( ) ) ;
/ / 处理季度绩效账套
Map < String , Map < String , Object > > jdAcctResultMapByKey = new HashMap < > ( ) ;
Long jdjxItemId = SalaryEntityUtil . string2LongDefault0 ( baseBean . getPropValue ( " ltSalaryReport " , " rymxgzsfb_jdjxgz_item_id " ) ) ;
if ( monthValue = = 3 | | monthValue = = 6 | | monthValue = = 9 ) {
List < Long > jdSobIds = Arrays . stream ( baseBean . getPropValue ( " ltSalaryReport " , " rymxgzsfb_jdjx_sob_ids " ) . split ( " , " ) ) . filter ( NumberUtils : : isCreatable ) . map ( Long : : valueOf ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctRecordPO > jdRecordList = allRecordList . stream ( ) . filter ( sob - > jdSobIds . contains ( sob . getSalarySobId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
if ( CollectionUtils . isNotEmpty ( jdRecordList ) ) {
SalaryItemPO jdSalaryItemPO = getSalaryItemService ( user ) . getById ( jdjxItemId ) ;
List < Long > jdRecordIds = jdRecordList . stream ( ) . map ( SalaryAcctRecordPO : : getId ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctEmployeePO > jdAcctEmployeeList = getSalaryAcctEmployeeService ( user ) . listBySalaryAcctRecordIds ( jdRecordIds ) ;
List < Long > jdEmployeeIdList = jdAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getEmployeeId ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < DataCollectionEmployee > jdEmployeeList = getSalaryEmployeeService ( user ) . listByIds ( jdEmployeeIdList ) ;
/ / 查询薪资核算结果
List < Long > jdSalaryAcctEmpIds = jdAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getId ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctResultPO > jdAcctResultList = getSalaryAcctResultService ( user ) . listByAcctEmployeeIdsAndSalaryItemIds ( jdSalaryAcctEmpIds , Collections . singletonList ( jdjxItemId ) ) ;
List < Map < String , Object > > jdAcctResultMap = SalaryAcctResultBO . buildTableData ( Collections . singletonList ( jdSalaryItemPO ) , Collections . emptyList ( ) , jdEmployeeList , jdAcctEmployeeList ,
jdAcctResultList , taxAgentPOS , Collections . emptySet ( ) , Collections . emptyMap ( ) , Collections . emptyMap ( ) , false ) ;
jdAcctResultMapByKey = SalaryEntityUtil . convert2Map ( jdAcctResultMap , m - > Utils . null2String ( m . get ( " taxAgentId " ) ) + " _split " + Utils . null2String ( m . get ( " employeeId " ) ) ) ;
keyList . addAll ( jdAcctResultMapByKey . keySet ( ) ) ;
totalEmpIds . addAll ( jdEmployeeIdList ) ;
}
}
/ / 处理半年度绩效账套
Map < String , Map < String , Object > > bndAcctResultMapByKey = new HashMap < > ( ) ;
Long bndItemId = SalaryEntityUtil . string2LongDefault0 ( baseBean . getPropValue ( " ltSalaryReport " , " rymxgzsfb_bndjxgz_item_id " ) ) ;
if ( monthValue = = 6 ) {
List < Long > bndSobIds = Arrays . stream ( baseBean . getPropValue ( " ltSalaryReport " , " rymxgzsfb_bndjx_sob_ids " ) . split ( " , " ) ) . filter ( NumberUtils : : isCreatable ) . map ( Long : : valueOf ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctRecordPO > bndRecordList = allRecordList . stream ( ) . filter ( sob - > bndSobIds . contains ( sob . getSalarySobId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
if ( CollectionUtils . isNotEmpty ( bndRecordList ) ) {
SalaryItemPO bndSalaryItemPO = getSalaryItemService ( user ) . getById ( bndItemId ) ;
List < Long > bndRecordIds = bndRecordList . stream ( ) . map ( SalaryAcctRecordPO : : getId ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctEmployeePO > bndAcctEmployeeList = getSalaryAcctEmployeeService ( user ) . listBySalaryAcctRecordIds ( bndRecordIds ) ;
List < Long > bndEmployeeIdList = bndAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getEmployeeId ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < DataCollectionEmployee > bndEmployeeList = getSalaryEmployeeService ( user ) . listByIds ( bndEmployeeIdList ) ;
/ / 查询薪资核算结果
List < Long > bndSalaryAcctEmpIds = bndAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getId ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctResultPO > bndAcctResultList = getSalaryAcctResultService ( user ) . listByAcctEmployeeIdsAndSalaryItemIds ( bndSalaryAcctEmpIds , Collections . singletonList ( bndItemId ) ) ;
List < Map < String , Object > > bndAcctResultMap = SalaryAcctResultBO . buildTableData ( Collections . singletonList ( bndSalaryItemPO ) , Collections . emptyList ( ) , bndEmployeeList , bndAcctEmployeeList ,
bndAcctResultList , taxAgentPOS , Collections . emptySet ( ) , Collections . emptyMap ( ) , Collections . emptyMap ( ) , false ) ;
bndAcctResultMapByKey = SalaryEntityUtil . convert2Map ( bndAcctResultMap , m - > Utils . null2String ( m . get ( " taxAgentId " ) ) + " _split " + Utils . null2String ( m . get ( " employeeId " ) ) ) ;
keyList . addAll ( bndAcctResultMapByKey . keySet ( ) ) ;
totalEmpIds . addAll ( bndEmployeeIdList ) ;
}
}
/ / 处理年终奖账套
Map < String , Map < String , Object > > nzjAcctResultMapByKey = new HashMap < > ( ) ;
List < Long > nzjSobIds = Arrays . stream ( baseBean . getPropValue ( " ltSalaryReport " , " rymxgzsfb_nz_sob_ids " ) . split ( " , " ) ) . filter ( NumberUtils : : isCreatable ) . map ( Long : : valueOf ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctRecordPO > nzjRecordList = allRecordList . stream ( ) . filter ( sob - > nzjSobIds . contains ( sob . getSalarySobId ( ) ) ) . collect ( Collectors . toList ( ) ) ;
Long nzjItemId = SalaryEntityUtil . string2LongDefault0 ( baseBean . getPropValue ( " ltSalaryReport " , " rymxgzsfb_nzj_item_id " ) ) ;
if ( CollectionUtils . isNotEmpty ( nzjRecordList ) ) {
SalaryItemPO nzjSalaryItemPO = getSalaryItemService ( user ) . getById ( nzjItemId ) ;
List < Long > nzjRecordIds = nzjRecordList . stream ( ) . map ( SalaryAcctRecordPO : : getId ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctEmployeePO > nzjAcctEmployeeList = getSalaryAcctEmployeeService ( user ) . listBySalaryAcctRecordIds ( nzjRecordIds ) ;
List < Long > nzjEmployeeIdList = nzjAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getEmployeeId ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < DataCollectionEmployee > nzjEmployeeList = getSalaryEmployeeService ( user ) . listByIds ( nzjEmployeeIdList ) ;
/ / 查询薪资核算结果
List < Long > nzjSalaryAcctEmpIds = nzjAcctEmployeeList . stream ( ) . map ( SalaryAcctEmployeePO : : getId ) . collect ( Collectors . toList ( ) ) ;
List < SalaryAcctResultPO > nzjAcctResultList = getSalaryAcctResultService ( user ) . listByAcctEmployeeIdsAndSalaryItemIds ( nzjSalaryAcctEmpIds , Collections . singletonList ( nzjItemId ) ) ;
List < Map < String , Object > > nzjAcctResultMap = SalaryAcctResultBO . buildTableData ( Collections . singletonList ( nzjSalaryItemPO ) , Collections . emptyList ( ) , nzjEmployeeList , nzjAcctEmployeeList ,
nzjAcctResultList , taxAgentPOS , Collections . emptySet ( ) , Collections . emptyMap ( ) , Collections . emptyMap ( ) , false ) ;
nzjAcctResultMapByKey = SalaryEntityUtil . convert2Map ( nzjAcctResultMap , m - > Utils . null2String ( m . get ( " taxAgentId " ) ) + " _split " + Utils . null2String ( m . get ( " employeeId " ) ) ) ;
keyList . addAll ( nzjAcctResultMapByKey . keySet ( ) ) ;
totalEmpIds . addAll ( nzjEmployeeIdList ) ;
}
/ / 去重
keyList = keyList . stream ( ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
/ / 查询快照表中人员信息
Map < Long , DataCollectionEmployee > employeeMap = SalaryEntityUtil . convert2Map ( getSalaryEmployeeService ( user ) . snapshot ( totalEmpIds . stream ( ) . collect ( Collectors . toList ( ) ) , SalaryDateUtil . localDateToDate ( yearMonth . atDay ( 1 ) ) ) , DataCollectionEmployee : : getEmployeeId ) ;
/ / 入库
/ / 删除建模数据
RecordSet rs = new RecordSet ( ) ;
rs . execute ( " delete from uf_rymxgzsf where qj = ' " + salaryMonth + " ' " ) ;
/ / 插入建模
String currDate = String . format ( " '%s' " , TimeUtil . getCurrentDateString ( ) ) ;
SimpleDateFormat sdf = new SimpleDateFormat ( " HH:mm:ss " ) ;
String currTime = String . format ( " '%s' " , sdf . format ( new Date ( ) ) ) ;
/ / 获取建模模块id
String modeId = baseBean . getPropValue ( " ltSalaryReport " , " rymxgzsfb_mode_id " ) ;
/ / 先插入一条数据
String key = keyList . get ( 0 ) ;
StringBuilder firstSb = new StringBuilder ( ) ;
String fieldStr = reportConfigs . stream ( ) . map ( LtSalaryReportConfigDTO : : getField ) . collect ( Collectors . joining ( " , " ) ) ;
String [ ] split = key . split ( " _split " ) ;
Long empId = split ! = null & & split . length > 1 ? SalaryEntityUtil . string2LongDefault0 ( split [ 1 ] ) : 0L ;
DataCollectionEmployee employee = employeeMap . getOrDefault ( empId , DataCollectionEmployee . builder ( ) . build ( ) ) ;
/ / 获取薪资核算结果
Map < String , Object > singleAcctResultMap = acctResultMapByKey . getOrDefault ( key , new HashMap < > ( ) ) ;
Map < String , Object > singleJdAcctResultMap = jdAcctResultMapByKey . getOrDefault ( key , new HashMap < > ( ) ) ;
String jdjx = NumberUtils . isCreatable ( Utils . null2String ( singleJdAcctResultMap . get ( jdjxItemId . toString ( ) ) ) ) ? Utils . null2String ( singleJdAcctResultMap . get ( jdjxItemId . toString ( ) ) ) : " 0 " ;
Map < String , Object > singleBndAcctResultMap = bndAcctResultMapByKey . getOrDefault ( key , new HashMap < > ( ) ) ;
String bndjx = NumberUtils . isCreatable ( Utils . null2String ( singleBndAcctResultMap . get ( bndItemId . toString ( ) ) ) ) ? Utils . null2String ( singleBndAcctResultMap . get ( bndItemId . toString ( ) ) ) : " 0 " ;
Map < String , Object > singleNzjAcctResultMap = nzjAcctResultMapByKey . getOrDefault ( key , new HashMap < > ( ) ) ;
String nzj = NumberUtils . isCreatable ( Utils . null2String ( singleNzjAcctResultMap . get ( nzjItemId . toString ( ) ) ) ) ? Utils . null2String ( singleNzjAcctResultMap . get ( nzjItemId . toString ( ) ) ) : " 0 " ;
firstSb . append ( " insert into uf_rymxgzsf(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj, " + fieldStr + " ) values ( " ) ;
firstSb . append ( modeId ) . append ( " ,1,0, " ) . append ( currDate ) . append ( " , " ) . append ( currTime ) . append ( " ,' " )
. append ( employee . getWorkcode ( ) ) . append ( " ', " )
. append ( employee . getEmployeeId ( ) ) . append ( " , " )
. append ( employee . getSubcompanyid ( ) ) . append ( " , " )
. append ( employee . getDepartmentId ( ) ) . append ( " ,' " )
. append ( salaryMonth ) . append ( " ',' " )
. append ( Utils . null2String ( employee . getLtCbzx ( ) ) ) . append ( " ', " )
. append ( 0 ) . append ( " , " ) . append ( jdjx ) . append ( " , " ) . append ( bndjx ) . append ( " , " ) . append ( nzj ) ;
for ( LtSalaryReportConfigDTO dto : reportConfigs ) {
BigDecimal val = new BigDecimal ( " 0 " ) ;
if ( singleAcctResultMap ! = null ) {
String valStr = Utils . null2String ( singleAcctResultMap . getOrDefault ( Utils . null2String ( dto . getItem ( ) ) , " 0 " ) ) ;
if ( NumberUtils . isCreatable ( valStr ) ) {
val = new BigDecimal ( valStr ) ;
}
}
firstSb . append ( " , " ) . append ( val . toPlainString ( ) ) ;
}
firstSb . append ( " ) " ) ;
rs . execute ( firstSb . toString ( ) ) ;
keyList . remove ( 0 ) ;
/ / 获取最大值 作为权限重构的起始id
rs . execute ( " select max(id) from uf_rymxgzsf " ) ;
int minId = 0 ;
if ( rs . next ( ) ) {
minId = rs . getInt ( 1 ) ;
}
int maxId = minId + keyList . size ( ) ;
List < List < String > > partition = Lists . partition ( keyList , 500 ) ;
for ( List < String > part : partition ) {
StringBuilder sb = new StringBuilder ( ) ;
sb . append ( " insert into uf_rymxgzsf(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj, " + fieldStr + " ) values " ) ;
for ( String keyStr : part ) {
split = keyStr . split ( " _split " ) ;
empId = split ! = null & & split . length > 1 ? SalaryEntityUtil . string2LongDefault0 ( split [ 1 ] ) : 0L ;
employee = employeeMap . getOrDefault ( empId , DataCollectionEmployee . builder ( ) . build ( ) ) ;
/ / 获取薪资核算结果
singleAcctResultMap = acctResultMapByKey . getOrDefault ( keyStr , new HashMap < > ( ) ) ;
singleJdAcctResultMap = jdAcctResultMapByKey . getOrDefault ( keyStr , new HashMap < > ( ) ) ;
jdjx = NumberUtils . isCreatable ( Utils . null2String ( singleJdAcctResultMap . get ( jdjxItemId . toString ( ) ) ) ) ? Utils . null2String ( singleJdAcctResultMap . get ( jdjxItemId . toString ( ) ) ) : " 0 " ;
singleBndAcctResultMap = bndAcctResultMapByKey . getOrDefault ( keyStr , new HashMap < > ( ) ) ;
bndjx = NumberUtils . isCreatable ( Utils . null2String ( singleBndAcctResultMap . get ( bndItemId . toString ( ) ) ) ) ? Utils . null2String ( singleBndAcctResultMap . get ( bndItemId . toString ( ) ) ) : " 0 " ;
singleNzjAcctResultMap = nzjAcctResultMapByKey . getOrDefault ( keyStr , new HashMap < > ( ) ) ;
nzj = NumberUtils . isCreatable ( Utils . null2String ( singleNzjAcctResultMap . get ( nzjItemId . toString ( ) ) ) ) ? Utils . null2String ( singleNzjAcctResultMap . get ( nzjItemId . toString ( ) ) ) : " 0 " ;
sb . append ( " ( " ) . append ( modeId ) . append ( " ,1,0, " ) . append ( currDate ) . append ( " , " ) . append ( currTime ) . append ( " ,' " )
. append ( employee . getWorkcode ( ) ) . append ( " ', " )
. append ( employee . getEmployeeId ( ) ) . append ( " , " )
. append ( employee . getSubcompanyid ( ) ) . append ( " , " )
. append ( employee . getDepartmentId ( ) ) . append ( " ,' " )
. append ( salaryMonth ) . append ( " ',' " )
. append ( Utils . null2String ( employee . getLtCbzx ( ) ) ) . append ( " ', " )
. append ( 0 ) . append ( " , " ) . append ( jdjx ) . append ( " , " ) . append ( bndjx ) . append ( " , " ) . append ( nzj ) ;
for ( LtSalaryReportConfigDTO dto : reportConfigs ) {
BigDecimal val = new BigDecimal ( " 0 " ) ;
if ( singleAcctResultMap ! = null ) {
String valStr = Utils . null2String ( singleAcctResultMap . getOrDefault ( Utils . null2String ( dto . getItem ( ) ) , " 0 " ) ) ;
if ( NumberUtils . isCreatable ( valStr ) ) {
val = new BigDecimal ( valStr ) ;
}
}
sb . append ( " , " ) . append ( val . toPlainString ( ) ) ;
}
sb . append ( " ), " ) ;
}
rs . execute ( sb . substring ( 0 , sb . length ( ) - 1 ) . toString ( ) ) ;
}
/ / 权限重构
log . info ( " 人员明细工资发放min{} max{} " , minId , maxId ) ;
if ( modeId ! = null & & NumberUtils . isCreatable ( modeId ) ) {
Integer modeIdValue = Integer . valueOf ( modeId ) ;
for ( int i = minId ; i < = maxId ; i + + ) {
ModeRightInfo ModeRightInfo = new ModeRightInfo ( ) ;
ModeRightInfo . setNewRight ( true ) ;
ModeRightInfo . editModeDataShare ( 1 , modeIdValue , i ) ;
}
}
return " success " ;
}
}