小车
This commit is contained in:
@@ -81,4 +81,6 @@ public interface MydoJobMapper
|
|||||||
List<MydoJob> selectMydoJobFinishList(MydoJob mydoJob);
|
List<MydoJob> selectMydoJobFinishList(MydoJob mydoJob);
|
||||||
|
|
||||||
MydoJob selectRunningMydoJobByExitList(@Param("exitList") List<String> exitList);
|
MydoJob selectRunningMydoJobByExitList(@Param("exitList") List<String> exitList);
|
||||||
|
|
||||||
|
void selectMydoJobOutside(HashMap<String, Object> map);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.ruoyi.job.service;
|
package com.ruoyi.job.service;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
@@ -29,6 +30,8 @@ public interface IMydoJobService
|
|||||||
*/
|
*/
|
||||||
public List<MydoJob> selectMydoJobList(MydoJob mydoJob);
|
public List<MydoJob> selectMydoJobList(MydoJob mydoJob);
|
||||||
|
|
||||||
|
public List<MydoJob> selectNotThisFloorMydoJobList(MydoJob mydoJob);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增作业信息
|
* 新增作业信息
|
||||||
*
|
*
|
||||||
@@ -80,4 +83,8 @@ public interface IMydoJobService
|
|||||||
MydoJob selectRunningMydoJobByExitList(List<String> strings);
|
MydoJob selectRunningMydoJobByExitList(List<String> strings);
|
||||||
|
|
||||||
AjaxResult manualCallback(String jobId);
|
AjaxResult manualCallback(String jobId);
|
||||||
|
|
||||||
|
void selectMydoJobOutside(HashMap<String,Object> map);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,11 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
return mydoJobMapper.selectMydoJobList(mydoJob);
|
return mydoJobMapper.selectMydoJobList(mydoJob);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MydoJob> selectNotThisFloorMydoJobList(MydoJob mydoJob) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增作业信息
|
* 新增作业信息
|
||||||
*
|
*
|
||||||
@@ -173,4 +178,9 @@ public class MydoJobServiceImpl implements IMydoJobService
|
|||||||
}
|
}
|
||||||
return AjaxResult.error("手动回调失败");
|
return AjaxResult.error("手动回调失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void selectMydoJobOutside(HashMap<String, Object> map) {
|
||||||
|
mydoJobMapper.selectMydoJobOutside(map);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import com.ruoyi.bas.srgvmap.service.RoadCacheService;
|
|||||||
import com.ruoyi.common.domain.SendData2;
|
import com.ruoyi.common.domain.SendData2;
|
||||||
import com.ruoyi.common.utils.spring.SpringUtils;
|
import com.ruoyi.common.utils.spring.SpringUtils;
|
||||||
import com.ruoyi.device.srgv.domain.DeviceSrgv;
|
import com.ruoyi.device.srgv.domain.DeviceSrgv;
|
||||||
|
import com.ruoyi.device.srgv.service.IDeviceSrgvService;
|
||||||
|
import com.ruoyi.device.tsj.domain.DeviceTsj;
|
||||||
import com.ruoyi.job.charg.domain.SrgvChargingJob;
|
import com.ruoyi.job.charg.domain.SrgvChargingJob;
|
||||||
import com.ruoyi.job.charg.service.ISrgvChargingJobService;
|
import com.ruoyi.job.charg.service.ISrgvChargingJobService;
|
||||||
import com.ruoyi.job.domain.MydoJob;
|
import com.ruoyi.job.domain.MydoJob;
|
||||||
@@ -19,8 +21,11 @@ import com.ruoyi.job.service.IMydoJobService;
|
|||||||
import com.ruoyi.queue.srgv.domain.WcsSrgvQueue;
|
import com.ruoyi.queue.srgv.domain.WcsSrgvQueue;
|
||||||
import com.ruoyi.queue.srgv.service.IWcsSrgvQueueFinishService;
|
import com.ruoyi.queue.srgv.service.IWcsSrgvQueueFinishService;
|
||||||
import com.ruoyi.queue.srgv.service.IWcsSrgvQueueService;
|
import com.ruoyi.queue.srgv.service.IWcsSrgvQueueService;
|
||||||
|
import com.ruoyi.queue.tsj.domain.TsjDeviceExecutionQueue;
|
||||||
|
import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueService;
|
||||||
import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead;
|
import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead;
|
||||||
import com.ruoyi.schedule.plcRead.srgv.roadUtil.PathFinder;
|
import com.ruoyi.schedule.plcRead.srgv.roadUtil.PathFinder;
|
||||||
|
import com.ruoyi.schedule.plcRead.tsj.PlcTsjRead;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@@ -51,6 +56,11 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
|||||||
|
|
||||||
public RoadCacheService roadCacheService;
|
public RoadCacheService roadCacheService;
|
||||||
|
|
||||||
|
public ITsjDeviceExecutionQueueService tsjDeviceExecutionQueueService;
|
||||||
|
|
||||||
|
|
||||||
|
public IDeviceSrgvService deviceSrgvService;
|
||||||
|
|
||||||
|
|
||||||
public void init() {
|
public void init() {
|
||||||
sRgvCodeList = new HashMap<>();
|
sRgvCodeList = new HashMap<>();
|
||||||
@@ -86,9 +96,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
|||||||
|
|
||||||
sRgvTask(deviceSrgv);
|
sRgvTask(deviceSrgv);
|
||||||
|
|
||||||
createCarInQueue();
|
createCarQueue(deviceSrgv);
|
||||||
|
|
||||||
createCarOutQueue();
|
|
||||||
|
|
||||||
inCharging(deviceSrgv);
|
inCharging(deviceSrgv);
|
||||||
|
|
||||||
@@ -186,289 +195,208 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 生成出库小车队列
|
|
||||||
*/
|
|
||||||
private void createCarOutQueue() {
|
|
||||||
MydoJob mydoJob = new MydoJob();
|
|
||||||
mydoJob.setInOut("2");
|
|
||||||
mydoJob.setExecutionPhase("0");
|
|
||||||
mydoJob.setStatus("1");
|
|
||||||
List<MydoJob> mydoJobs = mydoJobService.selectInOrOutMydoJobList(mydoJob);
|
|
||||||
if (!mydoJobs.isEmpty()) {
|
|
||||||
MydoJob mydoJob1 = mydoJobs.get(0);
|
|
||||||
// 查询是否有已下发的该任务号队列
|
|
||||||
WcsSrgvQueue wcsSrgvQueue1 = wcsSagvQueueMapper.selectWcsSrgvQueueByTaskNo(mydoJob1.getTaskNo());
|
|
||||||
if (wcsSrgvQueue1 == null) {
|
|
||||||
ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap = PlcSrgvRead.deviceSrgvMap;
|
|
||||||
List<DeviceSrgv> deviceSrgvList = deviceSrgvMap.values().stream()
|
|
||||||
.filter(deviceSrgv -> deviceSrgv.getWorkMode() == 4)
|
|
||||||
.sorted((d1, d2) -> Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - d2.getCurrFloor())
|
|
||||||
- Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - d1.getCurrFloor()))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
if (!deviceSrgvList.isEmpty()) {
|
|
||||||
DeviceSrgv deviceSrgv = null;
|
|
||||||
for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
|
|
||||||
//优先出库层,如果没有优先邻近层
|
|
||||||
if (deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) {
|
|
||||||
deviceSrgv = deviceSrgv1;
|
|
||||||
break;
|
|
||||||
} else if (deviceSrgv == null || (Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - deviceSrgv1.getCurrFloor())) < (Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - deviceSrgv.getCurrFloor()))) {
|
|
||||||
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
|
|
||||||
if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
|
|
||||||
deviceSrgv = deviceSrgv1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (deviceSrgv != null) {
|
|
||||||
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString());
|
|
||||||
if (wcsSrgvQueue2 == null && deviceSrgv.getStatus() == 1) {
|
|
||||||
//查询小车是否为取货楼层
|
|
||||||
String endSite = "";
|
|
||||||
String issued = "0";
|
|
||||||
String executionStatus = "1";
|
|
||||||
WcsSrgvMap wcsSrgvMap = new WcsSrgvMap();
|
|
||||||
wcsSrgvMap.setCargoSpaceId(mydoJob1.getCargoSpaceId());
|
|
||||||
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
|
|
||||||
//取货地址
|
|
||||||
String cargoPickSite = wcsSrgvMaps.get(0).getSiteId();
|
|
||||||
|
|
||||||
if (deviceSrgv.getCurrFloor().equals(wcsSrgvMaps.get(0).getTheLayer())) {
|
|
||||||
//终点是巷道口到位输送线
|
|
||||||
endSite = cargoPickSite;
|
|
||||||
if(cargoPickSite.equals(deviceSrgv.getCurrSite())){
|
|
||||||
issued="1";
|
|
||||||
executionStatus="3";
|
|
||||||
}
|
|
||||||
} else{
|
|
||||||
//终点是提升机
|
|
||||||
endSite = "tsj";
|
|
||||||
}
|
|
||||||
WcsSrgvMap wcsSrgvMap1 = new WcsSrgvMap();
|
|
||||||
wcsSrgvMap1.setRemark(mydoJob1.getExitId());
|
|
||||||
List<WcsSrgvMap> wcsSrgvMaps1 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap1);
|
|
||||||
String cargoPlaceSite = wcsSrgvMaps1.get(0).getSiteId();
|
|
||||||
|
|
||||||
List<DeviceSrgv> sameSiteDevices = deviceSrgvMap.values().stream()
|
|
||||||
.filter(d -> d.getWorkMode() == 4
|
|
||||||
&& d.getStatus() == 1
|
|
||||||
&& d.getCurrSite().equals(cargoPlaceSite))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
if(!sameSiteDevices.isEmpty() &&!Objects.equals(sameSiteDevices.get(0).getDeviceId(), deviceSrgv.getDeviceId())){
|
|
||||||
WcsSrgvMap wcsSrgvMap3 = new WcsSrgvMap();
|
|
||||||
wcsSrgvMap3.setRemark("cache");
|
|
||||||
List<WcsSrgvMap> wcsSrgvMaps3 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap3);
|
|
||||||
for(WcsSrgvMap wcsSrgvMap4 : wcsSrgvMaps3){
|
|
||||||
//deviceSrgvMap中所有对象的currSite都不等于wcsSrgvMap4的siteId的对象
|
|
||||||
if(deviceSrgvMap.values().stream().noneMatch(d -> d.getCurrSite().equals(wcsSrgvMap4.getSiteId()))) {
|
|
||||||
//生成小车到缓存点队列
|
|
||||||
WcsSrgvQueue wcsSrgvQueue5 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(sameSiteDevices.get(0).getDeviceId().toString());
|
|
||||||
WcsSrgvQueue wcsSrgvQueue=new WcsSrgvQueue();
|
|
||||||
wcsSrgvQueue.setCargoPlaceSite(wcsSrgvMap4.getSiteId());
|
|
||||||
List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueue);
|
|
||||||
if (wcsSrgvQueue5 == null && wcsSrgvQueues.isEmpty()) {
|
|
||||||
WcsSrgvQueue wcsSrgvQueue3 = new WcsSrgvQueue();
|
|
||||||
wcsSrgvQueue3.setGuid(UUID.randomUUID().toString());
|
|
||||||
wcsSrgvQueue3.setTaskNo("9999");
|
|
||||||
wcsSrgvQueue3.setTaskType("1");
|
|
||||||
wcsSrgvQueue3.setPriority(Long.parseLong("2"));
|
|
||||||
wcsSrgvQueue3.setCargo("1");
|
|
||||||
wcsSrgvQueue3.setIssued(issued);
|
|
||||||
wcsSrgvQueue3.setExecutionStatus(executionStatus);
|
|
||||||
wcsSrgvQueue3.setCargoPickSite(cargoPickSite);
|
|
||||||
wcsSrgvQueue3.setCargoPlaceSite(wcsSrgvMap4.getSiteId());
|
|
||||||
wcsSrgvQueue3.setStartSite(sameSiteDevices.get(0).getCurrSite());
|
|
||||||
wcsSrgvQueue3.setEndSite(wcsSrgvMap4.getSiteId());
|
|
||||||
wcsSrgvQueue3.setTheFloor(sameSiteDevices.get(0).getCurrFloor().toString());
|
|
||||||
wcsSrgvQueue3.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|
||||||
wcsSrgvQueue3.setAgvId(sameSiteDevices.get(0).getDeviceId().toString());
|
|
||||||
wcsSrgvQueue3.setDefault02("4");
|
|
||||||
wcsSrgvQueue3.setDefault07(sameSiteDevices.get(0).getCurrFloor().toString());
|
|
||||||
wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//生成小车取货队列
|
|
||||||
WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue();
|
|
||||||
wcsSrgvQueue.setGuid(UUID.randomUUID().toString());
|
|
||||||
wcsSrgvQueue.setTaskNo(mydoJob1.getTaskNo());
|
|
||||||
wcsSrgvQueue.setTaskType("1");
|
|
||||||
wcsSrgvQueue.setPriority(Long.parseLong("2"));
|
|
||||||
wcsSrgvQueue.setCargo("1");
|
|
||||||
wcsSrgvQueue.setIssued(issued);
|
|
||||||
wcsSrgvQueue.setExecutionStatus(executionStatus);
|
|
||||||
wcsSrgvQueue.setCargoPickSite(cargoPickSite);
|
|
||||||
|
|
||||||
wcsSrgvQueue.setCargoPlaceSite(cargoPlaceSite);
|
|
||||||
wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite());
|
|
||||||
wcsSrgvQueue.setEndSite(endSite);
|
|
||||||
wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString());
|
|
||||||
wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|
||||||
wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString());
|
|
||||||
wcsSrgvQueue.setDefault02("4");
|
|
||||||
wcsSrgvQueue.setDefault07("1");
|
|
||||||
wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成入库小车队列
|
* 生成入库小车队列
|
||||||
*/
|
*/
|
||||||
private void createCarInQueue() {
|
private void createCarQueue(DeviceSrgv deviceSrgv) {
|
||||||
MydoJob mydoJob = new MydoJob();
|
|
||||||
mydoJob.setExecutionPhase("2");
|
if(deviceSrgv.getWorkMode()==4 && deviceSrgv.getStatus()==1) {
|
||||||
mydoJob.setInOut("1");
|
WcsSrgvQueue wcsSrgvQueue = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString());
|
||||||
List<MydoJob> mydoJobs = mydoJobService.selectInOrOutMydoJobList(mydoJob);
|
|
||||||
|
if (wcsSrgvQueue == null) {
|
||||||
|
|
||||||
|
//找小车当前层作业,生成队列
|
||||||
|
//如果没有当前层作业,就找最近层换层作业,生成队列
|
||||||
|
MydoJob mydoJob1 = new MydoJob();
|
||||||
|
mydoJob1.setTheFloor(deviceSrgv.getCurrFloor().toString());
|
||||||
|
mydoJob1.setInOut("1");
|
||||||
|
mydoJob1.setStatus("3");
|
||||||
|
// todo 定提升机到达阶段
|
||||||
|
mydoJob1.setExecutionPhase("3");
|
||||||
|
List<MydoJob> mydoJobs = mydoJobService.selectMydoJobList(mydoJob1);
|
||||||
if (!mydoJobs.isEmpty()) {
|
if (!mydoJobs.isEmpty()) {
|
||||||
MydoJob mydoJob1 = mydoJobs.get(0);
|
//生成了从小车现在位置到提升机接货的队列
|
||||||
// 查询是否有已下发的该任务号队列
|
createCarQueue(mydoJobs.get(0), deviceSrgv, "4","0");
|
||||||
WcsSrgvQueue wcsSrgvQueue1 = wcsSagvQueueMapper.selectWcsSrgvQueueByTaskNo(mydoJob1.getTaskNo());
|
|
||||||
|
|
||||||
if (wcsSrgvQueue1 == null) {
|
|
||||||
ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap = PlcSrgvRead.deviceSrgvMap;
|
|
||||||
|
|
||||||
List<DeviceSrgv> deviceSrgvList = deviceSrgvMap.values().stream()
|
|
||||||
.filter(deviceSrgv -> deviceSrgv.getWorkMode() == 4)
|
|
||||||
.sorted((d1, d2) -> d2.getCurrFloor().compareTo(d1.getCurrFloor()))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
if (!deviceSrgvList.isEmpty()) {
|
|
||||||
DeviceSrgv deviceSrgv = null;
|
|
||||||
for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
|
|
||||||
if (deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) {
|
|
||||||
deviceSrgv = deviceSrgv1;
|
|
||||||
break; // 找到了相同楼层的直接选它
|
|
||||||
} else {
|
} else {
|
||||||
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
|
MydoJob mydoJob = new MydoJob();
|
||||||
if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
|
mydoJob.setInOut("2");
|
||||||
deviceSrgv = deviceSrgv1; // 更新为更小楼层的小车
|
mydoJob.setStatus("1");
|
||||||
break;
|
mydoJob.setTheFloor(deviceSrgv.getCurrFloor().toString());
|
||||||
}
|
List<MydoJob> mydoJobs1 = mydoJobService.selectMydoJobList(mydoJob);
|
||||||
}
|
//当前层出库作业
|
||||||
}
|
if (!mydoJobs1.isEmpty()) {
|
||||||
|
//找最外层作业存储过程
|
||||||
if (deviceSrgv != null) {
|
HashMap<String, Object> map = new HashMap<>();
|
||||||
|
map.put("v_layer",deviceSrgv.getCurrFloor());
|
||||||
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString());
|
mydoJobService.selectMydoJobOutside(map);
|
||||||
if (wcsSrgvQueue2 == null && deviceSrgv.getStatus() == 1) {
|
String jobId = map.get("v_job_ids").toString();
|
||||||
|
MydoJob mydoJob2 = mydoJobService.selectMydoJobByJobId(jobId);
|
||||||
//查询小车是否为1楼,且1楼小车不在入库站点
|
//判断小车当前点是否是出库作业货位点,如果不是,就生成队列{},如果是生成已下发队列
|
||||||
String endSite = "";
|
|
||||||
String issued = "0";
|
|
||||||
String executionStatus = "1";
|
|
||||||
WcsSrgvMap wcsSrgvMap = new WcsSrgvMap();
|
WcsSrgvMap wcsSrgvMap = new WcsSrgvMap();
|
||||||
wcsSrgvMap.setRemark(mydoJob1.getEntranceId());
|
wcsSrgvMap.setCargoSpaceId(mydoJob2.getCargoSpaceId());
|
||||||
if (StrUtil.isEmpty(wcsSrgvMap.getRemark())) {
|
|
||||||
log.error("入库任务号:{} 入库入口ID为空" , mydoJob1.getTaskNo());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
|
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
|
||||||
//取货地址
|
if(!deviceSrgv.getCurrSite().equals(wcsSrgvMaps.get(0).getSiteId())){
|
||||||
String cargoPickSite = wcsSrgvMaps.get(0).getSiteId();
|
createCarQueue(mydoJob2, deviceSrgv, "4","0");
|
||||||
|
}else{
|
||||||
if (deviceSrgv.getCurrFloor() == 1) {
|
createCarQueue(mydoJob2, deviceSrgv, "4","1");
|
||||||
endSite = cargoPickSite;
|
|
||||||
if (cargoPickSite.equals(deviceSrgv.getCurrSite())) {
|
|
||||||
// 小车已在取货点
|
|
||||||
issued = "1";
|
|
||||||
executionStatus = "3";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// 小车不在1楼
|
//别的层的出库作业和入库作业
|
||||||
endSite = "tsj";
|
|
||||||
}
|
|
||||||
//筛选出deviceSrgvMap中deviceSrgv.getWorkMode() == 4并且deviceSrgv.getStatus() == 1并且deviceSrgv.getCurrSite() == cargoPickSite得对象,并排除掉其中deviceId与deviceSrgv.getDeviceId()相同的对象
|
|
||||||
|
|
||||||
List<DeviceSrgv> sameSiteDevices = deviceSrgvMap.values().stream()
|
ArrayList<MydoJob> mydoJobs2 = new ArrayList<>();
|
||||||
.filter(d -> d.getWorkMode() == 4
|
MydoJob mydoJob2 = new MydoJob();
|
||||||
&& d.getStatus() == 1
|
mydoJob2.setInOut("2");
|
||||||
&& d.getCurrSite().equals(cargoPickSite))
|
mydoJob2.setStatus("1");
|
||||||
.collect(Collectors.toList());
|
List<MydoJob> mydoJobs3 = mydoJobService.selectMydoJobList(mydoJob2);
|
||||||
if(!sameSiteDevices.isEmpty() && !Objects.equals(sameSiteDevices.get(0).getDeviceId(), deviceSrgv.getDeviceId())){
|
MydoJob mydoJob3 = new MydoJob();
|
||||||
WcsSrgvMap wcsSrgvMap3 = new WcsSrgvMap();
|
mydoJob3.setStatus("3");
|
||||||
wcsSrgvMap3.setRemark("cache");
|
mydoJob3.setInOut("1");
|
||||||
List<WcsSrgvMap> wcsSrgvMaps3 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap3);
|
//todo 输送机阶段
|
||||||
for(WcsSrgvMap wcsSrgvMap4 : wcsSrgvMaps3){
|
mydoJob3.setExecutionPhase("1");
|
||||||
//deviceSrgvMap中所有对象的currSite都不等于wcsSrgvMap4的siteId的对象
|
List<MydoJob> mydoJobs4 = mydoJobService.selectMydoJobList(mydoJob3);
|
||||||
if(deviceSrgvMap.values().stream().noneMatch(d -> d.getCurrSite().equals(wcsSrgvMap4.getSiteId()))) {
|
mydoJobs2.addAll(mydoJobs3);
|
||||||
WcsSrgvQueue wcsSrgvQueue5 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(sameSiteDevices.get(0).getDeviceId().toString());
|
mydoJobs2.addAll(mydoJobs4);
|
||||||
WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue();
|
|
||||||
wcsSrgvQueue.setCargoPlaceSite(wcsSrgvMap4.getSiteId());
|
|
||||||
List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueue);
|
|
||||||
if (wcsSrgvQueue5 == null && wcsSrgvQueues.isEmpty()) {
|
|
||||||
//生成占位小车到缓存点队列
|
|
||||||
WcsSrgvQueue wcsSrgvQueue3 = new WcsSrgvQueue();
|
|
||||||
wcsSrgvQueue3.setGuid(UUID.randomUUID().toString());
|
|
||||||
wcsSrgvQueue3.setTaskNo(mydoJob1.getTaskNo());
|
|
||||||
wcsSrgvQueue3.setTaskType("1");
|
|
||||||
wcsSrgvQueue3.setPriority(Long.parseLong("2"));
|
|
||||||
wcsSrgvQueue3.setCargo("1");
|
|
||||||
wcsSrgvQueue3.setIssued(issued);
|
|
||||||
wcsSrgvQueue3.setExecutionStatus(executionStatus);
|
|
||||||
wcsSrgvQueue3.setCargoPickSite(cargoPickSite);
|
|
||||||
wcsSrgvQueue3.setCargoPlaceSite(wcsSrgvMap4.getSiteId());
|
|
||||||
wcsSrgvQueue3.setStartSite(sameSiteDevices.get(0).getCurrSite());
|
|
||||||
wcsSrgvQueue3.setEndSite(wcsSrgvMap4.getSiteId());
|
|
||||||
wcsSrgvQueue3.setTheFloor(sameSiteDevices.get(0).getCurrFloor().toString());
|
|
||||||
wcsSrgvQueue3.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|
||||||
wcsSrgvQueue3.setAgvId(sameSiteDevices.get(0).getDeviceId().toString());
|
|
||||||
wcsSrgvQueue3.setDefault02("4");
|
|
||||||
wcsSrgvQueue3.setDefault07(sameSiteDevices.get(0).getCurrFloor().toString());
|
|
||||||
wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue3);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//判断那层没有小车,并且没有要去那层的小车队列,查监控表
|
||||||
|
//生成换层任务
|
||||||
|
MydoJob job = mydoJobs2.get(0);
|
||||||
|
|
||||||
|
DeviceSrgv deviceSrgv1 = new DeviceSrgv();
|
||||||
|
deviceSrgv1.setCurrFloor(Convert.toInt(job.getTheFloor()));
|
||||||
|
List<DeviceSrgv> srgvs = deviceSrgvService.selectDeviceSrgvList(deviceSrgv1);
|
||||||
|
//这个作业的目标层没有小车
|
||||||
|
if (srgvs.isEmpty()) {
|
||||||
|
|
||||||
|
WcsSrgvQueue wcsSrgvQueue1 = new WcsSrgvQueue();
|
||||||
|
wcsSrgvQueue1.setDefault07(job.getTheFloor());
|
||||||
|
// wcsSrgvQueue1.setTaskType("3");
|
||||||
|
List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueue1);
|
||||||
|
if (wcsSrgvQueues.isEmpty()) {
|
||||||
|
//生成换层任务
|
||||||
|
createCarQueue(mydoJob2, deviceSrgv, "8","0");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//生成小车取货队列
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} else{
|
||||||
|
if ( "1".equals(wcsSrgvQueue.getIssued())) {
|
||||||
|
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(wcsSrgvQueue.getTaskNo()));
|
||||||
|
if (deviceSrgv.getCurrSite().equals(wcsSrgvQueue.getEndSite()) && wcsSrgvQueue.getTaskType().equals("1")) {
|
||||||
|
// todo 通知wms入库完成 完成队列 完成作业
|
||||||
|
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||||
|
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
|
||||||
|
|
||||||
|
mydoJobService.insertHistory(mydoJob.getJobId());
|
||||||
|
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
|
||||||
|
|
||||||
|
} else if (deviceSrgv.getCurrSite().equals(wcsSrgvQueue.getDefault03()) && wcsSrgvQueue.getTaskType().equals("2")) {
|
||||||
|
//完成队列 更新作业阶段
|
||||||
|
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||||
|
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
|
||||||
|
//提升机修改阶段
|
||||||
|
// mydoJob.setExecutionPhase("");
|
||||||
|
// mydoJobService.updateMydoJob(mydoJob);
|
||||||
|
} else if (deviceSrgv.getCurrSite().equals(wcsSrgvQueue.getDefault03()) && wcsSrgvQueue.getTaskType().equals("4")) {
|
||||||
|
//根据任务类型 ,生成队列
|
||||||
|
if (Convert.toInt(mydoJob.getInOrOut()) < 20) {
|
||||||
|
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||||
|
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
|
||||||
|
|
||||||
|
createCarQueue(mydoJob, deviceSrgv, "1","0");
|
||||||
|
} else {
|
||||||
|
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||||
|
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
|
||||||
|
createCarQueue(mydoJob, deviceSrgv, "2","0");
|
||||||
|
}
|
||||||
|
}else if(deviceSrgv.getCurrSite().equals(wcsSrgvQueue.getDefault03()) && wcsSrgvQueue.getTaskType().equals("8")){
|
||||||
|
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||||
|
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
|
||||||
|
|
||||||
|
}else if ( deviceSrgv.getCurrSite().equals(wcsSrgvQueue.getEndSite()) && wcsSrgvQueue.getTaskType().equals("3")) {
|
||||||
|
//充电任务
|
||||||
|
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||||
|
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createCarQueue(MydoJob mydoJob1, DeviceSrgv deviceSrgv,String taskType,String issued) {
|
||||||
WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue();
|
WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue();
|
||||||
wcsSrgvQueue.setGuid(UUID.randomUUID().toString());
|
wcsSrgvQueue.setGuid(UUID.randomUUID().toString());
|
||||||
wcsSrgvQueue.setTaskNo(mydoJob1.getTaskNo());
|
wcsSrgvQueue.setTaskNo(mydoJob1.getTaskNo());
|
||||||
wcsSrgvQueue.setTaskType("1");
|
wcsSrgvQueue.setTaskType(taskType);
|
||||||
wcsSrgvQueue.setPriority(Long.parseLong("2"));
|
wcsSrgvQueue.setPriority(Long.parseLong("2"));
|
||||||
wcsSrgvQueue.setCargo("1");
|
// wcsSrgvQueue.setCargo("1");
|
||||||
wcsSrgvQueue.setIssued(issued);
|
wcsSrgvQueue.setIssued(issued);
|
||||||
wcsSrgvQueue.setExecutionStatus(executionStatus);
|
wcsSrgvQueue.setExecutionStatus("1");
|
||||||
wcsSrgvQueue.setCargoPickSite(cargoPickSite);
|
// wcsSrgvQueue.setCargoPlaceSite("tsj");
|
||||||
WcsSrgvMap wcsSrgvMap1 = new WcsSrgvMap();
|
WcsSrgvMap wcsSrgvMap1 = new WcsSrgvMap();
|
||||||
wcsSrgvMap1.setCargoSpaceId(mydoJob1.getCargoSpaceId());
|
wcsSrgvMap1.setTheRow(4);
|
||||||
|
wcsSrgvMap1.setTheColumn(5);
|
||||||
|
wcsSrgvMap1.setTheLayer(Convert.toInt(mydoJob1.getTheFloor()));
|
||||||
List<WcsSrgvMap> wcsSrgvMaps1 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap1);
|
List<WcsSrgvMap> wcsSrgvMaps1 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap1);
|
||||||
wcsSrgvQueue.setCargoPlaceSite(wcsSrgvMaps1.get(0).getSiteId());
|
|
||||||
|
if(Integer.parseInt(mydoJob1.getInOrOut())<20 && "4".equals(taskType)){
|
||||||
wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite());
|
wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite());
|
||||||
wcsSrgvQueue.setEndSite(endSite);
|
wcsSrgvQueue.setEndSite("tsj");
|
||||||
|
//每一层的停靠点
|
||||||
|
wcsSrgvQueue.setDefault03(wcsSrgvMaps1.get(0).getSiteId());
|
||||||
|
}
|
||||||
|
else if(Integer.parseInt(mydoJob1.getInOrOut())<20 && "1".equals(taskType)){
|
||||||
|
wcsSrgvQueue.setStartSite("tsj");
|
||||||
|
WcsSrgvMap wcsSrgvMap = new WcsSrgvMap();
|
||||||
|
wcsSrgvMap.setCargoSpaceId(mydoJob1.getCargoSpaceId());
|
||||||
|
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
|
||||||
|
wcsSrgvQueue.setEndSite(wcsSrgvMaps.get(0).getSiteId());
|
||||||
|
//每一层的停靠点
|
||||||
|
wcsSrgvQueue.setDefault03(wcsSrgvMaps1.get(0).getSiteId());
|
||||||
|
}
|
||||||
|
else if(Integer.parseInt(mydoJob1.getInOrOut())>=20 && "4".equals(taskType)){
|
||||||
|
wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite());
|
||||||
|
WcsSrgvMap wcsSrgvMap = new WcsSrgvMap();
|
||||||
|
wcsSrgvMap.setCargoSpaceId(mydoJob1.getCargoSpaceId());
|
||||||
|
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
|
||||||
|
wcsSrgvQueue.setEndSite(wcsSrgvMaps.get(0).getSiteId());
|
||||||
|
//每一层的停靠点
|
||||||
|
wcsSrgvQueue.setDefault03(wcsSrgvMaps1.get(0).getSiteId());
|
||||||
|
}
|
||||||
|
else if(Integer.parseInt(mydoJob1.getInOrOut())>=20 && "2".equals(taskType)){
|
||||||
|
wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite());
|
||||||
|
wcsSrgvQueue.setEndSite("tsj");
|
||||||
|
//每一层的停靠点
|
||||||
|
wcsSrgvQueue.setDefault03(wcsSrgvMaps1.get(0).getSiteId());
|
||||||
|
}
|
||||||
|
else if("8".equals(taskType)){
|
||||||
|
wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite());
|
||||||
|
wcsSrgvQueue.setEndSite("tsj");
|
||||||
|
wcsSrgvQueue.setDefault03(wcsSrgvMaps1.get(0).getSiteId());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString());
|
wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString());
|
||||||
wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||||
wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString());
|
wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString());
|
||||||
wcsSrgvQueue.setDefault02("4");
|
wcsSrgvQueue.setDefault02(taskType);
|
||||||
wcsSrgvQueue.setDefault07("1");
|
wcsSrgvQueue.setDefault07(mydoJob1.getTheFloor());
|
||||||
wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue);
|
wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue);
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -239,4 +239,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
and status = 3
|
and status = 3
|
||||||
order by priority desc,create_time
|
order by priority desc,create_time
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="selectMydoJobOutside" parameterType="java.util.Map" statementType="CALLABLE">
|
||||||
|
{call proc_find_outside(
|
||||||
|
#{v_layer,jdbcType=INTEGER,mode=IN},
|
||||||
|
#{v_job_ids,jdbcType=VARCHAR,mode=OUT}
|
||||||
|
)}
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user