@ -370,245 +370,245 @@ public class KQFormatSignData extends BaseBean {
}
/*考勤二开--出差公出流程获取外勤打卡数据start*/
BaseBean bb = new BaseBean ( ) ;
bb . writeLog ( "+-出差公出流程获取外勤打卡数据start" ) ;
bb . writeLog ( "lsCheckInfo: " + lsCheckInfo ) ;
bb . writeLog ( "lsCheckInfo.size(): " + lsCheckInfo . size ( ) ) ;
//获取外勤打卡的前提是已经有归档的出差、公出流程
String evectionTableName = Util . null2String ( bb . getPropValue ( "project_hostar" , "evectionTableName" ) ) ;
// bb.writeLog("evectionTableName: " + evectionTableName);
String outTableName = Util . null2String ( bb . getPropValue ( "project_hostar" , "outTableName" ) ) ;
// bb.writeLog("outTableName: " + outTableName);
if ( StringUtils . isNotBlank ( evectionTableName ) & & StringUtils . isNotBlank ( outTableName ) ) {
RecordSet rs = new RecordSet ( ) ;
Integer number = - 1 ;
String acqEvecAndOutSql = " select sum(a.number) as number " +
" from ( " +
" SELECT " +
" count(*) as number " +
" FROM " +
" workflow_requestbase " +
" WHERE " +
" requestid IN ( SELECT requestid FROM " + evectionTableName + " WHERE sqr = '" + userId + "' and ksrq <='" + kqDate + "' and yjjsrq >='" + kqDate + "' ) " +
" AND currentnodetype = 3 " +
" UNION all " +
" SELECT " +
" count(*) as number " +
" FROM " +
" workflow_requestbase " +
" WHERE " +
" requestid IN ( SELECT requestid FROM " + outTableName + " WHERE sqr = '" + userId + "' and ksrq <='" + kqDate + "' and yjjsrq >='" + kqDate + "') " +
// BaseBean bb = new BaseBean();
//
// bb.writeLog("+-出差公出流程获取外勤打卡数据start");
// bb.writeLog("lsCheckInfo: " + lsCheckInfo);
// bb.writeLog("lsCheckInfo.size(): " + lsCheckInfo.size());
// //获取外勤打卡的前提是已经有归档的出差、公出流程
// String evectionTableName = Util.null2String(bb.getPropValue("project_hostar","evectionTableName"));
//// bb.writeLog("evectionTableName: " + evectionTableName);
//
// String outTableName = Util.null2String(bb.getPropValue("project_hostar","outTableName"));
//// bb.writeLog("outTableName: " + outTableName);
//
// if ( StringUtils.isNotBlank(evectionTableName) && StringUtils.isNotBlank(outTableName) ) {
// RecordSet rs = new RecordSet();
// Integer number = -1;
// String acqEvecAndOutSql = " select sum(a.number) as number " +
// " from ( " +
// " SELECT " +
// " count(*) as number " +
// " FROM " +
// " workflow_requestbase " +
// " WHERE " +
// " requestid IN ( SELECT requestid FROM "+evectionTableName+" WHERE sqr = '"+userId+"' and ksrq <='"+kqDate+"' and yjjsrq >='"+kqDate+"' ) " +
// " AND currentnodetype = 3 " +
") a " ;
rs . executeQuery ( acqEvecAndOutSql ) ;
// bb.writeLog("acqEvecAndOutSql: " + acqEvecAndOutSql);
while ( rs . next ( ) ) {
number = Util . getIntValue ( Util . null2String ( rs . getString ( "number" ) ) ) ;
}
bb . writeLog ( "number: " + number ) ;
if ( lsCheckInfo . size ( ) < 2 & & number > 0 ) { //只考虑每天一次上下班,原始打卡记录没有取到两次打卡记录则考虑外勤打卡
List < String > legWorkInfos = new ArrayList < > ( ) ;
//获取允许打卡时间
String signBeginTime = signTimeScope . getBeginTime ( ) ;
// bb.writeLog("signBeginTime: " + signBeginTime);
if ( StringUtils . isNotBlank ( signBeginTime ) ) {
signBeginTime = signBeginTime + ":00" ;
}
// bb.writeLog("signBeginTime: " + signBeginTime);
//获取上班时间
String workBeginTime = workTimeScope . getBeginTime ( ) ;
// bb.writeLog("workBeginTime: " + workBeginTime);
if ( StringUtils . isNotBlank ( workBeginTime ) ) {
workBeginTime = workBeginTime + ":00" ;
}
// bb.writeLog("workBeginTime: " + workBeginTime);
String acqLegWorkSignSql = "select operate_time from mobile_sign where operater = ? and operate_date = '" + kqDate + "' and operate_time >='" + signBeginTime + "' order by operate_time asc " ;
bb . writeLog ( "acqLegWorkSignSql: " + acqLegWorkSignSql ) ;
// bb.writeLog("userId: " + userId);
rs . executeQuery ( acqLegWorkSignSql , userId ) ;
while ( rs . next ( ) ) {
String operateTime = Util . null2String ( rs . getString ( "operate_time" ) ) ;
if ( StringUtils . isNotBlank ( operateTime ) ) {
legWorkInfos . add ( operateTime ) ;
}
}
bb . writeLog ( "legWorkInfos: " + legWorkInfos ) ;
if ( legWorkInfos ! = null & & legWorkInfos . size ( ) > 0 ) {
boolean onFlag = false ; //上班卡
boolean offFlag = false ; //下班卡
//判断需要获取的打卡
for ( Object obj : lsCheckInfo ) {
if ( obj ! = null ) {
Map < String , Object > checkInfo = ( Map < String , Object > ) obj ;
Integer signType = Util . getIntValue ( Util . null2String ( checkInfo . get ( "signType" ) ) ) ;
if ( signType = = 1 ) {
onFlag = true ;
}
if ( signType = = 2 ) {
offFlag = true ;
}
}
}
String tempSignIn = "" ;
String tempSignOut = "" ;
Map < String , Object > checkInfo = new HashMap < > ( ) ;
if ( legWorkInfos . size ( ) = = 1 ) { //只有一笔外勤卡直接算上班
if ( onFlag & & ! offFlag ) {
checkInfo . put ( "signType" , "2" ) ;
checkInfo . put ( "signDate" , kqDate ) ; //签到签退日期
checkInfo . put ( "signTime" , legWorkInfos . get ( 0 ) ) ; //签到签退时间
checkInfo . put ( "deduct_signintime" , "" ) ; //流程抵扣作为打卡时间
checkInfo . put ( "signStatus" , ButtonStatusEnum . NORMAL . getStatusCode ( ) ) ;
lsCheckInfo . add ( checkInfo ) ;
}
if ( ! onFlag & & offFlag ) {
checkInfo . put ( "signType" , "1" ) ;
checkInfo . put ( "signDate" , kqDate ) ; //签到签退日期
checkInfo . put ( "signTime" , legWorkInfos . get ( 0 ) ) ; //签到签退时间
checkInfo . put ( "deduct_signintime" , "" ) ; //流程抵扣作为打卡时间
checkInfo . put ( "signStatus" , ButtonStatusEnum . NORMAL . getStatusCode ( ) ) ;
lsCheckInfo . add ( checkInfo ) ;
}
} else {
for ( String signTime : legWorkInfos ) {
if ( signTime . compareTo ( workBeginTime ) < 0 ) { //获取上班时间点之前最早的一笔卡
if ( StringUtils . isBlank ( tempSignIn ) ) {
tempSignIn = signTime ;
} else {
if ( signTime . compareTo ( tempSignIn ) < 0 ) {
tempSignIn = signTime ;
}
}
}
if ( signTime . compareTo ( workBeginTime ) > 0 ) { //下班卡取最晚的一笔
if ( StringUtils . isBlank ( tempSignIn ) ) {
tempSignOut = signTime ;
} else {
if ( signTime . compareTo ( tempSignOut ) > 0 ) {
tempSignOut = signTime ;
}
}
}
}
if ( offFlag & & ! onFlag ) {
checkInfo . put ( "signType" , "1" ) ;
checkInfo . put ( "signDate" , kqDate ) ; //签到签退日期
checkInfo . put ( "signTime" , tempSignIn ) ; //签到签退时间
checkInfo . put ( "deduct_signintime" , "" ) ; //流程抵扣作为打卡时间
checkInfo . put ( "signStatus" , ButtonStatusEnum . NORMAL . getStatusCode ( ) ) ;
lsCheckInfo . add ( checkInfo ) ;
}
if ( onFlag & & ! offFlag ) {
checkInfo = new HashMap < > ( ) ;
checkInfo . put ( "signType" , "2" ) ;
checkInfo . put ( "signDate" , kqDate ) ; //签到签退日期
checkInfo . put ( "signTime" , tempSignOut ) ; //签到签退时间
checkInfo . put ( "deduct_signintime" , "" ) ; //流程抵扣作为打卡时间
checkInfo . put ( "signStatus" , ButtonStatusEnum . NORMAL . getStatusCode ( ) ) ;
lsCheckInfo . add ( checkInfo ) ;
}
}
}
} else if ( lsCheckInfo . size ( ) = = 2 ) {
List < String > legWorkInfos = new ArrayList < > ( ) ;
//获取允许打卡时间
String signBeginTime = signTimeScope . getBeginTime ( ) ;
// bb.writeLog("signBeginTime: " + signBeginTime);
if ( StringUtils . isNotBlank ( signBeginTime ) ) {
signBeginTime = signBeginTime + ":00" ;
}
// bb.writeLog("signBeginTime: " + signBeginTime);
//获取上班时间
String workBeginTime = workTimeScope . getBeginTime ( ) ;
// bb.writeLog("workBeginTime: " + workBeginTime);
if ( StringUtils . isNotBlank ( workBeginTime ) ) {
workBeginTime = workBeginTime + ":00" ;
}
// bb.writeLog("workBeginTime: " + workBeginTime);
String acqLegWorkSignSql = "select operate_time from mobile_sign where operater = ? and operate_date = '" + kqDate + "' and operate_time >='" + signBeginTime + "' order by operate_time asc " ;
bb . writeLog ( "acqLegWorkSignSql: " + acqLegWorkSignSql ) ;
bb . writeLog ( "userId: " + userId ) ;
rs . executeQuery ( acqLegWorkSignSql , userId ) ;
while ( rs . next ( ) ) {
String operateTime = Util . null2String ( rs . getString ( "operate_time" ) ) ;
if ( StringUtils . isNotBlank ( operateTime ) ) {
legWorkInfos . add ( operateTime ) ;
}
}
// " UNION all " +
// " SELECT " +
// " count(*) as number " +
// " FROM " +
// " workflow_requestbase " +
// " WHERE " +
// " requestid IN ( SELECT requestid FROM "+outTableName+" WHERE sqr = '"+userId+"' and ksrq <='"+kqDate+"' and yjjsrq >='"+kqDate+"') " +
//// " AND currentnodetype = 3 " +
// ") a ";
// rs.executeQuery(acqEvecAndOutSql);
//// bb.writeLog("acqEvecAndOutSql: " + acqEvecAndOutSql);
//
// while (rs.next()) {
// number = Util.getIntValue(Util.null2String(rs.getString("number")));
// }
// bb.writeLog("number: " + number);
//
// if (lsCheckInfo.size() < 2 && number > 0) {//只考虑每天一次上下班,原始打卡记录没有取到两次打卡记录则考虑外勤打卡
// List<String> legWorkInfos = new ArrayList<>();
// //获取允许打卡时间
// String signBeginTime = signTimeScope.getBeginTime();
//// bb.writeLog("signBeginTime: " + signBeginTime);
// if (StringUtils.isNotBlank(signBeginTime)) {
// signBeginTime = signBeginTime + ":00";
// }
//// bb.writeLog("signBeginTime: " + signBeginTime);
// //获取上班时间
// String workBeginTime = workTimeScope.getBeginTime();
//// bb.writeLog("workBeginTime: " + workBeginTime);
// if (StringUtils.isNotBlank(workBeginTime)) {
// workBeginTime = workBeginTime + ":00";
// }
//// bb.writeLog("workBeginTime: " + workBeginTime);
//
// String acqLegWorkSignSql = "select operate_time from mobile_sign where operater = ? and operate_date = '" + kqDate + "' and operate_time >='" + signBeginTime + "' order by operate_time asc ";
// bb.writeLog("acqLegWorkSignSql: " + acqLegWorkSignSql);
//// bb.writeLog("userId: " + userId);
// rs.executeQuery(acqLegWorkSignSql, userId);
// while ( rs.next()) {
// String operateTime = Util.null2String(rs.getString("operate_time"));
// if ( StringUtils.isNotBlank(operateTime) ) {
// legWorkInfos.add(operateTime);
// }
// }
// bb.writeLog("legWorkInfos: " + legWorkInfos);
if ( legWorkInfos ! = null & & legWorkInfos . size ( ) > 0 ) {
String tempSignIn = "" ;
String tempSignOut = "" ;
Map < String , Object > checkInfo = new HashMap < > ( ) ;
if ( legWorkInfos . size ( ) = = 1 ) { //只有一笔外勤卡直接算上班
checkInfo . put ( "signType" , "1" ) ;
checkInfo . put ( "signDate" , kqDate ) ; //签到签退日期
checkInfo . put ( "signTime" , legWorkInfos . get ( 0 ) ) ; //签到签退时间
checkInfo . put ( "deduct_signintime" , "" ) ; //流程抵扣作为打卡时间
checkInfo . put ( "signStatus" , ButtonStatusEnum . NORMAL . getStatusCode ( ) ) ;
lsCheckInfo . add ( checkInfo ) ;
} else {
for ( String signTime : legWorkInfos ) {
if ( signTime . compareTo ( workBeginTime ) < 0 ) { //获取上班时间点之前最早的一笔卡
if ( StringUtils . isBlank ( tempSignIn ) ) {
tempSignIn = signTime ;
} else {
if ( signTime . compareTo ( tempSignIn ) < 0 ) {
tempSignIn = signTime ;
}
}
}
if ( signTime . compareTo ( workBeginTime ) > 0 ) { //下班卡取最晚的一笔
if ( StringUtils . isBlank ( tempSignOut ) ) {
tempSignOut = signTime ;
} else {
if ( signTime . compareTo ( tempSignOut ) > 0 ) {
tempSignOut = signTime ;
}
}
}
}
if ( StringUtils . isNotBlank ( tempSignIn ) ) {
checkInfo . put ( "signType" , "1" ) ;
checkInfo . put ( "signDate" , kqDate ) ; //签到签退日期
checkInfo . put ( "signTime" , tempSignIn ) ; //签到签退时间
checkInfo . put ( "deduct_signintime" , "" ) ; //流程抵扣作为打卡时间
checkInfo . put ( "signStatus" , ButtonStatusEnum . NORMAL . getStatusCode ( ) ) ;
lsCheckInfo . add ( checkInfo ) ;
}
if ( StringUtils . isNotBlank ( tempSignIn ) ) {
checkInfo = new HashMap < > ( ) ;
checkInfo . put ( "signType" , "2" ) ;
checkInfo . put ( "signDate" , kqDate ) ; //签到签退日期
checkInfo . put ( "signTime" , tempSignOut ) ; //签到签退时间
checkInfo . put ( "deduct_signintime" , "" ) ; //流程抵扣作为打卡时间
checkInfo . put ( "signStatus" , ButtonStatusEnum . NORMAL . getStatusCode ( ) ) ;
lsCheckInfo . add ( checkInfo ) ;
}
}
}
}
}
bb . writeLog ( "lsCheckInfo: " + lsCheckInfo ) ;
//
// if (legWorkInfos != null && legWorkInfos.size() > 0 ) {
// boolean onFlag = false;//上班卡
// boolean offFlag = false;//下班卡
//
// //判断需要获取的打卡
// for(Object obj: lsCheckInfo) {
// if (obj != null) {
// Map<String, Object> checkInfo = (Map<String, Object> ) obj;
// Integer signType = Util.getIntValue(Util.null2String(checkInfo.get("signType")));
// if (signType == 1) {
// onFlag = true;
// }
// if (signType == 2) {
// offFlag = true;
// }
// }
// }
//
// String tempSignIn = "";
// String tempSignOut = "";
// Map<String, Object> checkInfo = new HashMap<>();
// if ( legWorkInfos.size() == 1) {//只有一笔外勤卡直接算上班
// if ( onFlag && !offFlag ) {
// checkInfo.put("signType", "2");
// checkInfo.put("signDate", kqDate);//签到签退日期
// checkInfo.put("signTime", legWorkInfos.get(0));//签到签退时间
// checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间
// checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
// lsCheckInfo.add(checkInfo);
// }
// if ( !onFlag && offFlag ) {
// checkInfo.put("signType", "1");
// checkInfo.put("signDate", kqDate);//签到签退日期
// checkInfo.put("signTime", legWorkInfos.get(0));//签到签退时间
// checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间
// checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
// lsCheckInfo.add(checkInfo);
// }
//
// } else {
// for ( String signTime : legWorkInfos) {
// if (signTime.compareTo(workBeginTime) < 0) {//获取上班时间点之前最早的一笔卡
// if (StringUtils.isBlank(tempSignIn)) {
// tempSignIn = signTime;
// } else {
// if ( signTime.compareTo(tempSignIn) < 0 ) {
// tempSignIn = signTime;
// }
// }
// }
// if ( signTime.compareTo(workBeginTime) > 0) {//下班卡取最晚的一笔
// if (StringUtils.isBlank(tempSignIn)) {
// tempSignOut = signTime;
// } else {
// if ( signTime.compareTo(tempSignOut) > 0 ) {
// tempSignOut = signTime;
// }
// }
// }
// }
// if (offFlag && !onFlag ) {
// checkInfo.put("signType", "1");
// checkInfo.put("signDate", kqDate);//签到签退日期
// checkInfo.put("signTime", tempSignIn);//签到签退时间
// checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间
// checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
// lsCheckInfo.add(checkInfo);
// }
// if (onFlag && !offFlag ) {
// checkInfo = new HashMap<>();
// checkInfo.put("signType", "2");
// checkInfo.put("signDate", kqDate);//签到签退日期
// checkInfo.put("signTime", tempSignOut);//签到签退时间
// checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间
// checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
// lsCheckInfo.add(checkInfo);
// }
// }
// }
// } else if ( lsCheckInfo.size() == 2) {
// List<String> legWorkInfos = new ArrayList<>();
// //获取允许打卡时间
// String signBeginTime = signTimeScope.getBeginTime();
//// bb.writeLog("signBeginTime: " + signBeginTime);
// if (StringUtils.isNotBlank(signBeginTime)) {
// signBeginTime = signBeginTime + ":00";
// }
//// bb.writeLog("signBeginTime: " + signBeginTime);
// //获取上班时间
// String workBeginTime = workTimeScope.getBeginTime();
//// bb.writeLog("workBeginTime: " + workBeginTime);
// if (StringUtils.isNotBlank(workBeginTime)) {
// workBeginTime = workBeginTime + ":00";
// }
//// bb.writeLog("workBeginTime: " + workBeginTime);
//
// String acqLegWorkSignSql = "select operate_time from mobile_sign where operater = ? and operate_date = '" + kqDate + "' and operate_time >='" + signBeginTime + "' order by operate_time asc ";
// bb.writeLog("acqLegWorkSignSql: " + acqLegWorkSignSql);
// bb.writeLog("userId: " + userId);
// rs.executeQuery(acqLegWorkSignSql, userId);
// while ( rs.next()) {
// String operateTime = Util.null2String(rs.getString("operate_time"));
// if ( StringUtils.isNotBlank(operateTime) ) {
// legWorkInfos.add(operateTime);
// }
// }
//// bb.writeLog("legWorkInfos: " + legWorkInfos);
//
// if (legWorkInfos != null && legWorkInfos.size() > 0 ) {
//
// String tempSignIn = "";
// String tempSignOut = "";
// Map<String, Object> checkInfo = new HashMap<>();
// if ( legWorkInfos.size() == 1) {//只有一笔外勤卡直接算上班
//
// checkInfo.put("signType", "1");
// checkInfo.put("signDate", kqDate);//签到签退日期
// checkInfo.put("signTime", legWorkInfos.get(0));//签到签退时间
// checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间
// checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
// lsCheckInfo.add(checkInfo);
//
//
// } else {
// for ( String signTime : legWorkInfos) {
// if (signTime.compareTo(workBeginTime) < 0) {//获取上班时间点之前最早的一笔卡
// if (StringUtils.isBlank(tempSignIn)) {
// tempSignIn = signTime;
// } else {
// if ( signTime.compareTo(tempSignIn) < 0 ) {
// tempSignIn = signTime;
// }
// }
// }
// if ( signTime.compareTo(workBeginTime) > 0) {//下班卡取最晚的一笔
// if (StringUtils.isBlank(tempSignOut)) {
// tempSignOut = signTime;
// } else {
// if ( signTime.compareTo(tempSignOut) > 0 ) {
// tempSignOut = signTime;
// }
// }
// }
// }
//
// if(StringUtils.isNotBlank(tempSignIn)) {
// checkInfo.put("signType", "1");
// checkInfo.put("signDate", kqDate);//签到签退日期
// checkInfo.put("signTime", tempSignIn);//签到签退时间
// checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间
// checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
// lsCheckInfo.add(checkInfo);
// }
//
// if(StringUtils.isNotBlank(tempSignIn)) {
// checkInfo = new HashMap<>();
// checkInfo.put("signType", "2");
// checkInfo.put("signDate", kqDate);//签到签退日期
// checkInfo.put("signTime", tempSignOut);//签到签退时间
// checkInfo.put("deduct_signintime", "");//流程抵扣作为打卡时间
// checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
// lsCheckInfo.add(checkInfo);
// }
//
// }
// }
// }
// }
// bb.writeLog("lsCheckInfo: " + lsCheckInfo);
/*考勤二开--出差公出流程获取外勤打卡数据end*/