From 0117d58c2b8e6799faf919599d2ea079b3b52d75 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 25 七月 2024 18:28:40 +0800
Subject: [PATCH] 工单定时任务处理超时
---
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrder.java | 2
ycl-server/src/main/java/com/ycl/utils/DateUtils.java | 8 ++
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml | 13 +++
ycl-common/src/main/java/constant/PointConfigConstants.java | 33 ++++++++
ycl-common/src/main/java/enumeration/OvertimeStatus.java | 25 ++++++
ycl-server/src/main/java/com/ycl/task/WorkOrderTask.java | 77 +++++++++++++++++++
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointJobVO.java | 40 ++++++++++
ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java | 7 +
8 files changed, 204 insertions(+), 1 deletions(-)
diff --git a/ycl-common/src/main/java/constant/PointConfigConstants.java b/ycl-common/src/main/java/constant/PointConfigConstants.java
new file mode 100644
index 0000000..2c3d102
--- /dev/null
+++ b/ycl-common/src/main/java/constant/PointConfigConstants.java
@@ -0,0 +1,33 @@
+package constant;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/25 14:27
+ */
+public class PointConfigConstants {
+
+ /**
+ * 鏅�氱偣浣嶉厤缃殑key
+ *
+ */
+ public final static String NORMAL = "normal.workorder.time";
+
+ /**
+ * 鏅�氱偣浣嶅憡璀﹂厤缃殑key
+ *
+ */
+ public final static String NORMAL_ALARM = "normal.wordkorder.alarm.time";
+
+ /**
+ * 閲嶇偣鐐逛綅閰嶇疆鐨刱ey
+ *
+ */
+ public final static String IMPORTANT = "important.wordkorder.time";
+
+ /**
+ * 閲嶇偣鐐逛綅鍛婅閰嶇疆鐨刱ey
+ *
+ */
+ public final static String IMPORTANT_ALARM = "important.wordkorder.alarm.time";
+
+}
diff --git a/ycl-common/src/main/java/enumeration/OvertimeStatus.java b/ycl-common/src/main/java/enumeration/OvertimeStatus.java
new file mode 100644
index 0000000..cf674de
--- /dev/null
+++ b/ycl-common/src/main/java/enumeration/OvertimeStatus.java
@@ -0,0 +1,25 @@
+package enumeration;
+
+import lombok.Getter;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/25 16:54
+ */
+@Getter
+public enum OvertimeStatus {
+
+ NOT(0, "鏈秴鏃�"),
+ ALARM(1, "璀﹀憡"),
+ YES(2, "瓒呮椂"),
+ ;
+
+ private final Integer value;
+
+ private final String desc;
+
+ OvertimeStatus(Integer value, String desc) {
+ this.value = value;
+ this.desc = desc;
+ }
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrder.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrder.java
index 0bd7f2a..b286248 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrder.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrder.java
@@ -70,7 +70,7 @@
@TableField("processing_period")
private Integer processingPeriod;
- @ApiModelProperty("鏄惁瓒呮椂锛�0娌℃湁 1瓒呮椂")
+ @ApiModelProperty("鏄惁瓒呮椂锛�0娌℃湁 1璀﹀憡 2瓒呮椂")
@TableField("overtime")
private Integer overtime;
}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointJobVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointJobVO.java
new file mode 100644
index 0000000..ef883c9
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointJobVO.java
@@ -0,0 +1,40 @@
+package com.ycl.platform.domain.vo;
+
+import com.ycl.platform.base.AbsVo;
+import com.ycl.platform.domain.entity.YwPoint;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 瀹氭椂浠诲姟澶勭悊宸ュ崟鏃舵晥
+ *
+ * @author xp
+ * @since 2024-03-05
+ */
+@Data
+public class YwPointJobVO {
+
+ private Integer id;
+
+ /** 鐐逛綅鍚嶇О */
+ private Date createTime;
+
+ /** 鐐逛綅鏍囩 */
+ private String [] pointTags;
+ private String pointTagString;
+
+ public static YwPointJobVO getVoByEntity(@NonNull YwPoint entity, YwPointJobVO vo) {
+ if(vo == null) {
+ vo = new YwPointJobVO();
+ }
+ BeanUtils.copyProperties(entity, vo);
+ return vo;
+ }
+
+}
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
index f42af24..6f29f18 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
@@ -10,6 +10,7 @@
import java.util.List;
import com.ycl.platform.domain.vo.WorkOrderYwConditionRecordVO;
+import com.ycl.platform.domain.vo.YwPointJobVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -26,4 +27,10 @@
IPage<WorkOrderVO> distributePage(IPage page, @Param("query") DistributeWorkOrderQuery query);
+ /**
+ * 澶勭悊涓殑宸ュ崟
+ *
+ * @return
+ */
+ List<YwPointJobVO> handlingWorkOrderList();
}
diff --git a/ycl-server/src/main/java/com/ycl/task/WorkOrderTask.java b/ycl-server/src/main/java/com/ycl/task/WorkOrderTask.java
new file mode 100644
index 0000000..e40a3a3
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/task/WorkOrderTask.java
@@ -0,0 +1,77 @@
+package com.ycl.task;
+
+import com.ycl.platform.domain.entity.WorkOrder;
+import com.ycl.platform.domain.vo.YwPointJobVO;
+import com.ycl.platform.mapper.WorkOrderMapper;
+import com.ycl.system.domain.SysConfig;
+import com.ycl.system.mapper.SysConfigMapper;
+import com.ycl.utils.DateUtils;
+import constant.PointConfigConstants;
+import enumeration.OvertimeStatus;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/7/25 13:36
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Component("workOrderTask")
+public class WorkOrderTask {
+
+ private final WorkOrderMapper workOrderMapper;
+ private final SysConfigMapper configMapper;
+
+ private final static String IMPORTANT = "important";
+ private final static String NORMAL = "normal";
+
+ /**
+ * 澶勭悊宸ュ崟鏈夋晥鏃堕棿锛岃秴鏃剁姸鎬�
+ *
+ */
+ public void handleTime() {
+ List<YwPointJobVO> handlingWorkOrderList = workOrderMapper.handlingWorkOrderList();
+ SysConfig config = new SysConfig();
+ config.setConfigKey(PointConfigConstants.IMPORTANT);
+ Integer importantTime = Integer.valueOf(configMapper.selectConfig(config).getConfigValue());
+ config.setConfigKey(PointConfigConstants.NORMAL);
+ Integer normalTime = Integer.valueOf(configMapper.selectConfig(config).getConfigValue());
+ config.setConfigKey(PointConfigConstants.NORMAL_ALARM);
+ Integer normalAlarmTime = Integer.valueOf(configMapper.selectConfig(config).getConfigValue());
+ config.setConfigKey(PointConfigConstants.IMPORTANT_ALARM);
+ Integer importantAlarmTime = Integer.valueOf(configMapper.selectConfig(config).getConfigValue());
+
+ Date now = new Date();
+ handlingWorkOrderList.stream().forEach(workOrder -> {
+ int diffHours = DateUtils.differentHoursByMillisecond(now, workOrder.getCreateTime());
+ if (StringUtils.hasText(workOrder.getPointTagString()) && workOrder.getPointTagString().contains(IMPORTANT)) {
+ this.handleOverTime(workOrder.getId(), diffHours, importantTime, importantAlarmTime);
+ } else {
+ this.handleOverTime(workOrder.getId(), diffHours, normalTime, normalAlarmTime);
+ }
+ });
+ log.info("宸ュ崟瓒呮椂鐘舵�佷换鍔℃墽琛屽畬鎴�");
+ }
+
+ private void handleOverTime(Integer id, Integer diffHours, Integer time, Integer alarmTime) {
+ if (diffHours <= time) {
+ if (time - diffHours < alarmTime) {
+ WorkOrder wo = new WorkOrder();
+ wo.setId(id);
+ wo.setOvertime(OvertimeStatus.ALARM.getValue());
+ workOrderMapper.updateById(wo);
+ }
+ } else {
+ WorkOrder wo = new WorkOrder();
+ wo.setId(id);
+ wo.setOvertime(OvertimeStatus.YES.getValue());
+ workOrderMapper.updateById(wo);
+ }
+ }
+}
diff --git a/ycl-server/src/main/java/com/ycl/utils/DateUtils.java b/ycl-server/src/main/java/com/ycl/utils/DateUtils.java
index 4ab7585..0be7f5f 100644
--- a/ycl-server/src/main/java/com/ycl/utils/DateUtils.java
+++ b/ycl-server/src/main/java/com/ycl/utils/DateUtils.java
@@ -145,6 +145,14 @@
}
/**
+ * 璁$畻鐩稿樊灏忔椂
+ */
+ public static int differentHoursByMillisecond(Date date1, Date date2)
+ {
+ return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600)));
+ }
+
+ /**
* 璁$畻鏃堕棿宸�
*
* @param endDate 鏈�鍚庢椂闂�
diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
index a9387f9..1b76a6b 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -62,4 +62,17 @@
ORDER BY wo.create_time DESC
</select>
+ <select id="handlingWorkOrderList" resultType="com.ycl.platform.domain.vo.YwPointJobVO">
+ SELECT
+ wo.id,
+ wod.create_time,
+ yp.point_tag
+ FROM
+ t_work_order wo
+ INNER JOIN t_yw_point yp ON yp.id = wo.point_id AND yp.deleted = 0
+ INNER JOIN t_work_order_distribute_record wod ON wod.work_order_id = wo.id
+ WHERE
+ wo.status = 'DISTRIBUTED' AND wo.deleted = 0
+ </select>
+
</mapper>
--
Gitblit v1.8.0