package com.ycl.task; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.ycl.platform.domain.entity.WorkOrder; import com.ycl.platform.domain.query.DistributeWorkOrderQuery; import com.ycl.platform.domain.vo.WorkOrderVO; import com.ycl.platform.domain.vo.YwPointJobVO; import com.ycl.platform.mapper.WorkOrderMapper; import com.ycl.platform.service.WorkOrderService; 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.CollectionUtils; import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.Arrays; 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 WorkOrderService workOrderService; 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); } } public static List errType = new ArrayList<>(List.of("图像异常","OSD异常","设备离线")); //工单下发定时任务, 工单因为更新导致 状态变为待下发,根据错误类型将需要直接下发工单 //离线,图像异常,osd错误 public void workOrderDistribute(){ //查询今日待下发工单 Date now = new Date(); Date startDate = DateUtils.getDayStart(now); Date endDate = DateUtils.getDayEnd(now); //获得今日工单 //不仅获得今日工单 而是获得所有工单 List list = workOrderService.distributeList(); log.error("获得工单:{}",list); List workOrderNos = new ArrayList<>(); for (WorkOrderVO workOrderVO : list){ List errTypeArray = Arrays.stream(workOrderVO.getErrorType().split("、")).toList(); for (String errType : errTypeArray) { if (WorkOrderTask.errType.contains(errType)) { //判断工单是否包含errType中的错误类型 workOrderNos.add(workOrderVO.getWorkOrderNo()); break; } } } log.error("工单打印{}",workOrderNos); DistributeWorkOrderQuery distributeWorkOrderQuery = new DistributeWorkOrderQuery(); distributeWorkOrderQuery.setWorkOrderNOList(workOrderNos); //下发接口 if(!CollectionUtils.isEmpty(workOrderNos)){ workOrderService.selectedIdsDistribute(distributeWorkOrderQuery); } } }