@ -2,8 +2,11 @@ package com.engine.attendance.attendanceanalysis.service.impl;
import com.alibaba.fastjson.JSON ;
import com.alibaba.fastjson.JSONObject ;
import com.engine.attendance.enums.PersonGroupListTypeEnum ;
import com.engine.attendance.workflow.cmd.GetCqSummarySearchConditionCmd ;
import com.engine.attendance.attendanceanalysis.service.AttendanceSummaryService ;
import com.engine.common.exception.AttendanceRunTimeException ;
import com.engine.common.util.CommonUtil ;
import com.engine.common.util.DbTools ;
import com.engine.core.impl.Service ;
import com.engine.kq.biz.KQHolidaySetBiz ;
@ -24,6 +27,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse ;
import java.time.LocalDate ;
import java.util.* ;
import java.util.stream.Collectors ;
/ * *
@ -366,7 +370,11 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
for ( Map < String , String > dataItem : resultList ) {
data = new ArrayList < > ( ) ;
for ( String columnKey : showColumnKeyList ) {
data . add ( Util . null2String ( dataItem . get ( columnKey ) ) ) ;
if ( columnKey . equals ( "subcompany" ) | | columnKey . equals ( "department" ) ) {
data . add ( Util . formatMultiLang ( Util . null2String ( dataItem . get ( columnKey ) ) , String . valueOf ( user . getLanguage ( ) ) ) ) ;
} else {
data . add ( Util . null2String ( dataItem . get ( columnKey ) ) ) ;
}
}
dataList . add ( data ) ;
}
@ -395,6 +403,7 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
sheet . put ( "sheetTitle" , SystemEnv . getHtmlLabelName ( 390351 , user . getLanguage ( ) ) ) ;
sheet . put ( "dataList" , dataList ) ;
sheet . put ( "titleList" , titleList ) ;
sheet . put ( "createFile" , "1" ) ;
List < Object > lsSheet = new ArrayList < > ( ) ;
lsSheet . add ( sheet ) ;
@ -403,6 +412,8 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
workbook . put ( "fileName" , SystemEnv . getHtmlLabelName ( 390351 , user . getLanguage ( ) ) ) ;
ExcelUtil ExcelUtil = new ExcelUtil ( ) ;
Map < String , Object > exportMap = ExcelUtil . export ( workbook , request , response ) ;
bs . writeLog ( "考勤汇总报表导出:" ) ;
bs . writeLog ( Util . null2String ( exportMap . get ( "url" ) ) ) ;
retmap . putAll ( exportMap ) ;
retmap . put ( "status" , "1" ) ;
} catch ( Exception e ) {
@ -567,6 +578,19 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
}
private List < Map < String , Object > > getDtDates ( String targetYear , String targetMonth , String status , String subCompanyIds , String depIds , String empIds ) {
//20240528需求变更,
// 当前登录人员为人员分组管理员时, 取其管理的人员明细( 人员id,生效日期,失效日期)来筛选待汇总的数据;
// 当前登录人员非人员分组管理员时, 取其下属的人员id来筛选待汇总的数据
Map < String , Object > userManageInfo = getUserManageInfo ( ) ;
List < String > targetEmpIdList = new ArrayList < > ( ) ;
if ( ! "" . equals ( empIds ) ) {
targetEmpIdList = getManageEmpIds ( userManageInfo , Arrays . asList ( empIds . split ( "," ) ) , targetYear + "-" + targetMonth ) ;
} else {
targetEmpIdList = getManageEmpIds ( userManageInfo , new ArrayList < > ( ) , targetYear + "-" + targetMonth ) ;
}
if ( targetEmpIdList . size ( ) = = 0 ) {
return new ArrayList < > ( ) ;
}
String mainListSql = "select * from uf_jcl_kq_cqhz where nd= " + targetYear + " and yf = " + targetMonth ;
List < Map < String , Object > > mainDates = DbTools . getSqlToList ( mainListSql ) ;
List < String > mainIds = new ArrayList < > ( ) ;
@ -588,8 +612,9 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
if ( ! depIds . equals ( "" ) ) {
dtListSql = dtListSql + " and a.gzbm in (" + depIds + ")" ;
}
if ( ! empIds . equals ( "" ) ) {
dtListSql = dtListSql + " and a.ry in (" + empIds + ")" ;
if ( targetEmpIdList . size ( ) > 0 ) {
// dtListSql = dtListSql + " and a.ry in (" + empIds + ")";
dtListSql = dtListSql + " and a.ry in (" + String . join ( "," , targetEmpIdList ) + ")" ;
}
if ( mainIds . size ( ) > 0 ) {
dtListSql = dtListSql + " and a.mainid in (" + String . join ( "," , mainIds ) + ")" ;
@ -602,6 +627,56 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
}
private List < String > getManageEmpIds ( Map < String , Object > userManageInfo , List < String > empIdList , String yearMonth ) {
List < String > manageEmpIdList = new ArrayList < > ( ) ;
manageEmpIdList . add ( String . valueOf ( user . getUID ( ) ) ) ;
boolean groupManageSign = ( boolean ) userManageInfo . get ( "groupManageSign" ) ;
if ( groupManageSign ) {
userManageInfo . remove ( "groupManageSign" ) ;
String listType = ( String ) userManageInfo . get ( "listType" ) ;
if ( PersonGroupListTypeEnum . PERSON . getKey ( ) . equals ( listType ) ) {
userManageInfo . remove ( "listType" ) ;
userManageInfo . forEach ( ( key , value ) - > {
Map < String , Object > forceTimeItem = ( Map < String , Object > ) value ;
String startDate = ( String ) forceTimeItem . get ( "startDate" ) ;
String endDate = ( String ) forceTimeItem . get ( "endDate" ) ;
if ( startDate . substring ( 0 , 7 ) . compareTo ( yearMonth ) < = 0 & & ( "" . equals ( endDate ) | | endDate . substring ( 0 , 7 ) . compareTo ( yearMonth ) > = 0 ) ) {
manageEmpIdList . add ( key ) ;
}
} ) ;
} else if ( PersonGroupListTypeEnum . CONDITION . getKey ( ) . equals ( listType ) ) {
userManageInfo . remove ( "listType" ) ;
userManageInfo . forEach ( ( key , value ) - > {
List < Map < String , Object > > forceTimeItemList = ( List < Map < String , Object > > ) value ;
boolean forceTimeAllowSign ;
for ( Map < String , Object > forceTimeItem : forceTimeItemList ) {
String startDate = ( String ) forceTimeItem . get ( "startDate" ) ;
String endDate = ( String ) forceTimeItem . get ( "endDate" ) ;
forceTimeAllowSign = startDate . substring ( 0 , 7 ) . compareTo ( yearMonth ) < = 0 & & ( "" . equals ( endDate ) | | endDate . substring ( 0 , 7 ) . compareTo ( yearMonth ) > = 0 ) ;
if ( forceTimeAllowSign ) {
manageEmpIdList . add ( key ) ;
break ;
}
}
} ) ;
}
} else {
List < String > subEmpIdList = ( List < String > ) userManageInfo . get ( "subEmpIdList" ) ;
manageEmpIdList . addAll ( subEmpIdList ) ;
}
if ( empIdList . size ( ) > 0 ) {
empIdList = empIdList . stream ( )
. filter ( manageEmpIdList : : contains )
. distinct ( )
. collect ( Collectors . toList ( ) ) ;
} else {
empIdList = manageEmpIdList . stream ( ) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
}
return empIdList ;
}
/ * *
* 获 取 临 时 出 勤 汇 总 数 据
* 基 于 入 参 中 分 部 、 部 门 、 人 员 id 、 人 员 状 态 、 考 勤 时 间 区 间 等 字 段 ,
@ -639,22 +714,26 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
//人员状态,试用-0, 正式-1, 临时-2, 试用延期-3, 解聘-4, 离职-5, 退休-6, 无效-7, 在职-8, 全部-9
String empStatus = Util . null2String ( params . get ( "status" ) ) ; //人员状态
bs . writeLog ( "startDate : " + startDate + ", endDate : " + endDate + ", subCompanyIds : " + subCompanyIds + ", departmentIds : " + departmentIds + ", empIds : " + empIds + ", empStatus : " + empStatus ) ;
//20240528需求变更,
// 当前登录人员为人员分组管理员时, 取其管理的人员明细( 人员id,生效日期,失效日期)来筛选待汇总的数据;
// 当前登录人员非人员分组管理员时, 取其下属的人员id来筛选待汇总的数据
Map < String , Object > userManageInfo = getUserManageInfo ( ) ;
if ( ! startDate . equals ( "" ) & & ! endDate . equals ( "" ) ) {
//临时汇总出勤结果表、补打卡表、出勤津贴表数据
//出勤结果表
List < Map < String , Object > > cqAddList = getTemCqAddList ( startDate , endDate , subCompanyIds , departmentIds , empIds , empStatus ) ;
List < Map < String , Object > > cqAddList = getTemCqAddList ( startDate , endDate , subCompanyIds , departmentIds , empIds , empStatus , userManageInfo );
bs . writeLog ( "cqAddList_size : " + cqAddList . size ( ) ) ;
if ( cqAddList . size ( ) > 0 ) {
addList . addAll ( cqAddList ) ;
}
//补打卡表
List < Map < String , Object > > bdkAddList = getTemBdkAddList ( startDate , endDate , subCompanyIds , departmentIds , empIds , empStatus );
List < Map < String , Object > > bdkAddList = getTemBdkAddList ( startDate , endDate , subCompanyIds , departmentIds , empIds , empStatus , userManageInfo );
bs . writeLog ( "bdkAddList_size : " + bdkAddList . size ( ) ) ;
if ( bdkAddList . size ( ) > 0 ) {
addList . addAll ( bdkAddList ) ;
}
//出勤津贴表
List < Map < String , Object > > cqjtAddList = getTemCqjtAddList ( startDate , endDate , subCompanyIds , departmentIds , empIds , empStatus );
List < Map < String , Object > > cqjtAddList = getTemCqjtAddList ( startDate , endDate , subCompanyIds , departmentIds , empIds , empStatus , userManageInfo );
bs . writeLog ( "cqjtAddList_size : " + cqjtAddList . size ( ) ) ;
if ( cqjtAddList . size ( ) > 0 ) {
addList . addAll ( cqjtAddList ) ;
@ -664,6 +743,32 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
return addList ;
}
//获取当前登录者所能管理的人员信息,
// 如果其是分组管理员, 则从分组明细中获取被管理人员的人员id和管理时间区间信息;
// 否则只获取将当前登录人员作为直接上级的人员信息
private Map < String , Object > getUserManageInfo ( ) {
Map < String , Object > userManageInfo = new HashMap < > ( ) ;
String sql = "select * from uf_ryqz where fzgly = " + user . getUID ( ) + " and (delete_type=0 or delete_type is null)" ;
List < Map < String , Object > > data = DbTools . getSqlToList ( sql ) ;
if ( data . size ( ) = = 1 ) {
userManageInfo . put ( "groupManageSign" , true ) ;
Map < String , Object > empGroupUserInfo = CommonUtil . getEmpGroupUserInfo ( data . get ( 0 ) . get ( "id" ) . toString ( ) ) ;
userManageInfo . putAll ( empGroupUserInfo ) ;
} else if ( data . size ( ) > 1 ) {
throw new AttendanceRunTimeException ( "当前登录人:" + user . getLastname ( ) + "不可以同时管理一个以上的人员分组!" ) ;
} else {
userManageInfo . put ( "groupManageSign" , false ) ;
String subEmpSql = "select * from hrmresource where managerid = " + user . getUID ( ) ;
List < Map < String , Object > > subEmpData = DbTools . getSqlToList ( subEmpSql ) ;
List < String > subEmpIdList = new ArrayList < > ( ) ;
for ( Map < String , Object > map : subEmpData ) {
subEmpIdList . add ( map . get ( "id" ) . toString ( ) ) ;
}
userManageInfo . put ( "subEmpIdList" , subEmpIdList ) ;
}
return userManageInfo ;
}
//汇总出勤结果表
public List < Map < String , String > > getCqAddList ( String mainId , String subCompanyListStr , String startDate , String endDate ) {
String cqSql = "select * from uf_jcl_kq_cqjg where fbid in (" + subCompanyListStr + ") and rq >= '" + startDate + "'" + " and rq <= '" + endDate + "'" ;
@ -1048,7 +1153,7 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
}
//临时汇总出勤结果表
private List < Map < String , Object > > getTemCqAddList ( String startDate , String endDate , String subCompanyIds , String departmentIds , String empIds , String empStatus ) {
private List < Map < String , Object > > getTemCqAddList ( String startDate , String endDate , String subCompanyIds , String departmentIds , String empIds , String empStatus , Map < String , Object > userManageInfo ) {
String cqSql = "select a.* from uf_jcl_kq_cqjg a left join hrmresource b on a.ygid = b.id where a.rq >= '" + startDate + "'" + " and a.rq <= '" + endDate + "'" ;
if ( ! subCompanyIds . equals ( "" ) ) {
cqSql = cqSql + " and a.fbid in (" + subCompanyIds + ")" ;
@ -1070,6 +1175,10 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
//先根据分部、部门、人员、项目分组
Map < String , List < Map < String , Object > > > toDealCqDataWithGroup = new HashMap < > ( ) ;
for ( Map < String , Object > map : cqDates ) {
//20240528需求变更, 校验当前登录人是否有权限查看相关数据
if ( ! checkViewAuth ( userManageInfo , map . get ( "rq" ) . toString ( ) , map . get ( "ygid" ) . toString ( ) ) ) {
continue ;
}
//出勤状态
String cqzt = Util . null2String ( map . get ( "cqzt" ) ) ;
if ( ! cqzt . equals ( "" ) ) {
@ -1325,8 +1434,43 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
}
return cqAddList ;
}
private boolean checkViewAuth ( Map < String , Object > userManageInfo , String rq , String empId ) {
if ( empId . equals ( String . valueOf ( user . getUID ( ) ) ) ) {
return true ;
}
boolean groupManageSign = ( boolean ) userManageInfo . get ( "groupManageSign" ) ;
if ( groupManageSign ) {
if ( userManageInfo . get ( empId ) = = null ) {
return false ;
}
String listType = ( String ) userManageInfo . get ( "listType" ) ;
if ( listType . equals ( PersonGroupListTypeEnum . PERSON . getKey ( ) ) ) {
Map < String , Object > forceTimeItem = ( Map < String , Object > ) userManageInfo . get ( empId ) ;
String startDate = ( String ) forceTimeItem . get ( "startDate" ) ;
String endDate = ( String ) forceTimeItem . get ( "endDate" ) ;
return rq . compareTo ( startDate ) > = 0 & & ( "" . equals ( endDate ) | | rq . compareTo ( endDate ) < = 0 ) ;
} else if ( listType . equals ( PersonGroupListTypeEnum . CONDITION . getKey ( ) ) ) {
List < Map < String , Object > > forceTimeItemList = ( List < Map < String , Object > > ) userManageInfo . get ( empId ) ;
boolean forceTimeAllowSign ;
for ( Map < String , Object > forceTimeItem : forceTimeItemList ) {
String startDate = ( String ) forceTimeItem . get ( "startDate" ) ;
String endDate = ( String ) forceTimeItem . get ( "endDate" ) ;
forceTimeAllowSign = rq . compareTo ( startDate ) > = 0 & & ( "" . equals ( endDate ) | | rq . compareTo ( endDate ) < = 0 ) ;
if ( forceTimeAllowSign ) {
return true ;
}
}
}
} else {
List < String > subEmpIdList = ( List < String > ) userManageInfo . get ( "subEmpIdList" ) ;
return subEmpIdList . size ( ) > 0 & & subEmpIdList . contains ( empId ) ;
}
return false ;
}
//临时汇总补打卡表
private List < Map < String , Object > > getTemBdkAddList ( String startDate , String endDate , String subCompanyIds , String departmentIds , String empIds , String empStatus ) {
private List < Map < String , Object > > getTemBdkAddList ( String startDate , String endDate , String subCompanyIds , String departmentIds , String empIds , String empStatus , Map < String , Object > userManageInfo ) {
String bdkSql = "select a.*, b.fbid, b.bm from uf_jcl_kq_bdkjl a " +
"left join uf_jcl_kq_cqjg b on a.bdkry = b.ygid and a.dkrq = b.rq " +
"left join hrmresource c on a.bdkry = c.id " +
@ -1351,6 +1495,10 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
//先根据分部、部门、人员、项目分组
Map < String , List < Map < String , Object > > > toDealBdkDataWithGroup = new HashMap < > ( ) ;
for ( Map < String , Object > map : bdkDates ) {
//20240528需求变更, 校验当前登录人是否有权限查看相关数据
if ( ! checkViewAuth ( userManageInfo , map . get ( "dkrq" ) . toString ( ) , map . get ( "bdkry" ) . toString ( ) ) ) {
continue ;
}
//补打卡项目
if ( ! Util . null2String ( map . get ( "bdklx" ) ) . equals ( "" ) ) {
String groupKey = map . get ( "fbid" ) + "_" + map . get ( "bm" ) + "_" + map . get ( "bdkry" ) + "_" + map . get ( "bdklx" ) ;
@ -1389,7 +1537,7 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
return bdkAddList ;
}
//临时汇总出勤津贴表
private List < Map < String , Object > > getTemCqjtAddList ( String startDate , String endDate , String subCompanyIds , String departmentIds , String empIds , String empStatus ) {
private List < Map < String , Object > > getTemCqjtAddList ( String startDate , String endDate , String subCompanyIds , String departmentIds , String empIds , String empStatus , Map < String , Object > userManageInfo ) {
String cqjtSql = "select a.*, b.fbid, b.bm from uf_jcl_kq_cqjt a " +
"left join uf_jcl_kq_cqjg b on a.yg = b.ygid and a.rq = b.rq " +
"left join hrmresource c on a.yg = c.id " +
@ -1414,6 +1562,10 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS
//先根据分部、部门、人员、项目分组
Map < String , List < Map < String , Object > > > toDealCqjtDataWithGroup = new HashMap < > ( ) ;
for ( Map < String , Object > map : cqjtDates ) {
//20240528需求变更, 校验当前登录人是否有权限查看相关数据
if ( ! checkViewAuth ( userManageInfo , map . get ( "rq" ) . toString ( ) , map . get ( "yg" ) . toString ( ) ) ) {
continue ;
}
//津贴类型
if ( ! Util . null2String ( map . get ( "jtlx" ) ) . equals ( "" ) ) {
String groupKey = map . get ( "fbid" ) + "_" + map . get ( "bm" ) + "_" + map . get ( "bdkry" ) + "_" + map . get ( "bdklx" ) ;