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