@ -1,5 +1,6 @@
package com.engine.hrm.cmd.emmanager ;
import com.alibaba.fastjson.JSON ;
import com.alibaba.fastjson.JSONArray ;
import com.alibaba.fastjson.JSONObject ;
import com.engine.common.biz.AbstractCommonCommand ;
@ -17,8 +18,6 @@ import weaver.conn.BatchRecordSet;
import weaver.conn.RecordSet ;
import weaver.general.Util ;
import com.engine.kq.biz.KQFormatData ;
import java.text.DateFormat ;
import java.text.SimpleDateFormat ;
import java.util.* ;
@ -35,7 +34,7 @@ public class SynKqData4EMCmd extends AbstractCommonCommand<Map<String, Object>>
this . params = params ;
}
// "checkindata": [{
// "checkindata": [{
// "userid" : "100",
// "checkin_type" : 1,
// "checkin_time" : "1492617610",
@ -63,16 +62,16 @@ public class SynKqData4EMCmd extends AbstractCommonCommand<Map<String, Object>>
RecordSet rs = new RecordSet ( ) ;
BatchRecordSet bRs = new BatchRecordSet ( ) ;
List < List < Object > > lsParam = new ArrayList < > ( ) ;
List < List < Object > > lsParam_out = new ArrayList < > ( ) ;
List < List < Object > > lsParam_out = new ArrayList < > ( ) ;
List < Object > param = null ;
List < Object > param_out = null ;
List < Object > param_out = null ;
List < List < Object > > lsDelParams = new ArrayList < > ( ) ;
List < List < Object > > lsDelParams_out = new ArrayList < > ( ) ;
List < List < Object > > lsDelParams_out = new ArrayList < > ( ) ;
List < Object > delParams = null ;
List < String > lsFormatData = new ArrayList < > ( ) ;
List < String > lsFormatData_out = new ArrayList < > ( ) ;
List < String > lsFormatData_out = new ArrayList < > ( ) ;
List < List < Object > > lsFormatParams = new ArrayList < > ( ) ;
List < Object > formatParams = null ;
try {
@ -84,6 +83,12 @@ public class SynKqData4EMCmd extends AbstractCommonCommand<Map<String, Object>>
for ( int i = 0 ; datas ! = null & & i < datas . size ( ) ; i + + ) {
JSONObject data = datas . getJSONObject ( i ) ;
String userid = Util . null2String ( data . getString ( "userid" ) ) ;
//将checkin_time放在前面是用于userid为空的时候日志的打印, 便于定位云桥推送的问题数据, 因为刚刚肉眼看了1w+的数据量,乏了
String checkin_time = Util . null2String ( data . getString ( "checkin_time" ) ) ;
if ( userid . length ( ) = = 0 ) {
writeLog ( "userid为空或者云桥推送数据有问题:checkin_time==" + checkin_time ) ;
continue ;
}
String signtype = Util . null2String ( data . getString ( "checkin_type" ) ) ;
boolean isOutSide = false ; //是否是外勤打卡数据
String outsidesign = "" ; //人员所在考勤组是否开启外勤签到转考勤
@ -92,7 +97,7 @@ public class SynKqData4EMCmd extends AbstractCommonCommand<Map<String, Object>>
if ( kqGroupEntity ! = null ) {
outsidesign = kqGroupEntity . getOutsidesign ( ) ;
}
String checkin_time = Util . null2String ( data . getString ( "checkin_time" ) ) ;
if ( checkin_time . length ( ) = = 0 ) continue ;
String [ ] tmpDateTime = Util . splitString ( DateUtil . getFullDate ( new Date ( new Long ( checkin_time ) * 1000L ) ) , " " ) ;
String signdate = tmpDateTime [ 0 ] . trim ( ) ;
@ -107,27 +112,34 @@ public class SynKqData4EMCmd extends AbstractCommonCommand<Map<String, Object>>
String wifiname = Util . null2String ( data . getString ( "wifiname" ) ) ;
String wifimac = Util . null2String ( data . getString ( "wifimac" ) ) ;
String notes = Util . null2String ( data . getString ( "notes" ) ) ;
String deviceId = Util . null2String ( data . getString ( "deviceId" ) ) ;
String deviceInfo = "" ;
if ( ! "" . equals ( deviceId ) ) {
Map < String , Object > tmpdate = new HashMap < String , Object > ( ) ;
tmpdate . put ( "deviceId" , deviceId ) ;
deviceInfo = JSONObject . toJSONString ( tmpdate ) ;
}
String exception_type = Util . null2String ( data . getString ( "exception_type" ) ) ;
String timeResult = Util . null2String ( data . getString ( "timeResult" ) ) ;
String locationResult = Util . null2String ( data . getString ( "locationResult" ) ) ;
String memo = "" ; //最近一直有云桥的同步报错的问题,先干掉;"wifiname:"+wifiname+"#wifimac:"+wifimac+"#notes:"+notes;
if ( "1" . equals ( cptype ) ) {
//企业微信打卡
if ( signtype . equalsIgnoreCase ( "3" ) ) isOutSide = true ;
//过滤异常数据
if ( exception_type . length ( ) > 0 & & ( exception_type . indexOf ( "未打卡" ) > = 0 | | exception_type . indexOf ( "地点异常" ) > = 0 | | exception_type . indexOf ( "wifi异常" ) > = 0 ) ) {
continue ;
// continue;
}
} else if ( "2" . equals ( cptype ) ) {
//钉钉打卡
// 有一个isLegal 字段, 是否合法, 如果timeResult和locationResult都是空则不合法, 无效打卡数据。
// 有一个isLegal 字段, 是否合法, 如果timeResult和locationResult都是空则不合法, 无效打卡数据。
// 如果是不合法打卡数据, 不传给OA
boolean notLegal = "" . equalsIgnoreCase ( timeResult ) & & "" . equals ( locationResult ) ;
if ( notLegal ) {
continue ;
}
// continue;
}
if ( "Outside" . equals ( locationResult ) ) isOutSide = true ;
//过滤异常数据
if ( "NotSigned" . equals ( timeResult ) ) continue ;
@ -151,9 +163,10 @@ public class SynKqData4EMCmd extends AbstractCommonCommand<Map<String, Object>>
param . add ( longitude ) ;
param . add ( latitude ) ;
param . add ( memo ) ;
param . add ( deviceInfo ) ;
lsParam . add ( param ) ;
String formatData = userid + "|" + signdate ;
String formatData = userid + "|" + signdate +"|" + signtime ;
if ( ! lsFormatData . contains ( formatData ) ) {
lsFormatData . add ( formatData ) ;
}
@ -171,7 +184,7 @@ public class SynKqData4EMCmd extends AbstractCommonCommand<Map<String, Object>>
param_out . add ( "1" ) ;
lsParam_out . add ( param_out ) ;
String formatData_out = userid + "|" + signdate ;
String formatData_out = userid + "|" + signdate +"|" + signtime ;
if ( ! lsFormatData_out . contains ( formatData_out ) ) {
lsFormatData_out . add ( formatData_out ) ;
}
@ -193,7 +206,7 @@ public class SynKqData4EMCmd extends AbstractCommonCommand<Map<String, Object>>
param_out . add ( "1" ) ;
lsParam_out . add ( param_out ) ;
String formatData_out = userid + "|" + signdate ;
String formatData_out = userid + "|" + signdate +"|" + signtime ;
if ( ! lsFormatData_out . contains ( formatData_out ) ) {
lsFormatData_out . add ( formatData_out ) ;
}
@ -210,9 +223,10 @@ public class SynKqData4EMCmd extends AbstractCommonCommand<Map<String, Object>>
param . add ( longitude ) ;
param . add ( latitude ) ;
param . add ( memo ) ;
param . add ( deviceInfo ) ;
lsParam . add ( param ) ;
String formatData = userid + "|" + signdate ;
String formatData = userid + "|" + signdate +"|" + signtime ;
if ( ! lsFormatData . contains ( formatData ) ) {
lsFormatData . add ( formatData ) ;
}
@ -239,6 +253,7 @@ public class SynKqData4EMCmd extends AbstractCommonCommand<Map<String, Object>>
delParams = new ArrayList < > ( ) ;
delParams . add ( formatData [ 0 ] ) ;
delParams . add ( formatData [ 1 ] ) ;
delParams . add ( formatData [ 2 ] ) ;
lsDelParams . add ( delParams ) ;
String resourceId = formatData [ 0 ] ;
@ -255,28 +270,29 @@ public class SynKqData4EMCmd extends AbstractCommonCommand<Map<String, Object>>
overtimeMap . put ( resourceId , overtimeList ) ;
}
}
for ( int i = 0 ; lsFormatData_out ! = null & & i < lsFormatData_out . size ( ) ; i + + ) {
for ( int i = 0 ; lsFormatData_out ! = null & & i < lsFormatData_out . size ( ) ; i + + ) {
String [ ] formatData = Util . splitString ( lsFormatData_out . get ( i ) , "|" ) ;
delParams = new ArrayList < > ( ) ;
delParams . add ( formatData [ 0 ] ) ;
delParams . add ( formatData [ 1 ] ) ;
delParams . add ( formatData [ 2 ] ) ;
lsDelParams_out . add ( delParams ) ;
//使用executeBatchSql删除不了, 暂时用这种方法
sql = " delete from mobile_sign where isImport='1' and operater ='" + formatData [ 0 ] + "' and operate_date = '" + formatData [ 1 ] + "' ";
sql = " delete from mobile_sign where isImport='1' and operater ='" + formatData [ 0 ] + "' and operate_date = '" + formatData [ 1 ] + "' and operate_time='"+ formatData [ 2 ] + "' ";
rs . executeUpdate ( sql ) ;
}
//删除本次同步数据
sql = " delete from hrmschedulesign where (signfrom='EMSyn' or signfrom = 'EMSyn_out') and userid =? and signdate = ? ";
//删除本次同步数据
sql = " delete from hrmschedulesign where (signfrom='EMSyn' or signfrom = 'EMSyn_out') and userid =? and signdate = ? and signtime=? ";
bRs . executeBatchSql ( sql , lsDelParams ) ;
//插入同步数据
sql = " insert into hrmschedulesign (userid,userType,signtype,signdate,signtime,signfrom,isincom,addr,longitude,latitude,memo ) " +
" values(?,?,?,?,?,?,?,?,?,?,? )";
sql = " insert into hrmschedulesign (userid,userType,signtype,signdate,signtime,signfrom,isincom,addr,longitude,latitude,memo ,deviceInfo ) " +
" values(?,?,?,?,?,?,?,?,?,?,? ,? )";
bRs . executeBatchSql ( sql , lsParam ) ;
//插入外勤同步数据
//插入外勤同步数据
sql = " insert into mobile_sign (operater,operate_type,operate_date,operate_time,longitude,latitude,address,remark,isImport) " +
" values(?,?,?,?,?,?,?,?,?)" ;
bRs . executeBatchSql ( sql , lsParam_out ) ;