有效时长,计算逻辑调整

dev_dxf
dxfeng 11 months ago
parent 32f0266e80
commit 1f920506ff

@ -1,9 +1,12 @@
package com.engine.kq.job;
import com.engine.kq.biz.KQReportBiz;
import com.engine.kq.biz.KQTimesArrayComInfo;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.interfaces.schedule.BaseCronJob;
import java.text.SimpleDateFormat;
@ -30,7 +33,8 @@ public class SynClockInTimeJob extends BaseCronJob {
try{
RecordSet rs1 = new RecordSet();
//只查询 来源 是 导入的
rs.executeQuery("select * from uf_jbtz where ly=1 and ksrq>=? and jsrq<=?",lastdate,currentdate);
// rs.executeQuery("select * from uf_jbtz where ly=1 and ksrq>=? and jsrq<=?",lastdate,currentdate);
rs.executeQuery("select * from uf_jbtz where ksrq>=? and jsrq<=?",lastdate,currentdate);
while(rs.next()){
String mainid = Util.null2String(rs.getString("id"));
String userid = Util.null2String(rs.getString("jbr"));
@ -43,11 +47,22 @@ public class SynClockInTimeJob extends BaseCronJob {
String starttime = ksrq+" "+kssj+":00";
String endtime = jsrq+" "+jssj+":00";
User user = new User(Integer.parseInt(userid));
String beforetwohours_starttime = addDateHour(starttime,-2);
String aftertwohours_endtime = addDateHour(endtime,2);
String earlystarttime = getEarlyStartTime(beforetwohours_starttime,starttime,ksrq,userid);
String afterendtime = getAfterEndTime(endtime,aftertwohours_endtime,jsrq,userid);
// String earlystarttime = getEarlyStartTime(beforetwohours_starttime,starttime,ksrq,userid);
// String afterendtime = getAfterEndTime(endtime,aftertwohours_endtime,jsrq,userid);
String earlystarttime = getEarlyStartTime(gzrq,userid,user);
String afterendtime = "";
if(checkIsNightSerial(userid,gzrq)){
afterendtime = getAfterEndTime(gzrq,userid,user);
}else{
afterendtime = getAfterEndTime(jsrq,userid,user);
}
boolean bool = rs1.executeUpdate("update uf_jbtz set zzdksj=?,zwdkrq=? where id=?",earlystarttime,afterendtime,mainid);
if(bool){
@ -69,6 +84,182 @@ public class SynClockInTimeJob extends BaseCronJob {
rs.writeLog("---------- end to syn overtime work card time ----------");
}
public static String getEarlyStartTime(String kqDate,String resourceId,User user){
String result = "";
Map<String, Object> data = null;
Map<String, Object> signStatusInfo = null;
RecordSet rs = new RecordSet();
try {
String sql = " select kqdate, resourceid,groupid,serialid,serialnumber,workbegindate,workbegintime, " +
" workenddate,workendtime,workmins,signindate,signintime,signinid,signoutdate,signouttime,signoutid, " +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins," +
" forgotcheckmins,forgotBeginWorkCheckMins,leaveMins,leaveInfo,evectionMins,outMins,otherinfo " +
" from kq_format_detail b " +
" where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' " +
" order by serialnumber ";
rs.execute(sql);
while (rs.next()) {
String serialid = Util.null2String(rs.getString("serialid"));
String workbegindate = Util.null2String(rs.getString("workbegindate")).trim();
String workbegintime = Util.null2String(rs.getString("workbegintime")).trim();
String signinid = Util.null2String(rs.getString("signinid")).trim();
String signintime = Util.null2String(rs.getString("signintime")).trim();
String beLateMins = Util.null2String(rs.getString("beLateMins")).trim();
String graveBeLateMins = Util.null2String(rs.getString("graveBeLateMins")).trim();
String absenteeismMins = Util.null2String(rs.getString("absenteeismMins")).trim();
String forgotBeginWorkCheckMins = Util.null2String(rs.getString("forgotBeginWorkCheckMins")).trim();
int leaveMins = rs.getInt("leaveMins");
String leaveInfo = Util.null2String(rs.getString("leaveInfo"));
int evectionMins = rs.getInt("evectionMins");
int outMins = rs.getInt("outMins");
if (serialid.length() > 0) {
if (workbegintime.length() > 0) {
signStatusInfo = new HashMap();
signStatusInfo.put("workdate", workbegindate);
signStatusInfo.put("worktime", workbegintime);
signStatusInfo.put("signtime", signintime);
signStatusInfo.put("beLateMins", beLateMins);
signStatusInfo.put("forgotBeginWorkCheckMins", forgotBeginWorkCheckMins);
signStatusInfo.put("graveBeLateMins", graveBeLateMins);
signStatusInfo.put("absenteeismMins", absenteeismMins);
signStatusInfo.put("leaveMins", leaveMins);
signStatusInfo.put("leaveInfo", leaveInfo);
signStatusInfo.put("evectionMins", evectionMins);
signStatusInfo.put("outMins", outMins);
data = new HashMap<>();
data.put("workTime", workbegintime);
data.put("signTime", signintime.length() == 0 ? "" : signintime);
data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, "on"));
Map<String, Object> signDetailInfo = getSignDetailInfo(signinid);
data.put("addr", Util.null2String(signDetailInfo.get("addr")));
}
} else {
signStatusInfo = new HashMap();
signStatusInfo.put("leaveMins", leaveMins);
signStatusInfo.put("leaveInfo", leaveInfo);
signStatusInfo.put("evectionMins", evectionMins);
signStatusInfo.put("outMins", outMins);
if (signinid.length() > 0) {
data = new HashMap<>();
data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, ""));
data.put("signTime", signintime.length() == 0 ? "" : signintime);
Map<String, Object> signDetailInfo = getSignDetailInfo(signinid);
data.put("addr", Util.null2String(signDetailInfo.get("addr")));
} else {
data = new HashMap<>();
data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, ""));
}
}
}
if(data.containsKey("signTime")){
String signTime = data.get("signTime").toString();
if(signTime != null && !"".equals(signTime)){
result = kqDate + " " + signTime;
}
}
}catch (Exception e) {
rs.writeLog(e);
}
return result;
}
public static String getAfterEndTime(String kqDate,String resourceId,User user){
String result = "";
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
Map<String, Object> data = null;
Map<String, Object> signStatusInfo = null;
RecordSet rs = new RecordSet();
try {
String sql = " select kqdate, resourceid,groupid,serialid,serialnumber,workbegindate,workbegintime, " +
" workenddate,workendtime,workmins,signindate,signintime,signinid,signoutdate,signouttime,signoutid, " +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins," +
" forgotcheckmins,forgotBeginWorkCheckMins,leaveMins,leaveInfo,evectionMins,outMins,otherinfo " +
" from kq_format_detail b " +
" where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' " +
" order by serialnumber ";
rs.execute(sql);
while (rs.next()) {
String serialid = Util.null2String(rs.getString("serialid"));
String workenddate = Util.null2String(rs.getString("workenddate")).trim();
String workendtime = Util.null2String(rs.getString("workendtime")).trim();
String signoutid = Util.null2String(rs.getString("signoutid")).trim();
String signouttime = Util.null2String(rs.getString("signouttime")).trim();
String leaveEarlyMins = Util.null2String(rs.getString("leaveEarlyMins")).trim();
String graveLeaveEarlyMins = Util.null2String(rs.getString("graveLeaveEarlyMins")).trim();
String absenteeismMins = Util.null2String(rs.getString("absenteeismMins")).trim();
String forgotCheckMins = Util.null2String(rs.getString("forgotCheckMins")).trim();
int leaveMins = rs.getInt("leaveMins");
String leaveInfo = Util.null2String(rs.getString("leaveInfo"));
int evectionMins = rs.getInt("evectionMins");
int outMins = rs.getInt("outMins");
if (serialid.length() > 0) {
if (workendtime.length() > 0) {
signStatusInfo = new HashMap();
signStatusInfo.put("workdate", workenddate);
signStatusInfo.put("worktime", kqTimesArrayComInfo.turn48to24Time(workendtime));
signStatusInfo.put("signtime", signouttime);
signStatusInfo.put("leaveEarlyMins", leaveEarlyMins);
signStatusInfo.put("graveLeaveEarlyMins", graveLeaveEarlyMins);
signStatusInfo.put("forgotCheckMins", forgotCheckMins);
signStatusInfo.put("absenteeismMins", absenteeismMins);
signStatusInfo.put("leaveMins", leaveMins);
signStatusInfo.put("leaveInfo", leaveInfo);
signStatusInfo.put("evectionMins", evectionMins);
signStatusInfo.put("outMins", outMins);
data = new HashMap<>();
data.put("workTime", kqTimesArrayComInfo.turn48to24Time(workendtime));
data.put("signTime", signouttime.length() == 0 ? "" : signouttime);
data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, "off"));
Map<String, Object> signDetailInfo = getSignDetailInfo(signoutid);
data.put("addr", Util.null2String(signDetailInfo.get("addr")));
}
} else {
signStatusInfo = new HashMap();
signStatusInfo.put("leaveMins", leaveMins);
signStatusInfo.put("leaveInfo", leaveInfo);
signStatusInfo.put("evectionMins", evectionMins);
signStatusInfo.put("outMins", outMins);
if (signoutid.length() > 0) {
data = new HashMap<>();
data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, ""));
data.put("signTime", signouttime.length() == 0 ? "" : signouttime);
Map<String, Object> signDetailInfo = getSignDetailInfo(signoutid);
data.put("addr", Util.null2String(signDetailInfo.get("addr")));
} else {
data = new HashMap<>();
data.put("signStatus", KQReportBiz.getSignStatus(signStatusInfo, user, ""));
}
}
}
if(data.containsKey("signTime")){
String signTime = data.get("signTime").toString();
if(signTime != null && !"".equals(signTime)){
result = kqDate + " " + signTime;
}
}
}catch (Exception e) {
rs.writeLog(e);
}
return result;
}
public static Map<String,Object> getSignDetailInfo(String id){
Map<String,Object> resultMap = new HashMap<>();
RecordSet rs = new RecordSet();
String sql = "";
try{
sql = " select addr from hrmschedulesign where id = ? ";
rs.executeQuery(sql,id);
if(rs.next()){
resultMap.put("addr",Util.null2String(rs.getString("addr")));
}
}catch (Exception e){
rs.writeLog(e);
}
return resultMap;
}
/**
*
* @param beforetwohours_starttime
@ -78,7 +269,7 @@ public class SynClockInTimeJob extends BaseCronJob {
* @return
*/
public static String getEarlyStartTime(String beforetwohours_starttime,String starttime,String ksrq,String userid){
String result = starttime;
String result = "";
RecordSet rs = new RecordSet();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<Date> list = new ArrayList<>();
@ -99,10 +290,10 @@ public class SynClockInTimeJob extends BaseCronJob {
String signTime = Util.null2String(rs.getString("signTime"));
String signdatetime = signDate + " " + signTime;
boolean bool = belongCalendar(signdatetime, beforetwohours_starttime, starttime);
if (bool) {
list.add(format.parse(signdatetime));
}
// boolean bool = belongCalendar(signdatetime, beforetwohours_starttime, starttime);
// if (bool) {
list.add(format.parse(signdatetime));
// }
}
if(list.size()>0){
if(list.size()>1){
@ -127,7 +318,7 @@ public class SynClockInTimeJob extends BaseCronJob {
* @return
*/
public static String getAfterEndTime(String endtime,String aftertwohours_endtime,String jsrq,String userid){
String result = endtime;
String result = "";
RecordSet rs = new RecordSet();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<Date> list = new ArrayList<>();
@ -148,10 +339,10 @@ public class SynClockInTimeJob extends BaseCronJob {
String signTime = Util.null2String(rs.getString("signTime"));
String signdatetime = signDate + " " + signTime;
boolean bool = belongCalendar(signdatetime, endtime, aftertwohours_endtime);
if (bool) {
list.add(format.parse(signdatetime));
}
// boolean bool = belongCalendar(signdatetime, endtime, aftertwohours_endtime);
// if (bool) {
list.add(format.parse(signdatetime));
// }
}
if(list.size()>0){
if(list.size()>1){
@ -254,4 +445,24 @@ public class SynClockInTimeJob extends BaseCronJob {
return "";
}
/**
*
* @param userid
* @param date
* @return
*/
public static boolean checkIsNightSerial(String userid,String date){
boolean bool = false;
RecordSet rs = new RecordSet();
String night_serialids = rs.getPropValue("nbjh_ygdjblc","night_serialids");
rs.executeQuery("select * from kq_format_detail where resourceid = ? and kqdate = ? ",userid,date);
while(rs.next()){
String serialid = Util.null2String(rs.getString("serialid"));
if((","+night_serialids+",").contains((","+serialid+","))){
bool = true;
}
}
return bool;
}
}

@ -56,15 +56,18 @@ public class UpdateEffectiveDuration {
LocalDateTime endWorkTime = LocalDateTime.parse(endTime, DATE_TIME_FORMATTER);
// 最早、最晚打卡时间,与开始时间、结束时间,是否存在交集
boolean hasIntersection = startSignTime.isBefore(endWorkTime) && endSignTime.isAfter(startWorkTime);
recordSet.executeQuery("select gjsc from uf_jbtz where id = ?", mainId);
recordSet.executeQuery("select gjsc,ly from uf_jbtz where id = ?", mainId);
double gjscHours = 0.0;
String ly = "";
if (recordSet.next()) {
gjscHours = recordSet.getDouble("gjsc");
ly = recordSet.getString("ly");
}
if (gjscHours < 0) {
throw new Exception("mainId===" + mainId + ",共计时长小于0");
}
if (hasIntersection) {
// 只处理来源为导入的数据
if ("1".equals(ly) && hasIntersection) {
int totalMinutes = 0;
if (startSignTime.isAfter(startWorkTime)) {
int startDifference = (int) (startWorkTime.until(startSignTime, ChronoUnit.MINUTES));

Loading…
Cancel
Save