diff --git a/src/com/engine/hostar/thread/HandleCBDataThread.java b/src/com/engine/hostar/thread/HandleCBDataThread.java index 19e7a6e..3351373 100644 --- a/src/com/engine/hostar/thread/HandleCBDataThread.java +++ b/src/com/engine/hostar/thread/HandleCBDataThread.java @@ -26,6 +26,7 @@ import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; @@ -1150,6 +1151,12 @@ public class HandleCBDataThread extends BaseBean implements Runnable{ HostarUtil hostarUtil = new HostarUtil(); String MealAlloTableName = Util.null2String(bb.getPropValue("project_hostar", "MealAllowanceTableName")); + + // 定义日期格式 + DateTimeFormatter formatterRq = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 定义时间格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss"); + if (StringUtils.isNotBlank(MealAlloTableName)) { //获取餐补判断时间 List> MealMap = new ArrayList<>(); @@ -1190,8 +1197,19 @@ public class HandleCBDataThread extends BaseBean implements Runnable{ if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { startTime = startTime + ":00"; endTime = endTime + ":00"; + + String signDateNew = signDate; + // 判断时间 + LocalTime t1 = LocalTime.parse(startTime, formatter); + LocalTime t2 = LocalTime.parse(endTime, formatter); + if (t2.isBefore(t1)) { + LocalDate dateToday = LocalDate.parse(signDateNew, formatterRq); + // 加一天 + LocalDate nextDayNew = dateToday.plusDays(1); + signDateNew = nextDayNew.format(formatterRq); + } startDateTime = signDate + " " + startTime; - endDateTime = signDate + " " + endTime; + endDateTime = signDateNew + " " + endTime; } if ( (signInDateTime.compareTo(startDateTime) <= 0) && (signOutDateTime.compareTo(endDateTime) >= 0) ) { diff --git a/src/com/engine/kq/biz/KQFormatData.java b/src/com/engine/kq/biz/KQFormatData.java index 8e30474..a85a89c 100644 --- a/src/com/engine/kq/biz/KQFormatData.java +++ b/src/com/engine/kq/biz/KQFormatData.java @@ -23,6 +23,7 @@ import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.lang3.StringUtils; @@ -2365,6 +2366,12 @@ public class KQFormatData extends BaseBean { HostarUtil hostarUtil = new HostarUtil(); String MealAlloTableName = Util.null2String(bb.getPropValue("project_hostar", "MealAllowanceTableName")); + + // 定义日期格式 + DateTimeFormatter formatterRq = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 定义时间格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss"); + if (StringUtils.isNotBlank(MealAlloTableName)) { //获取餐补判断时间 List> MealMap = new ArrayList<>(); @@ -2405,8 +2412,19 @@ public class KQFormatData extends BaseBean { if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { startTime = startTime + ":00"; endTime = endTime + ":00"; + + String signDateNew = signDate; + // 判断时间 + LocalTime t1 = LocalTime.parse(startTime, formatter); + LocalTime t2 = LocalTime.parse(endTime, formatter); + if (t2.isBefore(t1)) { + LocalDate dateToday = LocalDate.parse(signDateNew, formatterRq); + // 加一天 + LocalDate nextDayNew = dateToday.plusDays(1); + signDateNew = nextDayNew.format(formatterRq); + } startDateTime = signDate + " " + startTime; - endDateTime = signDate + " " + endTime; + endDateTime = signDateNew + " " + endTime; } if ( (signInDateTime.compareTo(startDateTime) <= 0) && (signOutDateTime.compareTo(endDateTime) >= 0) ) { diff --git a/src/com/engine/kq/cmd/attendanceButton/PunchOutButtonCmd.java b/src/com/engine/kq/cmd/attendanceButton/PunchOutButtonCmd.java index 7e491ee..b79585f 100644 --- a/src/com/engine/kq/cmd/attendanceButton/PunchOutButtonCmd.java +++ b/src/com/engine/kq/cmd/attendanceButton/PunchOutButtonCmd.java @@ -26,6 +26,7 @@ import weaver.systeminfo.SystemEnv; import javax.servlet.http.HttpServletRequest; import java.time.LocalDateTime; +import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.Map.Entry; @@ -293,17 +294,20 @@ public class PunchOutButtonCmd extends AbstractCommonCommand String outTableName = Util.null2String(bb.getPropValue("project_hostar","outTableName")); if ( StringUtils.isNotBlank(evectionTableName) && StringUtils.isNotBlank(outTableName) ) { - Integer number = -1; + Integer number = 0; String sqlDate = ""; if (StringUtils.isNotBlank(belongdate)) { sqlDate = belongdate; } else { sqlDate = signDate; } - String acqEvecAndOutSql = " SELECT count(*) as number FROM workflow_requestbase WHERE requestid IN " + - "( SELECT requestid FROM " + evectionTableName + " WHERE (sjccr = '" + userId + "' or ','+CAST(nbtxr AS varchar(max))+',' like '%,'+CAST(" +// String acqEvecAndOutSql = " SELECT count(*) as number FROM workflow_requestbase WHERE requestid IN " + +// "( SELECT requestid FROM " + evectionTableName + " WHERE (sjccr = '" + userId + "' or ','+CAST(nbtxr AS varchar(max))+',' like '%,'+CAST(" +// +userId+" AS varchar(10))+',%') and ksrq <='" + sqlDate + "' and (((sjjsrq is null or sjjsrq = '') and yjjsrq >= '" +// + sqlDate + "') or (sjjsrq is not null and sjjsrq != '' and sjjsrq >= '" + sqlDate + "'))) "; + String acqEvecAndOutSql = " SELECT requestid,kssj FROM " + evectionTableName + " WHERE (sjccr = '" + userId + "' or ','+CAST(nbtxr AS varchar(max))+',' like '%,'+CAST(" +userId+" AS varchar(10))+',%') and ksrq <='" + sqlDate + "' and (((sjjsrq is null or sjjsrq = '') and yjjsrq >= '" - + sqlDate + "') or (sjjsrq is not null and sjjsrq != '' and sjjsrq >= '" + sqlDate + "'))) "; + + sqlDate + "') or (sjjsrq is not null and sjjsrq != '' and sjjsrq >= '" + sqlDate + "')) "; // " AND currentnodetype = 3 " + // " UNION all " + // " SELECT " + @@ -317,8 +321,31 @@ public class PunchOutButtonCmd extends AbstractCommonCommand bb.writeLog("acqEvecAndOutSql: " + acqEvecAndOutSql); rs.executeQuery(acqEvecAndOutSql); + // 定义时间格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss"); while (rs.next()) { - number = Util.getIntValue(Util.null2String(rs.getString("number"))); + String requestid = rs.getString("requestid"); + String kssj = rs.getString("kssj"); + if (StringUtils.isEmpty(requestid) || StringUtils.isEmpty(kssj)) { + continue; + } + if (kssj.length() < 8) { + kssj = kssj + ":00"; + } + + // 解析时间字符串为 LocalTime 对象 + LocalTime oldkssj = LocalTime.parse(kssj, formatter); + LocalTime minKssj = LocalTime.parse("01:00:00", formatter); + if (oldkssj.isBefore(minKssj)) { + number = number + 1; + continue; + } + // 减去一小时 + LocalTime previousHour = oldkssj.minusHours(1); + LocalTime signTimeLt = LocalTime.parse(signTime, formatter); + if (!signTimeLt.isBefore(previousHour)) { + number = number + 1; + } } bb.writeLog("number: " + number); diff --git a/src/weaver/interfaces/hostar/action/OutSignSyncAction.java b/src/weaver/interfaces/hostar/action/OutSignSyncAction.java index 303cf45..673f42b 100644 --- a/src/weaver/interfaces/hostar/action/OutSignSyncAction.java +++ b/src/weaver/interfaces/hostar/action/OutSignSyncAction.java @@ -11,6 +11,8 @@ import weaver.interfaces.workflow.action.Action; import weaver.soa.workflow.request.Property; import weaver.soa.workflow.request.RequestInfo; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -28,6 +30,7 @@ public class OutSignSyncAction implements Action { String resourceid = ""; String nbtxr = ""; String sjjsrq = ""; + String kssj = ""; try { @@ -36,6 +39,9 @@ public class OutSignSyncAction implements Action { if ("ksrq".equals(property.getName())) { startDate = Util.null2String(property.getValue()); } + if ("kssj".equals(property.getName())) { + kssj = Util.null2String(property.getValue()); + } if ("yjjsrq".equals(property.getName())) { endDate = Util.null2String(property.getValue()); } @@ -49,6 +55,14 @@ public class OutSignSyncAction implements Action { sjjsrq = Util.null2String(property.getValue()); } } + + if (StringUtils.isEmpty(kssj)) { + return Action.SUCCESS; + } + if (kssj.length() < 8) { + kssj = kssj + ":00"; + } + // 如果实际结束日期不为空,则用实际结束日期 if (StringUtils.isNotBlank(sjjsrq)) { endDate = sjjsrq; @@ -74,6 +88,13 @@ public class OutSignSyncAction implements Action { infos.add(signinfo); } bb.writeLog("infos is:" + infos); + + // 定义时间格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss"); + // 解析时间字符串为 LocalTime 对象 + LocalTime oldkssj = LocalTime.parse(kssj, formatter); + LocalTime minKssj = LocalTime.parse("01:00:00", formatter); + for (String inf : infos) { if (StringUtils.isNotEmpty(inf)) { Map in = mapStringToMap(inf); @@ -93,6 +114,15 @@ public class OutSignSyncAction implements Action { String deviceInfo = Util.null2String(in.get("deviceInfo")); String belongdateIsNull = Util.null2String(in.get("belongdateIsNull")); + if (!oldkssj.isBefore(minKssj)) { + // 减去一小时 + LocalTime previousHour = oldkssj.minusHours(1); + LocalTime signTimeLt = LocalTime.parse(signTime, formatter); + if (signTimeLt.isBefore(previousHour)) { + continue; + } + } + String punchSql = "insert into HrmScheduleSign(userId,userType,signType,signDate,signTime,clientAddress,isInCom,timeZone,belongdate,signfrom,longitude,latitude,addr,deviceInfo,isdev) " + " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; boolean isok = rs.executeUpdate(punchSql, userId, userType, signType, signDate, signTime, clientAddress, isInCom,