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 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); } } }