出差餐补增加规则、外勤转考勤增加前一小时限定

dev-zm
zhangming 1 year ago
parent 2fc70db7c1
commit a0ec75702f

@ -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<Map<String, String>> 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) ) {

@ -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<Map<String, String>> 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) ) {

@ -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<Map<String, Object>
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<Map<String, Object>
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);

@ -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<String, Object> 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,

Loading…
Cancel
Save