ycl-common/src/main/java/constant/PointConfigConstants.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-common/src/main/java/enumeration/OvertimeStatus.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/WorkOrder.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointJobVO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/task/WorkOrderTask.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/java/com/ycl/utils/DateUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ycl-common/src/main/java/constant/PointConfigConstants.java
New file @@ -0,0 +1,33 @@ package constant; /** * @author:xp * @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"; /** * 重点点位配置的key * */ public final static String IMPORTANT = "important.wordkorder.time"; /** * 重点点位告警配置的key * */ public final static String IMPORTANT_ALARM = "important.wordkorder.alarm.time"; } ycl-common/src/main/java/enumeration/OvertimeStatus.java
New file @@ -0,0 +1,25 @@ package enumeration; import lombok.Getter; /** * @author:xp * @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; } } 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; } ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointJobVO.java
New file @@ -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; } } 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(); } ycl-server/src/main/java/com/ycl/task/WorkOrderTask.java
New file @@ -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:xp * @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); } } } 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 最后时间 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>