@ -83,6 +83,7 @@ import weaver.general.TimeUtil;
import weaver.hrm.User ;
import weaver.wechat.util.Utils ;
import java.io.UnsupportedEncodingException ;
import java.math.BigDecimal ;
import java.math.RoundingMode ;
import java.text.SimpleDateFormat ;
@ -4374,4 +4375,459 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
}
return " " ;
}
@Override
public String ltGenZjrggsftbjt ( String salaryMonth ) {
if ( ! SalaryDateUtil . checkYearMonth ( salaryMonth ) ) {
throw new SalaryRunTimeException ( " 年月错误 " ) ;
}
Date salaryMonthDate = SalaryDateUtil . dateStrToLocalYearMonth ( salaryMonth ) ;
BaseBean baseBean = new BaseBean ( ) ;
RecordSet rs = new RecordSet ( ) ;
/ / 获取直接人工工资分摊表的人
ArrayList < LtZjrggzftDTO > ltZjrggzftList = new ArrayList < > ( ) ;
/ / String dataSourceId = baseBean . getPropValue ( " ltSalaryReport " , " zjrycqgsft_data_source_id " ) ;
/ / RecordSetDataSource extRs = new RecordSetDataSource ( dataSourceId ) ;
/ / extRs . execute ( " select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from dws_oa.work_hour_apportion_report where month=' " + salaryMonth + " ' " ) ;
/ / while ( extRs . next ( ) ) {
/ / LtZjrggzftDTO dto = new LtZjrggzftDTO ( ) ;
/ / dto . setNy ( extRs . getString ( " month " ) ) ;
/ / dto . setGh ( extRs . getString ( " user_code " ) ) ;
/ / dto . setCbzxbm ( extRs . getString ( " sap_cost_center_name " ) ) ;
/ / dto . setCbzx ( extRs . getString ( " sap_cost_center_name_desc " ) ) ;
/ / dto . setZb ( SalaryEntityUtil . string2BigDecimalDefault0 ( extRs . getString ( " proportion " ) ) ) ;
/ / ltZjrggzftList . add ( dto ) ;
/ / }
rs . execute ( " select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from uf_testygcqgsftb where month=' " + salaryMonth + " ' " ) ;
while ( rs . next ( ) ) {
LtZjrggzftDTO dto = new LtZjrggzftDTO ( ) ;
dto . setNy ( rs . getString ( " month " ) ) ;
dto . setGh ( rs . getString ( " user_code " ) ) ;
dto . setCbzxbm ( rs . getString ( " sap_cost_center_name " ) ) ;
dto . setCbzx ( rs . getString ( " sap_cost_center_name_desc " ) ) ;
dto . setZb ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " proportion " ) ) ) ;
ltZjrggzftList . add ( dto ) ;
}
Map < String , List < LtZjrggzftDTO > > LtZjrggzfGroupByGh = SalaryEntityUtil . group2Map ( ltZjrggzftList , LtZjrggzftDTO : : getGh ) ;
/ / 获取自招部分需要统计赋值哪些字段
List < String > selectFieldList = new ArrayList < > ( ) ;
selectFieldList . add ( " yldw " ) ;
selectFieldList . add ( " yldwbj " ) ;
selectFieldList . add ( " gsdw " ) ;
selectFieldList . add ( " gsdwbj " ) ;
selectFieldList . add ( " sydw " ) ;
selectFieldList . add ( " sydwbj " ) ;
selectFieldList . add ( " yldw1 " ) ;
selectFieldList . add ( " yldwbj1 " ) ;
selectFieldList . add ( " gjjdw " ) ;
selectFieldList . add ( " gjjdwbj " ) ;
selectFieldList . add ( " fwf " ) ;
selectFieldList . add ( " sb " ) ;
selectFieldList . add ( " yfgz " ) ;
selectFieldList . add ( " ydyxyg " ) ;
selectFieldList . add ( " qjl " ) ;
selectFieldList . add ( " lsjl " ) ;
selectFieldList . add ( " nzj " ) ;
/ / 获取对应期间人员明细工资计提表
rs . execute ( " select xm,rylx,gh,zjgs, " + StringUtils . join ( selectFieldList , " , " ) + " from uf_mxgzbjt where qj =' " + SalaryDateUtil . getFormatYearMonth ( salaryMonthDate ) + " ' " ) ;
Map < String , List < Map < String , String > > > listGroupByCbzx = new HashMap < > ( ) ;
while ( rs . next ( ) ) {
List < LtZjrggzftDTO > ltZjrggzftDTOList = LtZjrggzfGroupByGh . get ( Utils . null2String ( rs . getString ( " gh " ) ) ) ;
if ( CollectionUtils . isNotEmpty ( ltZjrggzftDTOList ) ) {
for ( LtZjrggzftDTO ftDTO : ltZjrggzftDTOList ) {
BigDecimal zb = ftDTO . getZb ( ) ;
String cbzx = ftDTO . getCbzxbm ( ) ;
List < Map < String , String > > cbzxList = listGroupByCbzx . computeIfAbsent ( cbzx , k - > new ArrayList < > ( ) ) ;
Map < String , String > singleEmpValueMap = new HashMap < > ( ) ;
singleEmpValueMap . put ( " rylb " , Utils . null2String ( rs . getString ( " rylx " ) ) ) ;
singleEmpValueMap . put ( " cbzx " , ftDTO . getCbzx ( ) ) ;
singleEmpValueMap . put ( " zjgs " , Utils . null2String ( rs . getString ( " zjgs " ) ) ) ;
BigDecimal yldw = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " yldw " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " yldwbj " ) ) ) ;
singleEmpValueMap . put ( " ylbxdw " , yldw . multiply ( zb ) . toPlainString ( ) ) ;
BigDecimal gsdw = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " gsdw " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " gsdwbj " ) ) ) ;
singleEmpValueMap . put ( " gsbxdw " , gsdw . multiply ( zb ) . toPlainString ( ) ) ;
BigDecimal sydw = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " sydw " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " sydwbj " ) ) ) ;
singleEmpValueMap . put ( " sybxdw " , sydw . multiply ( zb ) . toPlainString ( ) ) ;
BigDecimal yldw1 = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " yldw1 " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " yldwbj1 " ) ) ) ;
singleEmpValueMap . put ( " ylbxdw1 " , yldw1 . multiply ( zb ) . toPlainString ( ) ) ;
BigDecimal gjjdw = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " gjjdw " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " gjjdwbj " ) ) ) ;
singleEmpValueMap . put ( " zfgjjdw " , gjjdw . multiply ( zb ) . toPlainString ( ) ) ;
singleEmpValueMap . put ( " fwf " , SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " fwf " ) ) . multiply ( zb ) . toPlainString ( ) ) ;
singleEmpValueMap . put ( " sb " , SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " sb " ) ) . multiply ( zb ) . toPlainString ( ) ) ;
/ / 奖金 = 月度优秀员工 + 其他奖励 + 临时激励
BigDecimal jj = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " ydyxyg " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " qjl " ) ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " lsjl " ) ) ) ;
singleEmpValueMap . put ( " jj " , jj . multiply ( zb ) . toPlainString ( ) ) ;
BigDecimal nzj = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " nzj " ) ) ;
singleEmpValueMap . put ( " nzj " , nzj . multiply ( zb ) . toPlainString ( ) ) ;
/ / 应发工资
BigDecimal gz = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " yfgz " ) ) . subtract ( jj ) . subtract ( nzj ) ;
singleEmpValueMap . put ( " gz " , gz . multiply ( zb ) . toPlainString ( ) ) ;
cbzxList . add ( singleEmpValueMap ) ;
}
}
}
/ / 获取外包字段信息
Map < String , String > zjInfoMap = new HashMap < > ( ) ;
List < String > zjfields = Arrays . stream ( baseBean . getPropValue ( " ltSalaryReport " , " zjrggzftbjt_zj_filds " ) . split ( " , " ) ) . filter ( key - > StringUtils . isNotBlank ( key ) ) . collect ( Collectors . toList ( ) ) ;
for ( String field : zjfields ) {
String fieldInfo = baseBean . getPropValue ( " ltSalaryReport " , " zjrggzftbjt_ " + field + " _info " ) ;
try {
fieldInfo = new String ( fieldInfo . getBytes ( " ISO-8859-1 " ) , " utf-8 " ) ;
} catch ( UnsupportedEncodingException e ) {
fieldInfo = " " ;
}
zjInfoMap . put ( field , fieldInfo ) ;
}
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 " , " zjrggzftbjt_mode_id " ) ;
/ / 入库前先删除
rs . execute ( " delete from uf_zjrggzftjt where xzszy =' " + salaryMonth + " ' " ) ;
String insertStartSql = new String ( " insert into uf_zjrggzftjt (formmodeid,modedatacreater, " +
" modedatacreatertype,modedatacreatedate,modedatacreatetime,xzszy,cbzx,cbzxsm,gz,jj,nzj,gjjdw,yldw,yldw1,sydw,gsdw, "
+ StringUtils . join ( zjfields , " , " ) + " )VALUES( " ) ;
/ / 自招字段
List < String > zzFields = Arrays . asList ( " gz " , " jj " , " nzj " , " gjjdw " , " yldw " , " yldw1 " , " sydw " , " gsdw " ) ;
for ( Map . Entry < String , List < Map < String , String > > > entry : listGroupByCbzx . entrySet ( ) ) {
/ / 已根据成本中心分组并乘以了对应的占比 , 成本中心中需要分中介公司 、 人员类别和自招
List < Map < String , String > > list = entry . getValue ( ) ;
if ( CollectionUtils . isEmpty ( list ) ) {
continue ;
}
Map < String , List < Map < String , String > > > groupByzjAndRylb = new HashMap < > ( ) ;
list . stream ( ) . forEach ( map - > {
String zjgs = Utils . null2String ( map . get ( " zjgs " ) ) ;
if ( StringUtils . isBlank ( zjgs ) ) {
/ / 自招
List < Map < String , String > > zzList = groupByzjAndRylb . computeIfAbsent ( " zz " , k - > new ArrayList < > ( ) ) ;
zzList . add ( map ) ;
} else {
String rylb = Utils . null2String ( map . get ( " rylb " ) ) ;
List < Map < String , String > > zjList = groupByzjAndRylb . computeIfAbsent ( zjgs + rylb , k - > new ArrayList < > ( ) ) ;
zjList . add ( map ) ;
}
} ) ;
/ / 获取自招合计数据
List < Map < String , String > > zzList = groupByzjAndRylb . get ( " zz " ) ;
Map < String , String > zzSumMap = new HashMap < > ( ) ;
if ( CollectionUtils . isNotEmpty ( zzList ) ) {
for ( String zzField : zzFields ) {
String sumVal = zzList . stream ( ) . map ( map - > Utils . null2String ( map . get ( zzField ) ) ) . filter ( NumberUtils : : isCreatable ) . map ( BigDecimal : : new )
. reduce ( new BigDecimal ( " 0 " ) , BigDecimal : : add ) . setScale ( 2 , RoundingMode . HALF_UP ) . toPlainString ( ) ;
zzSumMap . put ( zzField , sumVal ) ;
}
}
/ / 入库
StringBuilder insertSqlSb = new StringBuilder ( insertStartSql )
. append ( modeId ) . append ( " ,1,0, " ) . append ( currDate ) . append ( " , " ) . append ( currTime ) . append ( " ,' " )
. append ( salaryMonth ) . append ( " ',' " ) . append ( entry . getKey ( ) ) . append ( " ',' " ) . append ( Utils . null2String ( list . get ( 0 ) . get ( " cbzx " ) ) ) . append ( " ', " ) ;
for ( String zzField : zzFields ) {
insertSqlSb . append ( SalaryEntityUtil . string2BigDecimalDefault0 ( zzSumMap . get ( zzField ) ) . toString ( ) ) . append ( " , " ) ;
}
for ( String zjfield : zjfields ) {
String zjInfo = Utils . null2String ( zjInfoMap . get ( zjfield ) ) ;
List < Map < String , String > > zjList = groupByzjAndRylb . get ( zjInfo ) ;
BigDecimal zjSumVal = new BigDecimal ( " 0 " ) ;
if ( CollectionUtils . isNotEmpty ( zjList ) ) {
BigDecimal fwf = zjList . stream ( ) . map ( map - > Utils . null2String ( map . get ( " fwf " ) ) ) . filter ( NumberUtils : : isCreatable ) . map ( BigDecimal : : new )
. reduce ( new BigDecimal ( " 0 " ) , BigDecimal : : add ) ;
BigDecimal sb = zjList . stream ( ) . map ( map - > Utils . null2String ( map . get ( " sb " ) ) ) . filter ( NumberUtils : : isCreatable ) . map ( BigDecimal : : new )
. reduce ( new BigDecimal ( " 0 " ) , BigDecimal : : add ) ;
zjSumVal = fwf . add ( sb ) . setScale ( 2 , RoundingMode . HALF_UP ) ;
}
insertSqlSb . append ( zjSumVal . toPlainString ( ) ) . append ( " , " ) ;
}
insertSqlSb . append ( " ) " ) ;
insertSqlSb . deleteCharAt ( insertSqlSb . lastIndexOf ( " , " ) ) ;
rs . execute ( insertSqlSb . toString ( ) ) ;
/ / 权限重构
/ / 获取最大值 作为权限重构的起始id
rs . execute ( " select max(id) from uf_zjrggzftjt " ) ;
int maxId = 0 ;
if ( rs . next ( ) ) {
maxId = rs . getInt ( 1 ) ;
}
if ( modeId ! = null & & NumberUtils . isCreatable ( modeId ) ) {
ModeRightInfo ModeRightInfo = new ModeRightInfo ( ) ;
ModeRightInfo . setNewRight ( true ) ;
ModeRightInfo . editModeDataShare ( 1 , Integer . valueOf ( modeId ) , maxId ) ;
}
}
return null ;
}
@Override
public String ltGenZjrggsftbsf ( String salaryMonth ) {
if ( ! SalaryDateUtil . checkYearMonth ( salaryMonth ) ) {
throw new SalaryRunTimeException ( " 年月错误 " ) ;
}
Date salaryMonthDate = SalaryDateUtil . dateStrToLocalYearMonth ( salaryMonth ) ;
BaseBean baseBean = new BaseBean ( ) ;
RecordSet rs = new RecordSet ( ) ;
/ / 获取直接人工工资分摊表的人
ArrayList < LtZjrggzftDTO > ltZjrggzftList = new ArrayList < > ( ) ;
/ / String dataSourceId = baseBean . getPropValue ( " ltSalaryReport " , " zjrycqgsft_data_source_id " ) ;
/ / RecordSetDataSource extRs = new RecordSetDataSource ( dataSourceId ) ;
/ / extRs . execute ( " select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from dws_oa.work_hour_apportion_report where month=' " + salaryMonth + " ' " ) ;
/ / while ( extRs . next ( ) ) {
/ / LtZjrggzftDTO dto = new LtZjrggzftDTO ( ) ;
/ / dto . setNy ( extRs . getString ( " month " ) ) ;
/ / dto . setGh ( extRs . getString ( " user_code " ) ) ;
/ / dto . setCbzxbm ( extRs . getString ( " sap_cost_center_name " ) ) ;
/ / dto . setCbzx ( extRs . getString ( " sap_cost_center_name_desc " ) ) ;
/ / dto . setZb ( SalaryEntityUtil . string2BigDecimalDefault0 ( extRs . getString ( " proportion " ) ) ) ;
/ / ltZjrggzftList . add ( dto ) ;
/ / }
rs . execute ( " select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from uf_testygcqgsftb where month=' " + salaryMonth + " ' " ) ;
while ( rs . next ( ) ) {
LtZjrggzftDTO dto = new LtZjrggzftDTO ( ) ;
dto . setNy ( rs . getString ( " month " ) ) ;
dto . setGh ( rs . getString ( " user_code " ) ) ;
dto . setCbzxbm ( rs . getString ( " sap_cost_center_name " ) ) ;
dto . setCbzx ( rs . getString ( " sap_cost_center_name_desc " ) ) ;
dto . setZb ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " proportion " ) ) ) ;
ltZjrggzftList . add ( dto ) ;
}
Map < String , List < LtZjrggzftDTO > > LtZjrggzfGroupByGh = SalaryEntityUtil . group2Map ( ltZjrggzftList , LtZjrggzftDTO : : getGh ) ;
/ / 获取自招部分需要统计赋值哪些字段
List < String > selectFieldList = new ArrayList < > ( ) ;
selectFieldList . add ( " yldw " ) ;
selectFieldList . add ( " yldwbj " ) ;
selectFieldList . add ( " gsdw " ) ;
selectFieldList . add ( " gsdwbj " ) ;
selectFieldList . add ( " sydw " ) ;
selectFieldList . add ( " sydwbj " ) ;
selectFieldList . add ( " yldw1 " ) ;
selectFieldList . add ( " yldwbj1 " ) ;
selectFieldList . add ( " gjjdw " ) ;
selectFieldList . add ( " gjjdwbj " ) ;
selectFieldList . add ( " fwf " ) ;
selectFieldList . add ( " sb " ) ;
selectFieldList . add ( " yfgz " ) ;
selectFieldList . add ( " ydyxyg " ) ;
selectFieldList . add ( " qjl " ) ;
selectFieldList . add ( " lsjl " ) ;
selectFieldList . add ( " nzj " ) ;
/ / 获取对应期间人员明细工资实发表
rs . execute ( " select xm,rylx,gh,zjgs, " + StringUtils . join ( selectFieldList , " , " ) + " from uf_rymxgzsf where qj =' " + SalaryDateUtil . getFormatYearMonth ( salaryMonthDate ) + " ' " ) ;
Map < String , List < Map < String , String > > > listGroupByCbzx = new HashMap < > ( ) ;
while ( rs . next ( ) ) {
List < LtZjrggzftDTO > ltZjrggzftDTOList = LtZjrggzfGroupByGh . get ( Utils . null2String ( rs . getString ( " gh " ) ) ) ;
if ( CollectionUtils . isNotEmpty ( ltZjrggzftDTOList ) ) {
for ( LtZjrggzftDTO ftDTO : ltZjrggzftDTOList ) {
BigDecimal zb = ftDTO . getZb ( ) ;
String cbzx = ftDTO . getCbzxbm ( ) ;
List < Map < String , String > > cbzxList = listGroupByCbzx . computeIfAbsent ( cbzx , k - > new ArrayList < > ( ) ) ;
Map < String , String > singleEmpValueMap = new HashMap < > ( ) ;
singleEmpValueMap . put ( " rylb " , Utils . null2String ( rs . getString ( " rylx " ) ) ) ;
singleEmpValueMap . put ( " cbzx " , ftDTO . getCbzx ( ) ) ;
singleEmpValueMap . put ( " zjgs " , Utils . null2String ( rs . getString ( " zjgs " ) ) ) ;
BigDecimal yldw = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " yldw " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " yldwbj " ) ) ) ;
singleEmpValueMap . put ( " ylbxdw " , yldw . multiply ( zb ) . toPlainString ( ) ) ;
BigDecimal gsdw = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " gsdw " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " gsdwbj " ) ) ) ;
singleEmpValueMap . put ( " gsbxdw " , gsdw . multiply ( zb ) . toPlainString ( ) ) ;
BigDecimal sydw = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " sydw " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " sydwbj " ) ) ) ;
singleEmpValueMap . put ( " sybxdw " , sydw . multiply ( zb ) . toPlainString ( ) ) ;
BigDecimal yldw1 = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " yldw1 " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " yldwbj1 " ) ) ) ;
singleEmpValueMap . put ( " ylbxdw1 " , yldw1 . multiply ( zb ) . toPlainString ( ) ) ;
BigDecimal gjjdw = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " gjjdw " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " gjjdwbj " ) ) ) ;
singleEmpValueMap . put ( " zfgjjdw " , gjjdw . multiply ( zb ) . toPlainString ( ) ) ;
singleEmpValueMap . put ( " fwf " , SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " fwf " ) ) . multiply ( zb ) . toPlainString ( ) ) ;
singleEmpValueMap . put ( " sb " , SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " sb " ) ) . multiply ( zb ) . toPlainString ( ) ) ;
/ / 奖金 = 月度优秀员工 + 其他奖励 + 临时激励
BigDecimal jj = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " ydyxyg " ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " qjl " ) ) ) . add ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " lsjl " ) ) ) ;
singleEmpValueMap . put ( " jj " , jj . multiply ( zb ) . toPlainString ( ) ) ;
BigDecimal nzj = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " nzj " ) ) ;
singleEmpValueMap . put ( " nzj " , nzj . multiply ( zb ) . toPlainString ( ) ) ;
/ / 应发工资
BigDecimal gz = SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " yfgz " ) ) . subtract ( jj ) . subtract ( nzj ) ;
singleEmpValueMap . put ( " gz " , gz . multiply ( zb ) . toPlainString ( ) ) ;
cbzxList . add ( singleEmpValueMap ) ;
}
}
}
/ / 获取外包字段信息
Map < String , String > zjInfoMap = new HashMap < > ( ) ;
List < String > zjfields = Arrays . stream ( baseBean . getPropValue ( " ltSalaryReport " , " zjrggzftbjt_zj_filds " ) . split ( " , " ) ) . filter ( key - > StringUtils . isNotBlank ( key ) ) . collect ( Collectors . toList ( ) ) ;
for ( String field : zjfields ) {
String fieldInfo = baseBean . getPropValue ( " ltSalaryReport " , " zjrggzftbjt_ " + field + " _info " ) ;
try {
fieldInfo = new String ( fieldInfo . getBytes ( " ISO-8859-1 " ) , " utf-8 " ) ;
} catch ( UnsupportedEncodingException e ) {
fieldInfo = " " ;
}
zjInfoMap . put ( field , fieldInfo ) ;
}
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 " , " zjrggzftbsf_mode_id " ) ;
/ / 入库前先删除
rs . execute ( " delete from uf_zjrggzftbsf where xzszy =' " + salaryMonth + " ' " ) ;
String insertStartSql = new String ( " insert into uf_zjrggzftbsf (formmodeid,modedatacreater, " +
" modedatacreatertype,modedatacreatedate,modedatacreatetime,xzszy,cbzx,cbzxsm,gz,jj,nzj,gjjdw,yldw,yldw1,sydw,gsdw, "
+ StringUtils . join ( zjfields , " , " ) + " )VALUES( " ) ;
/ / 自招字段
List < String > zzFields = Arrays . asList ( " gz " , " jj " , " nzj " , " gjjdw " , " yldw " , " yldw1 " , " sydw " , " gsdw " ) ;
for ( Map . Entry < String , List < Map < String , String > > > entry : listGroupByCbzx . entrySet ( ) ) {
/ / 已根据成本中心分组并乘以了对应的占比 , 成本中心中需要分中介公司 、 人员类别和自招
List < Map < String , String > > list = entry . getValue ( ) ;
if ( CollectionUtils . isEmpty ( list ) ) {
continue ;
}
Map < String , List < Map < String , String > > > groupByzjAndRylb = new HashMap < > ( ) ;
list . stream ( ) . forEach ( map - > {
String zjgs = Utils . null2String ( map . get ( " zjgs " ) ) ;
if ( StringUtils . isBlank ( zjgs ) ) {
/ / 自招
List < Map < String , String > > zzList = groupByzjAndRylb . computeIfAbsent ( " zz " , k - > new ArrayList < > ( ) ) ;
zzList . add ( map ) ;
} else {
String rylb = Utils . null2String ( map . get ( " rylb " ) ) ;
List < Map < String , String > > zjList = groupByzjAndRylb . computeIfAbsent ( zjgs + rylb , k - > new ArrayList < > ( ) ) ;
zjList . add ( map ) ;
}
} ) ;
/ / 获取自招合计数据
List < Map < String , String > > zzList = groupByzjAndRylb . get ( " zz " ) ;
Map < String , String > zzSumMap = new HashMap < > ( ) ;
if ( CollectionUtils . isNotEmpty ( zzList ) ) {
for ( String zzField : zzFields ) {
String sumVal = zzList . stream ( ) . map ( map - > Utils . null2String ( map . get ( zzField ) ) ) . filter ( NumberUtils : : isCreatable ) . map ( BigDecimal : : new )
. reduce ( new BigDecimal ( " 0 " ) , BigDecimal : : add ) . setScale ( 2 , RoundingMode . HALF_UP ) . toPlainString ( ) ;
zzSumMap . put ( zzField , sumVal ) ;
}
}
/ / 入库
StringBuilder insertSqlSb = new StringBuilder ( insertStartSql )
. append ( modeId ) . append ( " ,1,0, " ) . append ( currDate ) . append ( " , " ) . append ( currTime ) . append ( " ,' " )
. append ( salaryMonth ) . append ( " ',' " ) . append ( entry . getKey ( ) ) . append ( " ',' " ) . append ( Utils . null2String ( list . get ( 0 ) . get ( " cbzx " ) ) ) . append ( " ', " ) ;
for ( String zzField : zzFields ) {
insertSqlSb . append ( SalaryEntityUtil . string2BigDecimalDefault0 ( zzSumMap . get ( zzField ) ) . toString ( ) ) . append ( " , " ) ;
}
for ( String zjfield : zjfields ) {
String zjInfo = Utils . null2String ( zjInfoMap . get ( zjfield ) ) ;
List < Map < String , String > > zjList = groupByzjAndRylb . get ( zjInfo ) ;
BigDecimal zjSumVal = new BigDecimal ( " 0 " ) ;
if ( CollectionUtils . isNotEmpty ( zjList ) ) {
BigDecimal fwf = zjList . stream ( ) . map ( map - > Utils . null2String ( map . get ( " fwf " ) ) ) . filter ( NumberUtils : : isCreatable ) . map ( BigDecimal : : new )
. reduce ( new BigDecimal ( " 0 " ) , BigDecimal : : add ) ;
BigDecimal sb = zjList . stream ( ) . map ( map - > Utils . null2String ( map . get ( " sb " ) ) ) . filter ( NumberUtils : : isCreatable ) . map ( BigDecimal : : new )
. reduce ( new BigDecimal ( " 0 " ) , BigDecimal : : add ) ;
zjSumVal = fwf . add ( sb ) . setScale ( 2 , RoundingMode . HALF_UP ) ;
}
insertSqlSb . append ( zjSumVal . toPlainString ( ) ) . append ( " , " ) ;
}
insertSqlSb . append ( " ) " ) ;
insertSqlSb . deleteCharAt ( insertSqlSb . lastIndexOf ( " , " ) ) ;
rs . execute ( insertSqlSb . toString ( ) ) ;
/ / 权限重构
/ / 获取最大值 作为权限重构的起始id
rs . execute ( " select max(id) from uf_zjrggzftbsf " ) ;
int maxId = 0 ;
if ( rs . next ( ) ) {
maxId = rs . getInt ( 1 ) ;
}
if ( modeId ! = null & & NumberUtils . isCreatable ( modeId ) ) {
ModeRightInfo ModeRightInfo = new ModeRightInfo ( ) ;
ModeRightInfo . setNewRight ( true ) ;
ModeRightInfo . editModeDataShare ( 1 , Integer . valueOf ( modeId ) , maxId ) ;
}
}
return null ;
}
@Override
public String ltGenGwpjgzcxb ( String year ) {
if ( ! NumberUtils . isCreatable ( year ) ) {
throw new SalaryRunTimeException ( " 年份错误 " ) ;
}
BaseBean baseBean = new BaseBean ( ) ;
RecordSet rs = new RecordSet ( ) ;
/ / 获取全年人员明细工资实发表
rs . execute ( " select gh,szbm,szgw,yfgz,ydjx,jdjx,nzj,qjlxj from uf_rymxgzsf where qj >= ' " + year + " -01' and qj <= ' " + year + " '-12 " ) ;
List < LtRymxgzDTO > ltRymxgzDTOList = new ArrayList < > ( ) ;
while ( rs . next ( ) ) {
ltRymxgzDTOList . add ( LtRymxgzDTO . builder ( )
. gh ( Utils . null2String ( rs . getString ( " gh " ) ) )
. bm ( SalaryEntityUtil . string2LongDefault0 ( rs . getString ( " szbm " ) ) )
. gw ( SalaryEntityUtil . string2LongDefault0 ( rs . getString ( " szgw " ) ) )
. gz ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " yfgz " ) ) )
. jx ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " ydjx " ) ) )
. jdjx ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " jdjx " ) ) )
. qtjlxj ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " qjlxj " ) ) )
. nzj ( SalaryEntityUtil . string2BigDecimalDefault0 ( rs . getString ( " nzj " ) ) )
. build ( ) ) ;
}
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 " , " zjrggzftbsf_mode_id " ) ;
/ / 入库前先删除
rs . execute ( " delete from uf_gwpjgzcxb where nf =' " + year + " ' " ) ;
String insertStartSql = new String ( " insert into uf_gwpjgzcxb (formmodeid,modedatacreater, " +
" modedatacreatertype,modedatacreatedate,modedatacreatetime,nf,bm,gw,yjgz)VALUES( " ) ;
/ / 根据岗位部门汇总
Map < String , List < LtRymxgzDTO > > dtoGroupByGwBm = SalaryEntityUtil . group2Map ( ltRymxgzDTOList , dto - > dto . getGw ( ) + " _split " + dto . getBm ( ) ) ;
for ( Map . Entry < String , List < LtRymxgzDTO > > gwbmEntry : dtoGroupByGwBm . entrySet ( ) ) {
/ / 再根据工号汇总 , 求出每个人的平均月薪
List < LtRymxgzDTO > gwbmDtoList = gwbmEntry . getValue ( ) ;
Map < String , List < LtRymxgzDTO > > dtoGroupByGh = SalaryEntityUtil . group2Map ( gwbmDtoList , dto - > dto . getGh ( ) ) ;
BigDecimal sumEmpAveMonthSalary = new BigDecimal ( " 0 " ) ;
int empNums = 0 ;
for ( Map . Entry < String , List < LtRymxgzDTO > > ghEntry : dtoGroupByGh . entrySet ( ) ) {
List < LtRymxgzDTO > ghDtoList = ghEntry . getValue ( ) ;
BigDecimal empYearSumVal = new BigDecimal ( " 0 " ) ;
for ( LtRymxgzDTO dto : ghDtoList ) {
empYearSumVal = empYearSumVal . add ( dto . getGz ( ) ) . add ( dto . getJx ( ) ) . add ( dto . getJdjx ( ) ) . add ( dto . getBndjx ( ) ) . add ( dto . getQtjlxj ( ) ) ;
}
/ / 计算平均月薪
BigDecimal empAveMonthSalary = empYearSumVal . divide ( new BigDecimal ( String . valueOf ( ghDtoList . size ( ) ) ) , 2 , RoundingMode . HALF_UP ) ;
empNums + + ;
}
BigDecimal aveValue = sumEmpAveMonthSalary . divide ( new BigDecimal ( String . valueOf ( empNums ) ) , 2 , RoundingMode . HALF_UP ) ;
String [ ] split = gwbmEntry . getKey ( ) . split ( " _split " ) ;
Long gw = split ! = null & & split . length > 0 ? SalaryEntityUtil . string2LongDefault0 ( split [ 0 ] ) : 0L ;
Long bm = split ! = null & & split . length > 1 ? SalaryEntityUtil . string2LongDefault0 ( split [ 1 ] ) : 0L ;
/ / 入库
StringBuilder insertSqlSb = new StringBuilder ( insertStartSql )
. append ( modeId ) . append ( " ,1,0, " ) . append ( currDate ) . append ( " , " ) . append ( currTime ) . append ( " ,' " )
. append ( year ) . append ( " ', " ) . append ( bm ) . append ( " , " ) . append ( gw ) . append ( " , " ) . append ( aveValue . toPlainString ( ) ) . append ( " ) " ) ;
rs . execute ( insertSqlSb . toString ( ) ) ;
/ / 权限重构
/ / 获取最大值 作为权限重构的起始id
rs . execute ( " select max(id) from uf_gwpjgzcxb " ) ;
int maxId = 0 ;
if ( rs . next ( ) ) {
maxId = rs . getInt ( 1 ) ;
}
if ( modeId ! = null & & NumberUtils . isCreatable ( modeId ) ) {
ModeRightInfo ModeRightInfo = new ModeRightInfo ( ) ;
ModeRightInfo . setNewRight ( true ) ;
ModeRightInfo . editModeDataShare ( 1 , Integer . valueOf ( modeId ) , maxId ) ;
}
}
return null ;
}
}