|
|
@@ -86,35 +86,8 @@ public class AsynRunTaskService extends BaseService { |
|
|
|
public void asynRunTask(Long currTaskId,Long vehicleId) throws IOException { |
|
|
|
CurrTask currTask = currTaskServiceBiz.getById(currTaskId); |
|
|
|
VehicleInfo vehicle = vehicleInfoServiceBiz.getById(vehicleId); |
|
|
|
if (vehicleId==1){ |
|
|
|
//获取RGV2当前位置 |
|
|
|
Double rgv2CurrPosition = RGVCurrPosition(2); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), rgv2CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(2, currTaskId, 2,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败==="); |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行成功==="); |
|
|
|
} |
|
|
|
}else { |
|
|
|
//获取RGV1当前位置 |
|
|
|
Double rgv1CurrPosition = RGVCurrPosition(1); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), rgv1CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(1, currTaskId, 12,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败==="); |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行成功==="); |
|
|
|
} |
|
|
|
} |
|
|
|
//检查车辆是否冲突,冲突则避让 |
|
|
|
rgvStatus(vehicleId,currTask); |
|
|
|
//新建一条执行任务的关系表存放任务执行信息 |
|
|
|
RunTask runTask=new RunTask(); |
|
|
|
runTask.setTaskId(currTask.getId()); |
|
|
@@ -168,35 +141,8 @@ public class AsynRunTaskService extends BaseService { |
|
|
|
Long currTaskId = inStockInfo.getTaskId(); |
|
|
|
CurrTask currTask = currTaskServiceBiz.getById(currTaskId); |
|
|
|
VehicleInfo vehicle = vehicleInfoServiceBiz.getById(vehicleId); |
|
|
|
if (vehicleId==1){ |
|
|
|
//获取RGV2当前位置 |
|
|
|
Double rgv2CurrPosition = RGVCurrPosition(2); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, location.getCode(),currTask.getTargetPosition(), rgv2CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(2, currTaskId, 2,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败==="); |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行成功==="); |
|
|
|
} |
|
|
|
}else { |
|
|
|
//获取RGV1当前位置 |
|
|
|
Double rgv1CurrPosition = RGVCurrPosition(1); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId,location.getCode(),currTask.getTargetPosition(), rgv1CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(1, currTaskId, 12,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败==="); |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行成功==="); |
|
|
|
} |
|
|
|
} |
|
|
|
//检查车辆是否冲突,冲突则避让 |
|
|
|
rgvStatus(vehicleId,currTask); |
|
|
|
//新建一条执行任务的关系表存放任务执行信息 |
|
|
|
RunTask runTask=new RunTask(); |
|
|
|
runTask.setTaskId(currTask.getId()); |
|
|
@@ -262,35 +208,8 @@ public class AsynRunTaskService extends BaseService { |
|
|
|
CurrTask currTask = currTaskServiceBiz.getById(currTaskId); |
|
|
|
Location location = locationServiceBiz.getById(currTask.getLocationId()); |
|
|
|
VehicleInfo vehicle = vehicleInfoServiceBiz.getById(vehicleId); |
|
|
|
if (vehicleId==1){ |
|
|
|
//获取RGV2当前位置 |
|
|
|
Double rgv2CurrPosition = RGVCurrPosition(2); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), location.getCode(), rgv2CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(2, currTaskId, 2,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败==="); |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行成功==="); |
|
|
|
} |
|
|
|
}else { |
|
|
|
//获取RGV1当前位置 |
|
|
|
Double rgv1CurrPosition = RGVCurrPosition(1); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), location.getCode(), rgv1CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(1, currTaskId, 12,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败==="); |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行成功==="); |
|
|
|
} |
|
|
|
} |
|
|
|
//检查车辆是否冲突,冲突则避让 |
|
|
|
rgvStatus(vehicleId,currTask); |
|
|
|
//新建一条执行任务的关系表存放任务执行信息,终点为缓存区空闲库位 |
|
|
|
RunTask runTask=new RunTask(); |
|
|
|
runTask.setTaskId(currTask.getId()); |
|
|
@@ -327,7 +246,6 @@ public class AsynRunTaskService extends BaseService { |
|
|
|
runTaskServiceBiz.updateById(runTask); |
|
|
|
//更新currTask表 |
|
|
|
currTask.setCacheSatatus(2); |
|
|
|
currTask.setStatus(3); |
|
|
|
currTask.setUpdateTime(LocalDateTime.now()); |
|
|
|
currTaskServiceBiz.updateById(currTask); |
|
|
|
//更新in_stock_info表 |
|
|
@@ -351,37 +269,8 @@ public class AsynRunTaskService extends BaseService { |
|
|
|
public void asynRunTaskForKilnToWarehouse(Long currTaskId,Long vehicleId) throws IOException { |
|
|
|
CurrTask currTask = currTaskServiceBiz.getById(currTaskId); |
|
|
|
VehicleInfo vehicle = vehicleInfoServiceBiz.getById(vehicleId); |
|
|
|
if (vehicleId==1){ |
|
|
|
//获取RGV2当前位置 |
|
|
|
Double rgv2CurrPosition = RGVCurrPosition(2); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getOutStartPosition(), currTask.getOutTargetPosition(), rgv2CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(2, currTaskId, 2,currTask.getPlcValue()); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败==="); |
|
|
|
// 2022/3/6 websocket通知页面 |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行成功==="); |
|
|
|
} |
|
|
|
}else { |
|
|
|
//获取RGV1当前位置 |
|
|
|
Double rgv1CurrPosition = RGVCurrPosition(1); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getOutStartPosition(), currTask.getOutTargetPosition(), rgv1CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(1, currTaskId, 12,currTask.getPlcValue()); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败==="); |
|
|
|
// 2022/3/6 websocket通知页面 |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行成功==="); |
|
|
|
} |
|
|
|
} |
|
|
|
//检查车辆是否冲突,冲突则避让 |
|
|
|
rgvStatus(vehicleId,currTask); |
|
|
|
//新建一条执行任务的关系表存放任务执行信息,终点为缓存区空闲库位 |
|
|
|
RunTask runTask=new RunTask(); |
|
|
|
runTask.setTaskId(currTask.getId()); |
|
|
@@ -495,34 +384,46 @@ public class AsynRunTaskService extends BaseService { |
|
|
|
public void asynRunOutStock(Long locationId,String yeyaTaiCode,Long vehicleId) throws IOException { |
|
|
|
Location location = locationServiceBiz.getById(locationId); |
|
|
|
if (vehicleId==1){ |
|
|
|
//获取RGV2当前位置 |
|
|
|
Double rgv2CurrPosition = RGVCurrPosition(2); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, location.getCode(), yeyaTaiCode, rgv2CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(2, 1L, 2,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败==="); |
|
|
|
// 2022/3/6 websocket通知页面 |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败"); |
|
|
|
return; |
|
|
|
Long anotherVehicleId=2L; |
|
|
|
Boolean rgv2Online = rgvOnline(anotherVehicleId); |
|
|
|
if (rgv2Online){ |
|
|
|
//获取RGV2当前位置 |
|
|
|
Double rgv2CurrPosition = RGVCurrPosition(2); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, location.getCode(), yeyaTaiCode, rgv2CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(2, 1L, 2,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败==="); |
|
|
|
// 2022/3/6 websocket通知页面 |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行成功==="); |
|
|
|
} |
|
|
|
logger.info("===执行任务出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位39,执行成功==="); |
|
|
|
}else { |
|
|
|
logger.info("RGV2不在线,跳过检测是否避让。"); |
|
|
|
} |
|
|
|
|
|
|
|
}else { |
|
|
|
//获取RGV1当前位置 |
|
|
|
Double rgv1CurrPosition = RGVCurrPosition(1); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, location.getCode(), yeyaTaiCode, rgv1CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(1, 1L, 12,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败==="); |
|
|
|
// 2022/3/6 websocket通知页面 |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败"); |
|
|
|
return; |
|
|
|
Boolean rgv1Online = rgvOnline(1L); |
|
|
|
if (rgv1Online){ |
|
|
|
//获取RGV1当前位置 |
|
|
|
Double rgv1CurrPosition = RGVCurrPosition(1); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, location.getCode(), yeyaTaiCode, rgv1CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(1, 1L, 12,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败==="); |
|
|
|
// 2022/3/6 websocket通知页面 |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行成功==="); |
|
|
|
} |
|
|
|
logger.info("===执行任务出库任务时车辆位置冲突,执行车辆位移任务,车辆"+vehicleId+"移动到点位1,执行成功==="); |
|
|
|
}else { |
|
|
|
logger.info("RGV1不在线,跳过检测是否避让。"); |
|
|
|
} |
|
|
|
} |
|
|
|
RunTask runTask=new RunTask(); |
|
|
@@ -1096,4 +997,86 @@ public class AsynRunTaskService extends BaseService { |
|
|
|
logger.info("任务号" + currTask.getTaskCode() + "生产单号:" + currTask.getSheetNo() + "生产单开始生产上报apms失败"); |
|
|
|
} |
|
|
|
} |
|
|
|
/** |
|
|
|
* 车辆是否在线 |
|
|
|
* @param vehicleId 车辆id |
|
|
|
* @return true/false |
|
|
|
* @throws IOException plc访问失败 |
|
|
|
*/ |
|
|
|
private Boolean rgvOnline(Long vehicleId) throws IOException { |
|
|
|
String identifier=null; |
|
|
|
if (vehicleId==1){ |
|
|
|
identifier="S7-1200 station_2.Boutique.DB500_PLCToWCS.RGV1ToWCS.Online"; |
|
|
|
} |
|
|
|
if (vehicleId==2){ |
|
|
|
identifier="S7-1200 station_2.Boutique.DB500_PLCToWCS.RGV2ToWCS.Online"; |
|
|
|
} |
|
|
|
Map<String, Object> json = new HashMap(); |
|
|
|
json.put("nameSpace", 6); |
|
|
|
json.put("plcName", "plc1"); |
|
|
|
json.put("identifier",identifier); |
|
|
|
String result = null; |
|
|
|
try { |
|
|
|
result = HttpClient.httpPost("http://192.168.6.51:8009/opcua/read", JSON.toJSONString(json)); |
|
|
|
} catch (IOException e) { |
|
|
|
e.printStackTrace(); |
|
|
|
logger.info("获取车辆"+vehicleId+"当前是否在线失败"); |
|
|
|
} |
|
|
|
Boolean online = Boolean.valueOf(JSONObject.parseObject(result).get("result").toString()); |
|
|
|
return online; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 传入车辆ID,检查另一辆车是否在线,如果在线,检查是否位置冲突,冲突则避让。若另一辆车不在线,则不检查是否冲突。 |
|
|
|
* @param vehicleId |
|
|
|
* @param currTask |
|
|
|
* @throws IOException |
|
|
|
*/ |
|
|
|
private void rgvStatus(Long vehicleId,CurrTask currTask) throws IOException { |
|
|
|
Long currTaskId = currTask.getId(); |
|
|
|
if (vehicleId==1){ |
|
|
|
Long anotherVehicleId=2L; |
|
|
|
Boolean rgv2Online = rgvOnline(anotherVehicleId); |
|
|
|
if (rgv2Online){ |
|
|
|
//获取RGV2当前位置 |
|
|
|
Double rgv2CurrPosition = RGVCurrPosition(2); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), rgv2CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(2, currTaskId, 2,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+anotherVehicleId+"移动到点位39,执行失败==="); |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+anotherVehicleId+"移动到点位39,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+anotherVehicleId+"移动到点位39,执行成功==="); |
|
|
|
} |
|
|
|
}else { |
|
|
|
logger.info("RGV2不在线,跳过检测是否避让。"); |
|
|
|
} |
|
|
|
|
|
|
|
}else { |
|
|
|
Long anotherVehicleId=1L; |
|
|
|
Boolean rgv1Online = rgvOnline(anotherVehicleId); |
|
|
|
|
|
|
|
if (rgv1Online){ |
|
|
|
|
|
|
|
//获取RGV1当前位置 |
|
|
|
Double rgv1CurrPosition = RGVCurrPosition(1); |
|
|
|
//两辆小车是否冲突 |
|
|
|
Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), rgv1CurrPosition); |
|
|
|
if (conflictBoolean){ |
|
|
|
Integer status = moveRgv(1, currTaskId, 12,0); |
|
|
|
if (status!=1){ |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+anotherVehicleId+"移动到点位1,执行失败==="); |
|
|
|
webSocketServer.sendtoAll(LocalDateTime.now()+"执行任务:"+currTask.getTaskCode()+" 时车辆位置冲突,执行车辆位移任务,车辆"+anotherVehicleId+"移动到点位1,执行失败"); |
|
|
|
return; |
|
|
|
} |
|
|
|
logger.info("===执行任务:"+currTaskId+" 时车辆位置冲突,执行车辆位移任务,车辆"+anotherVehicleId+"移动到点位1,执行成功==="); |
|
|
|
} |
|
|
|
}else { |
|
|
|
logger.info("RGV1不在线,跳过检测是否避让。"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |