车辆执行任务到缓存区
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
package com.mt.wms.empty.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
||||
/**
|
||||
* @Author: liguanghao
|
||||
* @Date: 2021/11/18 20:09
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Configuration
|
||||
@EnableAsync
|
||||
public class ExecutorConfig {
|
||||
|
||||
@Bean
|
||||
public ThreadPoolTaskExecutor asyncServiceExecutor() {
|
||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||
//配置核心线程数
|
||||
executor.setCorePoolSize(5);
|
||||
//配置最大线程数
|
||||
executor.setMaxPoolSize(5);
|
||||
//配置队列大小
|
||||
executor.setQueueCapacity(10);
|
||||
//配置线程池中的线程的名称前缀
|
||||
executor.setThreadNamePrefix("async-service-");
|
||||
|
||||
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
|
||||
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
|
||||
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
||||
//执行初始化
|
||||
executor.initialize();
|
||||
return executor;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
package com.mt.wms.empty.task;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.mt.wms.core.dal.entity.*;
|
||||
import com.mt.wms.core.dal.service.*;
|
||||
import com.mt.wms.core.utils.IDGenerator;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @Author: liguanghao
|
||||
* @Date: 2021/11/18 20:27
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
@Transactional
|
||||
public class AsynRunTaskService {
|
||||
|
||||
@Resource
|
||||
private CurrTaskServiceBiz currTaskServiceBiz;
|
||||
@Resource
|
||||
private RunTaskServiceBiz runTaskServiceBiz;
|
||||
@Resource
|
||||
private LocationServiceBiz locationServiceBiz;
|
||||
@Resource
|
||||
private InStockInfoServiceBiz inStockInfoServiceBiz;
|
||||
|
||||
//窑炉可用未满的情况下,调用车辆起点为提升台终点为窑炉
|
||||
@Async("asyncServiceExecutor")
|
||||
public void asynRunTask(CurrTask currTask){
|
||||
//新建一条执行任务的关系表存放任务执行信息
|
||||
RunTask runTask=new RunTask();
|
||||
runTask.setCreateTime(LocalDateTime.now());
|
||||
runTask.setTaskId(currTask.getId());
|
||||
runTask.setStartPosition(currTask.getStartPosition());
|
||||
runTask.setEndPosition(currTask.getTargetPosition());
|
||||
runTaskServiceBiz.save(runTask);
|
||||
//调用车辆填入起终点
|
||||
|
||||
//得到车辆执行结果
|
||||
//车辆执行不成功,记录日志,推送消息到前端提醒?
|
||||
|
||||
//执行成功,托盘进炉(存疑,进入窑炉不算任务完成的话,窑炉怎么给出是哪条任务加工完成了)
|
||||
if (true){
|
||||
//更新关系表状态为完成
|
||||
runTask.setUpdateTime(LocalDateTime.now());
|
||||
runTask.setStatus(2);
|
||||
runTaskServiceBiz.updateById(runTask);
|
||||
//更新currTask表状态为完成
|
||||
currTask.setStatus(2);
|
||||
currTask.setUpdateTime(LocalDateTime.now());
|
||||
}
|
||||
}
|
||||
//窑炉已满,调用车辆起点为提升台,终点为缓存区
|
||||
@Async("asyncServiceExecutor")
|
||||
public void asynRunTaskToWarehouse(CurrTask currTask){
|
||||
Location location = locationServiceBiz.list(new QueryWrapper<Location>()
|
||||
.eq(Location.STATUS, 1)
|
||||
.eq(Location.VALID, 1)).get(0);
|
||||
//新建一条执行任务的关系表存放任务执行信息,终点为缓存区空闲库位
|
||||
RunTask runTask=new RunTask();
|
||||
runTask.setCreateTime(LocalDateTime.now());
|
||||
runTask.setTaskId(currTask.getId());
|
||||
runTask.setStartPosition(currTask.getStartPosition());
|
||||
runTask.setEndPosition(location.getCode());
|
||||
runTaskServiceBiz.save(runTask);
|
||||
//更新 location 表对应库位状态为占用
|
||||
location.setStatus(1);
|
||||
location.setUpdateTime(LocalDateTime.now());
|
||||
locationServiceBiz.updateById(location);
|
||||
//添加一条库位详情到in_stock_info表
|
||||
InStockInfo inStockInfo=new InStockInfo();
|
||||
inStockInfo.setCreateTime(LocalDateTime.now());
|
||||
inStockInfo.setStatus(1);
|
||||
inStockInfo.setInterCode(IDGenerator.gen("HCT", "yyyyMMddHHmm", 2, "WAREHOUSE_CODE"));
|
||||
inStockInfo.setTaskId(currTask.getId());
|
||||
inStockInfo.setTaskCode(currTask.getTaskCode());
|
||||
inStockInfo.setKilnId(currTask.getKilnId());
|
||||
inStockInfo.setKilnName(currTask.getKilnName());
|
||||
inStockInfo.setLocationId(location.getId());
|
||||
inStockInfo.setLocationName(location.getLocationNameAlias());
|
||||
inStockInfo.setPalletCode(currTask.getPalletCode());
|
||||
inStockInfoServiceBiz.save(inStockInfo);
|
||||
//修改currTask的是否缓存,库位id,库位名称
|
||||
currTask.setIsCache(1);
|
||||
currTask.setLocationId(location.getId());
|
||||
currTask.setLocationName(location.getLocationNameAlias());
|
||||
currTaskServiceBiz.updateById(currTask);
|
||||
//调用车辆
|
||||
|
||||
//车辆执行不成功,记录日志,推送消息到前端提醒?
|
||||
|
||||
//车辆执行执行成功后加入窑炉的缓存区任务队列
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package com.mt.wms.empty.task;
|
||||
|
||||
import com.mt.wms.core.vo.R;
|
||||
|
||||
/**
|
||||
* @Author: liguanghao
|
||||
* @Date: 2021/11/15 21:55
|
||||
* @Version 1.0
|
||||
*/
|
||||
public class RunTask {
|
||||
|
||||
public R runTask() {
|
||||
//传入任务id,起始点,若终点是窑炉,获取窑炉状态
|
||||
int kilnStatus = 0;
|
||||
if (kilnStatus == 0) {//窑炉状态为不可用
|
||||
return R.failed("目标窑炉不可用!");
|
||||
}
|
||||
if (kilnStatus==1){//窑炉可用未满
|
||||
|
||||
}
|
||||
if (kilnStatus==2){//窑炉已满
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
package com.mt.wms.empty.task;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.mt.wms.core.dal.entity.*;
|
||||
import com.mt.wms.core.dal.service.*;
|
||||
import com.mt.wms.core.vo.R;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: liguanghao
|
||||
* @Date: 2021/11/15 21:55
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Transactional
|
||||
public class RunTaskUtils {
|
||||
@Resource
|
||||
private CurrTaskServiceBiz currTaskServiceBiz;
|
||||
@Resource
|
||||
private RunTaskServiceBiz runTaskServiceBiz;
|
||||
@Resource
|
||||
private LocationServiceBiz locationServiceBiz;
|
||||
@Resource
|
||||
private AsynRunTaskService asynRunTaskService;
|
||||
@Resource
|
||||
private VehicleInfoServiceBiz vehicleInfoServiceBiz;
|
||||
|
||||
|
||||
public R runTask(Integer wcsTaskId) throws InterruptedException {
|
||||
CurrTask currTask = currTaskServiceBiz.getById(wcsTaskId);
|
||||
//传入任务id,起始点,若终点是窑炉,获取窑炉状态
|
||||
int kilnStatus = 1;
|
||||
|
||||
//窑炉状态为不可用
|
||||
if (kilnStatus == 0) {
|
||||
return R.failed("目标窑炉不可用!");
|
||||
}
|
||||
//窑炉可用未满
|
||||
if (kilnStatus==1){
|
||||
//更改任务状态为执行中
|
||||
currTask.setStatus(1);
|
||||
currTask.setUpdateTime(LocalDateTime.now());
|
||||
currTaskServiceBiz.updateById(currTask);
|
||||
//查询是否有空闲车辆,若有。占用车辆,若无,返回暂无可用车辆
|
||||
List<VehicleInfo> vehicleInfoList = vehicleInfoServiceBiz.list(new QueryWrapper<VehicleInfo>()
|
||||
.eq(VehicleInfo.STATUS, 0)
|
||||
.eq(VehicleInfo.VALID, 1));
|
||||
if (vehicleInfoList.size()>0){
|
||||
VehicleInfo vehicleInfo = vehicleInfoList.get(0);
|
||||
vehicleInfo.setStatus(1);
|
||||
vehicleInfo.setUpdateTime(LocalDateTime.now());
|
||||
vehicleInfoServiceBiz.updateById(vehicleInfo);
|
||||
}else {
|
||||
return R.failed("暂无可用车辆!请稍后重试!");
|
||||
}
|
||||
//异步调用车辆
|
||||
asynRunTaskService.asynRunTask(currTask);
|
||||
return R.ok("操作成功");
|
||||
}
|
||||
//窑炉已满
|
||||
if (kilnStatus==2){
|
||||
//查询缓存区库位是否已满
|
||||
int count = locationServiceBiz.count(new QueryWrapper<Location>()
|
||||
.eq(Location.STATUS, 0)
|
||||
.eq(Location.VALID, 1));
|
||||
//缓存区未满
|
||||
if (count >0) {
|
||||
//更改任务状态为执行中
|
||||
currTask.setStatus(1);
|
||||
currTask.setUpdateTime(LocalDateTime.now());
|
||||
currTaskServiceBiz.updateById(currTask);
|
||||
//查询是否有空闲车辆,若有。占用车辆,若无,返回暂无可用车辆
|
||||
List<VehicleInfo> vehicleInfoList = vehicleInfoServiceBiz.list(new QueryWrapper<VehicleInfo>()
|
||||
.eq(VehicleInfo.STATUS, 0)
|
||||
.eq(VehicleInfo.VALID, 1));
|
||||
if (vehicleInfoList.size()>0){
|
||||
VehicleInfo vehicleInfo = vehicleInfoList.get(0);
|
||||
vehicleInfo.setStatus(1);
|
||||
vehicleInfo.setUpdateTime(LocalDateTime.now());
|
||||
vehicleInfoServiceBiz.updateById(vehicleInfo);
|
||||
}else {
|
||||
return R.failed("暂无可用车辆!请稍后重试!");
|
||||
}
|
||||
//异步调用车辆
|
||||
asynRunTaskService.asynRunTaskToWarehouse(currTask);
|
||||
return R.ok("操作成功!当前目标窑炉已满,托盘加入缓存区待加工队列。");
|
||||
}
|
||||
return R.failed("当前目标窑炉已满!缓存区已满!请稍后重试!");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user