加班异常功能开发

This commit is contained in:
dxfeng 2024-08-06 15:33:25 +08:00
parent afee1b02f7
commit 578a159535
2 changed files with 47 additions and 12 deletions

View File

@ -0,0 +1,11 @@
<%@ page import="com.engine.jc.kq.AbnormalOvertimeRemind" %>
<%@ page import="cn.hutool.core.convert.Convert" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%
// 测试
String userId = request.getParameter("userId");
String kqDate = request.getParameter("kqDate");
AbnormalOvertimeRemind.remind(Convert.toInt(userId, 0), kqDate);
out.println("执行完成,userId="+userId+",kqDate="+kqDate);
%>

View File

@ -9,6 +9,8 @@ import weaver.conn.RecordSet;
import weaver.workflow.webservices.*;
import java.text.DecimalFormat;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
/**
@ -24,19 +26,14 @@ public class AbnormalOvertimeRemind {
return;
}
RecordSet rs = new RecordSet();
rs.writeLog("AbnormalOvertimeRemind任务开始,userId=" + userId + ",kqDate=" + kqDate);
// 查询当前人员当前日期的最早最晚打卡时间
rs.executeQuery("select signindate ,signintime ,signoutdate ,signouttime,signMins from kq_format_detail where resourceid = ? and kqdate = ?", userId, kqDate);
if (rs.next()) {
String signMins = rs.getString("signMins");
double signHourInt = Convert.toDouble(signMins, 0.0) / 60;
// 如果当天打卡时间超过10H判断是否有该日期的加班流程
if (signHourInt > 10) {
// 没有加班流程记录为加班异常
rs.executeQuery("select * from formtable_main_18 where resourceId = ? and fromDate <= ? and toDate >= ?", userId, kqDate);
if (rs.getCounts() == 0) {
// 判断是否已经被记录异常已经记录的不重复记录
rs.executeQuery("select * from uf_jbycb where ycry = ? and ycrq = ?", userId, kqDate);
if (rs.getCounts() == 0) {
rs.writeLog("signMins=" + signMins);
String signInDate = rs.getString("signindate");
String signInTime = rs.getString("signintime");
String signInDateTime = signInDate + " " + signInTime;
@ -44,6 +41,13 @@ public class AbnormalOvertimeRemind {
String signOutDate = rs.getString("signoutdate");
String signOutTime = rs.getString("signouttime");
String signOutDateTime = signOutDate + " " + signOutTime;
if (signHourInt > 10) {
// 没有加班流程记录为加班异常
rs.executeQuery("select * from formtable_main_18 where resourceId = ? and fromDate <= ? and toDate >= ?", userId, kqDate, kqDate);
if (rs.getCounts() == 0) {
// 判断是否已经被记录异常已经记录的不重复记录
rs.executeQuery("select * from uf_jbycb where ycry = ? and ycrq = ?", userId, kqDate);
if (rs.getCounts() == 0) {
// 打卡时长保留两位小数
DecimalFormat df = new DecimalFormat("#.##");
String formattedHours = df.format(signHourInt);
@ -63,6 +67,7 @@ public class AbnormalOvertimeRemind {
dataMap.put("dtdksc", formattedHours);
RecruitRecordSet.insertData(dataMap, "uf_jbycb");
RecruitRecordSet.refreshRight(uuid, "uf_jbycb", formModeId, 1);
rs.writeLog("异常数据插入完成");
// 给异常员工发送加班异常确认流程
// 姓名
@ -70,18 +75,19 @@ public class AbnormalOvertimeRemind {
// 日期
WorkflowRequestTableField rq = createWorkflowRequestTableField("rq", kqDate, true);
// 上班打卡时间
WorkflowRequestTableField sbdksj = createWorkflowRequestTableField("sbdksj", signInDateTime, true);
WorkflowRequestTableField sbdksj = createWorkflowRequestTableField("sbdksj", getFormatTime(signInTime), true);
// 下班打卡时间
WorkflowRequestTableField xbdksj = createWorkflowRequestTableField("xbdksj", signOutDateTime, true);
WorkflowRequestTableField xbdksj = createWorkflowRequestTableField("xbdksj", getFormatTime(signOutTime), true);
// 打卡时长
WorkflowRequestTableField dksc = createWorkflowRequestTableField("dksc", formattedHours, true);
WorkflowRequestTableField[] workflowRequestTableField = {xm, rq, sbdksj, xbdksj, dksc};
createWorkflow(workflowRequestTableField);
rs.writeLog("流程创建完成");
}
}
}
}
rs.writeLog("AbnormalOvertimeRemind任务结束,userId=" + userId + ",kqDate=" + kqDate);
}
/**
@ -113,7 +119,7 @@ public class AbnormalOvertimeRemind {
//主表
workflowRequestInfo.setWorkflowMainTableInfo(workflowMainTableInfo);
//是否提交下一节点
workflowRequestInfo.setIsnextflow("0");
workflowRequestInfo.setIsnextflow("1");
WorkflowService workflow = new WorkflowServiceImpl();
return workflow.doCreateWorkflowRequest(workflowRequestInfo, 1);
@ -129,4 +135,22 @@ public class AbnormalOvertimeRemind {
tableField.setEdit(true);
return tableField;
}
private static String getFormatTime(String timeString){
if(StringUtils.isBlank(timeString)){
return null;
}
// 定义输入时间字符串的格式
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
// 解析时间字符串为 LocalTime 对象
LocalTime time = LocalTime.parse(timeString, inputFormatter);
// 定义输出时间字符串的格式
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("HH:mm");
// 格式化 LocalTime 对象为所需的字符串格式
return time.format(outputFormatter);
}
}