package org.jeecg.modules.quartz.job; import org.jeecg.modules.andon.entity.AndonButtonConfig; import org.jeecg.modules.andon.entity.AndonOrder; import org.jeecg.modules.andon.entity.AndonResponseConfig; import org.jeecg.modules.andon.service.IAndonButtonConfigService; import org.jeecg.modules.andon.service.IAndonOrderService; import org.jeecg.modules.andon.service.IAndonResponseConfigService; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; import java.util.List; //org.jeecg.modules.quartz.job.AndonJob public class AndonJob implements Job { private static final String ANDON_STATUS_DXY = "1"; private static final String ANDON_STATUS_DCL = "2"; private static final String ANDON_STATUS_YWC = "3"; @Autowired @Lazy private IAndonOrderService andonOrderService; @Autowired @Lazy private IAndonButtonConfigService andonButtonConfigService; @Autowired @Lazy private IAndonResponseConfigService andonResponseConfigService; @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { LocalDateTime currentTime = LocalDateTime.now(); List andonOrdersExceptYWC = andonOrderService.getAndonOrdersExceptYWC(); for (AndonOrder andonOrder : andonOrdersExceptYWC) { AndonResponseConfig andonResponseConfig = andonResponseConfigService.getAndonResponseConfigByFactoryIdAndButtonId(andonOrder.getFactoryId(), andonOrder.getButtonId()); AndonButtonConfig andonButtonConfig = andonButtonConfigService.getAndonButtonById(andonOrder.getButtonId()); System.out.println("andonOrder----"+andonOrder.getId()+"----andonResponseConfig----"+andonResponseConfig.getId()+"-----"+"andonButtonConfig----"+andonButtonConfig.getId()); levelUpgradeOne(andonOrder, andonResponseConfig, andonButtonConfig, currentTime); levelUpgradeTwo(andonOrder, andonResponseConfig, andonButtonConfig, currentTime); levelProcessOne(andonOrder, andonResponseConfig, andonButtonConfig, currentTime); levelProcessTwo(andonOrder, andonResponseConfig, andonButtonConfig, currentTime); } } /** * 判断二级响应升级 * 如果安灯工单响应时间超过一级响应时长还为空,则说明未响应 */ public void levelUpgradeOne(AndonOrder andonOrder, AndonResponseConfig andonResponseConfig, AndonButtonConfig andonButtonConfig, LocalDateTime currentTime) { if (andonOrder.getAndonLevel().equals("1") && andonOrder.getOrderStatus().equals(ANDON_STATUS_DXY)) { //安灯时间 Date operateTime = andonOrder.getOperateTime(); //响应时长 (分钟) Integer upgradeResponseDuration = andonButtonConfig.getUpgradeResponseDuration(); LocalDateTime timeoutTime = operateTime.toInstant() .atZone(ZoneId.systemDefault()) .toLocalDateTime() .plusMinutes(upgradeResponseDuration); if (currentTime.isAfter(timeoutTime)) { //响应时间超过一级响应时长,升级一次,并提醒(模拟发送飞书消息) andonOrder.setAndonLevel("2"); andonOrderService.saveOrUpdate(andonOrder); //TODO 发送飞书消息(这块为模拟需要有接口才能开发) System.out.println("初始响应人"+andonResponseConfig.getFirsterResponder()+"未响应!"+"安灯工单:" + andonOrder.getId() + "已升级二级响应,并发消息给二级响应人"+andonResponseConfig.getSecondResponder()); } } } /** * 判断三级响应升级 * 安灯工单响应时间超过二级响应时长还为空,则说明未响应 */ public void levelUpgradeTwo(AndonOrder andonOrder, AndonResponseConfig andonResponseConfig, AndonButtonConfig andonButtonConfig, LocalDateTime currentTime) { if (andonOrder.getAndonLevel().equals("2") && andonOrder.getOrderStatus().equals(ANDON_STATUS_DXY)) { Date operateTime = andonOrder.getOperateTime(); Integer upgradeResponseDuration = andonButtonConfig.getSecondUpgradeResponseDuration(); LocalDateTime timeoutTime = operateTime.toInstant() .atZone(ZoneId.systemDefault()) .toLocalDateTime() .plusMinutes(upgradeResponseDuration); if (currentTime.isAfter(timeoutTime)) { //响应时间超过一级响应时长,升级一次,并提醒(模拟发送飞书消息) andonOrder.setAndonLevel("3"); andonOrderService.saveOrUpdate(andonOrder); //TODO 发送飞书消息(这块为模拟需要有接口才能开发) System.out.println("二级响应人"+andonResponseConfig.getSecondResponder()+"未响应!"+"安灯工单:" + andonOrder.getId() + "已升级三级响应,并发消息给三级响应人"+andonResponseConfig.getThirdResponder()); } } } /** * 判断二级处理升级 * 安灯工单响应时间超过二级处理时长还为空,则说明未响应 */ public void levelProcessOne(AndonOrder andonOrder, AndonResponseConfig andonResponseConfig, AndonButtonConfig andonButtonConfig, LocalDateTime currentTime){ if (andonOrder.getAndonLevel().equals("1") && andonOrder.getOrderStatus().equals(ANDON_STATUS_DCL)) { Date responseTime = andonOrder.getResponseTime(); Integer upgradeProcessDuration = andonButtonConfig.getUpgradeProcessDuration(); LocalDateTime timeoutTime = responseTime.toInstant() .atZone(ZoneId.systemDefault()) .toLocalDateTime() .plusMinutes(upgradeProcessDuration); if (currentTime.isAfter(timeoutTime)) { //处理时间超过一级处理时长,升级一次,并提醒(模拟发送飞书消息) andonOrder.setAndonLevel("2"); andonOrderService.saveOrUpdate(andonOrder); //TODO 发送飞书消息(这块为模拟需要有接口才能开发) System.out.println("一级处理人"+andonResponseConfig.getFirsterResponder()+"未处理!"+"安灯工单:" + andonOrder.getId() + "已升级二级处理,并发消息给二级处理人"+andonResponseConfig.getSecondResponder()); } } } /** * 判断三级处理升级 * 安灯工单响应时间超过二级处理时长还为空,则说明未响应 */ public void levelProcessTwo(AndonOrder andonOrder, AndonResponseConfig andonResponseConfig, AndonButtonConfig andonButtonConfig, LocalDateTime currentTime){ if (andonOrder.getAndonLevel().equals("2") && andonOrder.getOrderStatus().equals(ANDON_STATUS_DCL)) { Date responseTime = andonOrder.getResponseTime(); Integer secondUpgradeProcessDuration = andonButtonConfig.getSecondUpgradeProcessDuration(); LocalDateTime timeoutTime = responseTime.toInstant() .atZone(ZoneId.systemDefault()) .toLocalDateTime() .plusMinutes(secondUpgradeProcessDuration); if (currentTime.isAfter(timeoutTime)) { //处理时间超过一级处理时长,升级一次,并提醒(模拟发送飞书消息) andonOrder.setAndonLevel("3"); andonOrderService.saveOrUpdate(andonOrder); //TODO 发送飞书消息(这块为模拟需要有接口才能开发) System.out.println("二级处理人"+andonResponseConfig.getSecondResponder()+"未处理!"+"安灯工单:" + andonOrder.getId() + "已升级三级处理,并发消息给三级处理人"+andonResponseConfig.getThirdResponder()); } } } }