package com.zy.asrs.wcs.core.timer;
|
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.zy.asrs.framework.exception.CoolException;
|
import com.zy.asrs.wcs.core.domain.param.CreateWcsTaskParam;
|
import com.zy.asrs.wcs.core.entity.BasConveyorSta;
|
import com.zy.asrs.wcs.core.entity.Task;
|
import com.zy.asrs.wcs.core.entity.TaskCache;
|
import com.zy.asrs.wcs.core.model.enums.TaskStsType;
|
import com.zy.asrs.wcs.core.service.BasConveyorStaService;
|
import com.zy.asrs.wcs.core.service.OpenService;
|
import com.zy.asrs.wcs.core.service.TaskCacheService;
|
import com.zy.asrs.wcs.core.service.TaskService;
|
import com.zy.asrs.wcs.rcs.model.enums.WorkModeType;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.HashMap;
|
import java.util.List;
|
|
@Slf4j
|
@Component
|
public class TaskCacheTimer {
|
|
@Autowired
|
private TaskService taskService;
|
@Autowired
|
private TaskCacheService taskCacheService;
|
@Autowired
|
private BasConveyorStaService basConveyorStaService;
|
@Autowired
|
private OpenService openService;
|
|
@Scheduled(cron = "0/1 * * * * ? ")
|
@Transactional
|
public synchronized void executeTaskCache() {
|
//判断出入库模式
|
BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>()
|
.eq(BasConveyorSta::getSiteNo, 101));
|
if (basConveyorSta == null) {
|
return;
|
}
|
|
int count = taskService.count(new LambdaQueryWrapper<Task>()
|
.in(Task::getTaskSts, TaskStsType.NEW_INBOUND.sts, TaskStsType.ANALYZE_INBOUND.sts, TaskStsType.EXECUTE_INBOUND.sts, TaskStsType.COMPLETE_INBOUND.sts
|
, TaskStsType.NEW_OUTBOUND.sts, TaskStsType.ANALYZE_OUTBOUND.sts, TaskStsType.EXECUTE_OUTBOUND.sts, TaskStsType.COMPLETE_OUTBOUND.sts));
|
if (count > 0) {
|
return;//存在任务正在执行,等待执行完成后再解析队列
|
}
|
|
List<TaskCache> taskInCaches = taskCacheService.list(new LambdaQueryWrapper<TaskCache>().eq(TaskCache::getTaskType, 1));//入库缓存
|
List<TaskCache> taskOutCaches = taskCacheService.list(new LambdaQueryWrapper<TaskCache>().eq(TaskCache::getTaskType, 2));//出库缓存
|
|
if (basConveyorSta.getWorkMode().equals((int) WorkModeType.PAKIN_MODE.id)) {
|
//入库模式
|
if (!taskInCaches.isEmpty()) {
|
//存在入库缓存
|
executeTaskCache(taskInCaches);
|
}else {
|
//不存在入库缓存,且处于入库模式,尝试执行出库缓存
|
executeTaskCache(taskOutCaches);
|
}
|
}else {
|
//出库模式
|
if (!taskOutCaches.isEmpty()) {
|
//存在出库缓存
|
executeTaskCache(taskOutCaches);
|
}else {
|
//不存在出库缓存,且处于出库模式,尝试执行入库缓存
|
executeTaskCache(taskInCaches);
|
}
|
}
|
}
|
|
private synchronized void executeTaskCache(List<TaskCache> taskCaches) {
|
if(taskCaches.isEmpty()){
|
return;
|
}
|
|
for (TaskCache taskCache : taskCaches) {
|
CreateWcsTaskParam param = JSON.parseObject(taskCache.getTaskParam(), CreateWcsTaskParam.class);
|
HashMap<String, Object> result = openService.executeWcsTaskCache(param);
|
log.info("缓存执行结果:{}", JSON.toJSONString(result));
|
if (result.get("success").toString().equals("1")) {
|
//执行成功,删除缓存
|
if (!taskCacheService.removeById(taskCache.getId())) {
|
throw new CoolException("缓存删除失败");
|
}
|
}
|
|
try {
|
Thread.sleep(10000);
|
} catch (InterruptedException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
}
|
|
}
|