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