diff --git a/src/com/engine/hrm/cmd/emmanager/SynKqData4EMCmd.java b/src/com/engine/hrm/cmd/emmanager/SynKqData4EMCmd.java index 155b2b1..725e767 100644 --- a/src/com/engine/hrm/cmd/emmanager/SynKqData4EMCmd.java +++ b/src/com/engine/hrm/cmd/emmanager/SynKqData4EMCmd.java @@ -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> this.params = params; } -// "checkindata": [{ + // "checkindata": [{ // "userid" : "100", // "checkin_type" : 1, // "checkin_time" : "1492617610", @@ -63,16 +62,16 @@ public class SynKqData4EMCmd extends AbstractCommonCommand> RecordSet rs = new RecordSet(); BatchRecordSet bRs = new BatchRecordSet(); List> lsParam = new ArrayList<>(); - List> lsParam_out = new ArrayList<>(); + List> lsParam_out = new ArrayList<>(); List param = null; - List param_out = null; + List param_out = null; List> lsDelParams = new ArrayList<>(); - List> lsDelParams_out = new ArrayList<>(); + List> lsDelParams_out = new ArrayList<>(); List delParams = null; List lsFormatData = new ArrayList<>(); - List lsFormatData_out = new ArrayList<>(); + List lsFormatData_out = new ArrayList<>(); List> lsFormatParams = new ArrayList<>(); List formatParams = null; try { @@ -84,6 +83,12 @@ public class SynKqData4EMCmd extends AbstractCommonCommand> 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> 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> 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 tmpdate = new HashMap(); + 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> 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> 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> 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> 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> 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> overtimeMap.put(resourceId, overtimeList); } } - - for(int i=0;lsFormatData_out!=null&&i(); 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);