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.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<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);
|
}
|
}
|
|
public static List<String> 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<WorkOrderVO> list = workOrderService.distributeList(startDate,endDate);
|
log.error("获得工单:{}",list);
|
List<String> workOrderNos = new ArrayList<>();
|
for (WorkOrderVO workOrderVO : list){
|
List<String> 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);
|
//下发接口
|
workOrderService.selectedIdsDistribute(distributeWorkOrderQuery);
|
}
|
}
|