@ -34,6 +34,9 @@ public class KQFormatData extends BaseBean {
private KQLog kqLog = new KQLog ( ) ;
private boolean writeLog = false ;
private LinkedHashMap < String , Object > logInfo = new LinkedHashMap < > ( ) ;
private final List < String > LIST = Arrays . asList ( "1" , "8" , "14" , "15" ) ;
private final static double PI = 3.14159265358979323 ; // 圆周率
private final static double R = 6371229 ; // 地球的半径
/ * * *
* 该 方 法 不 允 许 直 接 调 用
@ -179,6 +182,7 @@ public class KQFormatData extends BaseBean {
Map < String , Object > workFlowInfo , String uuid ) {
List < List < Object > > lsParam = new ArrayList < > ( ) ;
List < Object > params = null ;
RecordSet rt = new RecordSet ( ) ;
try {
bb . writeLog ( "start to format" ) ;
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo ( ) ;
@ -197,6 +201,105 @@ public class KQFormatData extends BaseBean {
List < TimeScopeEntity > lsRestTime = new ArrayList < > ( ) ;
List < Object > workFlow = null ;
bb . writeLog ( "format.groupId:" + workTime . getGroupId ( ) + "format.serialId:" + workTime . getSerialId ( ) ) ;
if ( ( workTime . getGroupId ( ) ! = null & & StringUtils . isNotBlank ( workTime . getGroupId ( ) ) ) & & LIST . contains ( workTime . getGroupId ( ) ) & & ( workTime . getSerialId ( ) = = null | | StringUtils . isBlank ( workTime . getSerialId ( ) ) ) ) {
bb . writeLog ( "start to Automatic shift alignment" + LIST ) ;
bb . writeLog ( "format.userId:" + userId + "format.kqDate:" + kqDate + "format.workTime:" + workTime + "format.workFlowInfo:" + workFlowInfo + "format.uuid:" + uuid ) ;
//责任制考勤组
//当天考勤标识
boolean kqFlag = false ;
boolean xxFlag = false ;
boolean ccFlag = false ;
boolean wqdkFlag = false ;
boolean qjFlag = false ;
String showaddress = "" ;
String dybc = "" ;
//1.查询该员工当天考勤地点(名称)
String sql = "select a.id as id ,a.longitude,a.latitude,a.showaddress,b.id as resourceid, b.lastname," +
" signdate, signtime from hrmschedulesign a left join hrmresource b on b.id = a.userid" +
" left join hrmdepartment c on c.id = b.departmentid" +
" where a.isincom = 1 and b.id = ? and a.signdate = ? order by a.signdate desc" ;
rt . executeQuery ( sql , userId , kqDate ) ;
if ( rt . next ( ) ) {
kqFlag = true ;
showaddress = Util . null2String ( rt . getString ( "showaddress" ) ) ;
}
bb . writeLog ( "sign showaddress:" + showaddress ) ;
//2.查询指定打卡地点的经纬度及范围的list
List < Map < String , String > > list2 = new ArrayList < > ( ) ;
//2.1查询出打卡地点经纬度建模list
String sql2 = "select kqdz,dybc from uf_jwdbj" ;
rt . execute ( sql2 ) ;
while ( rt . next ( ) ) {
Map < String , String > map = new HashMap < > ( ) ;
map . put ( "kqdz" , Util . null2String ( rt . getString ( "kqdz" ) ) ) ;
map . put ( "dybc" , Util . null2String ( rt . getString ( "dybc" ) ) ) ;
list2 . add ( map ) ;
}
bb . writeLog ( "uf_jwdbj.list2:" + list2 ) ;
//3.计算两点之间的距离是否大于范围值,小于则自动对班(白班)
for ( Map < String , String > map : list2 ) {
if ( map . get ( "kqdz" ) . equals ( showaddress ) ) {
dybc = map . get ( "dybc" ) ;
}
}
bb . writeLog ( "format.dybc:" + dybc ) ;
// 4.休息日或节假日给休息班次
int changeType = KQOvertimeRulesBiz . getChangeType ( userId , kqDate ) ;
bb . writeLog ( "format.changeType:" + changeType ) ;
//考勤当天是节假日或者休息日
if ( changeType = = 1 | | changeType = = 3 ) {
xxFlag = true ;
}
bb . writeLog ( "format.xxFlag:" + xxFlag ) ;
//5.外勤打卡(需要有打卡记录+对应的出差流程)
//5.1打卡记录查询
String wqSql = "select * from mobile_sign where operater = ? and operate_date = ? " ;
rt . executeQuery ( wqSql , userId , kqDate ) ;
if ( rt . next ( ) ) {
wqdkFlag = true ;
}
bb . writeLog ( "format.wqdkFlag:" + wqdkFlag ) ;
//5.2出差记录查询
String ccSql = "select currentnodetype from workflow_requestbase where requestid in " +
" (select requestId from formtable_main_61 where sqr = ? and " +
" (ksrq +' '+ kssj) <=? " +
" and (yjjsrq+' '+yjjssj) >=? " ;
rt . executeQuery ( ccSql , userId , kqDate , kqDate ) ;
if ( rt . next ( ) ) {
ccFlag = true ;
}
bb . writeLog ( "format.ccFlag:" + ccFlag ) ;
//6.查询该员工当天是否有已办结的请假流程(有:自动对班;否:不处理)
//6.1 查询当天是否有休假流程, 查询出流程requestid
String sql3 = "select currentnodetype from workflow_requestbase where requestid in (select requestid from kq_flow_split_leave where (fromdatedb +' '+ fromtimedb) <=? " +
"and (todatedb+' '+totimedb) >=?) and currentnodetype in ('1','3') " ;
//6.2 查询这些requestid是否在当天前( 包含当天) 已批准
rt . executeQuery ( sql3 , kqDate , kqDate ) ;
if ( rt . next ( ) ) {
qjFlag = true ;
}
bb . writeLog ( "format.qjFlag:" + qjFlag ) ;
//1.正常打卡给对应打卡地点对应班次
if ( kqFlag ) {
//指定白班
workTime . setSerialId ( dybc ) ;
}
if ( xxFlag ) {
//休息
workTime . setSerialId ( "-1" ) ;
}
if ( wqdkFlag & & ccFlag ) {
//外勤打卡+出差流程
workTime . setSerialId ( "9" ) ;
}
if ( qjFlag ) {
//请假流程指定白班
workTime . setSerialId ( "9" ) ;
}
bb . writeLog ( "format.serialIdLast:" + workTime . getSerialId ( ) ) ;
}
if ( workTime ! = null ) {
lsSignTime = workTime . getSignTime ( ) ; //允许打卡时间
lsWorkTime = workTime . getWorkTime ( ) ; //工作时间
@ -339,6 +442,7 @@ public class KQFormatData extends BaseBean {
logInfo . put ( "" + weaver . systeminfo . SystemEnv . getHtmlLabelName ( 10005299 , weaver . general . ThreadVarLanguage . getLang ( ) ) + "" , workEndDateTime ) ;
logInfo . put ( "" + weaver . systeminfo . SystemEnv . getHtmlLabelName ( 10005300 , weaver . general . ThreadVarLanguage . getLang ( ) ) + "" , lsCheckInfo ) ;
}
for ( int j = 0 ; lsCheckInfo ! = null & & j < lsCheckInfo . size ( ) ; j + + ) {
Map < String , Object > checkInfo = ( Map < String , Object > ) lsCheckInfo . get ( j ) ;
@ -1103,4 +1207,12 @@ public class KQFormatData extends BaseBean {
nonlsParam . add ( evectionMins ) ;
nonlsParam . add ( outMins ) ;
}
public static double getDistance ( double lng1 , double lat1 , double lng2 , double lat2 ) {
double x , y , distance ;
x = ( lng2 - lng1 ) * PI * R
* Math . cos ( ( ( lat1 + lat2 ) / 2 ) * PI / 180 ) / 180 ;
y = ( lat2 - lat1 ) * PI * R / 180 ;
distance = Math . hypot ( x , y ) ;
return distance ;
}
}