fix: 解决堆垛机出库,移库路由问题

This commit is contained in:
yanps
2023-12-01 10:12:23 +08:00
parent 368940fd24
commit 438e82d222
7 changed files with 90 additions and 19 deletions

View File

@@ -389,8 +389,8 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
}
if (mode != 3) {
message = "未联机";
if (mode != 3 || requireSucess) {
message = "未联机或已修改";
} else if (error != 0) {
message = "有报警";
@@ -417,8 +417,10 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
HashMap map = new HashMap();
switch (command) {
case 0:
applyTask();
requireSucess = true;
boolean b = applyTask();
if (b) {
requireSucess = true;
}
break;
case 1:
message = "取货中";
@@ -429,13 +431,13 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
String next_device_code = instruction.getNext_device_code();
Device nextDevice = deviceAppService.findDeviceByCode(next_device_code);
if (StrUtil.equals(nextDevice.getDevice_type(), DeviceType.conveyor.name())) {
if (ObjectUtil.isNotEmpty(nextDevice.getExtraValue().get("z")) && "z".equals(nextDevice.getExtraValue().get("z"))) {
if (ObjectUtil.isNotEmpty(nextDevice.getExtraValue().get("z"))) {
map.put("to_x", nextDevice.getExtraValue().get("z"));
}
if (ObjectUtil.isNotEmpty(nextDevice.getExtraValue().get("x")) && "x".equals(nextDevice.getExtraValue().get("x"))) {
if (ObjectUtil.isNotEmpty(nextDevice.getExtraValue().get("x"))) {
map.put("to_z", nextDevice.getExtraValue().get("x"));
}
if (ObjectUtil.isNotEmpty(nextDevice.getExtraValue().get("y")) && "y".equals(nextDevice.getExtraValue().get("y"))) {
if (ObjectUtil.isNotEmpty(nextDevice.getExtraValue().get("y"))) {
map.put("to_y", nextDevice.getExtraValue().get("y"));
}
}
@@ -620,13 +622,13 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
map.put("to_task", inst.getInstruction_code());
if (StrUtil.equals(startDevice.getDevice_type(), DeviceType.conveyor.name())) {
if (ObjectUtil.isNotEmpty(startDevice.getExtraValue().get("x")) && "x".equals(startDevice.getExtraValue().get("x"))) {
if (ObjectUtil.isNotEmpty(startDevice.getExtraValue().get("x"))) {
map.put("to_x", startDevice.getExtraValue().get("x"));
}
if (ObjectUtil.isNotEmpty(startDevice.getExtraValue().get("z")) && "z".equals(startDevice.getExtraValue().get("z"))) {
if (ObjectUtil.isNotEmpty(startDevice.getExtraValue().get("z"))) {
map.put("to_z", startDevice.getExtraValue().get("z"));
}
if (ObjectUtil.isNotEmpty(startDevice.getExtraValue().get("y")) && "y".equals(startDevice.getExtraValue().get("y"))) {
if (ObjectUtil.isNotEmpty(startDevice.getExtraValue().get("y"))) {
map.put("to_y", startDevice.getExtraValue().get("y"));
}
}
@@ -644,7 +646,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
this.writing(map);
}
}
return false;
return true;
}
/**

View File

@@ -780,7 +780,7 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
throw new BadRequestException(LangProcess.msg("task_checkExist",device_code));
}
if (StrUtil.equals(material_type, "") || StrUtil.equals(quantity, "")) {
throw new RuntimeException("请填写物料信息!");
throw new RuntimeException(LangProcess.msg("material_information"));
}
dto.setStart_device_code(device_code);
dto.setStart_point_code(device_code);
@@ -805,7 +805,7 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
JSONArray array2 = json.getJSONArray("data2");
JSONArray array3 = json.getJSONArray("data3");
if (array.size() != 0 && array3.size() != 0) {
throw new RuntimeException("只能选择一个终点");
throw new RuntimeException(LangProcess.msg("an_endpoint"));
}
for (int i = 0; i < array2.size(); i++) {
@@ -1515,10 +1515,10 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
// 如果point_device为货架则不包含列层信息需要重新拼接
if (StrUtil.equals("storage", start_device)) {
if (StrUtil.isEmpty(task.getFrom_x())) {
throw new BadRequestException("货位信息起点需要包含列信息");
throw new BadRequestException(LangProcess.msg("start_point_column"));
}
if (StrUtil.isEmpty(task.getFrom_y())) {
throw new BadRequestException("货位信息起点需要包含层信息");
throw new BadRequestException(LangProcess.msg("start_point_layer"));
}
if (Integer.parseInt(task.getFrom_y()) < 10 && task.getFrom_y().length() == 1) {
from_y = "0" + task.getFrom_y();
@@ -1578,10 +1578,10 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
.name();
if (StrUtil.equals("storage", next_device)) {
if (StrUtil.isEmpty(task.getTo_x())) {
throw new BadRequestException("货位信息终点需要包含列信息");
throw new BadRequestException(LangProcess.msg("endpoint_column"));
}
if (StrUtil.isEmpty(task.getTo_y())) {
throw new BadRequestException("货位信息终点需要包含层信息");
throw new BadRequestException(LangProcess.msg("endpoint_layer"));
}
if (Integer.parseInt(task.getTo_y()) < 10 && task.getTo_y().length() == 1) {
to_y = "0" + task.getTo_y();

View File

@@ -73,7 +73,8 @@ public class CreateDDJInst {
RouteLineDto routeLineDto = (RouteLineDto) list.get(0);
String[] path = routeLineDto.getPath().split("->");
List<String> pathlist = Arrays.asList(path);
if (pathlist.size() < 3 || pathlist.get(1).equals(DeviceType.stacker.name())) {
String deviceType = appService.findDeviceByCode(pathlist.get(1)).getDevice_type();
if (pathlist.size() < 3 || (!deviceType.equals(DeviceType.stacker.name()))) {
return;
}
Device deviceByCode = appService.findDeviceByCode(pathlist.get(1));
@@ -128,6 +129,46 @@ public class CreateDDJInst {
String start_height = taskDto.getStart_height();
String next_height = taskDto.getNext_height();
/**
* 开始平均分配
*/
String this_coevice_code = taskserver.queryAssignedByDevice(start_device_code, next_device_code);
if (StrUtil.isEmpty(this_coevice_code)) {
List<RouteLineDto> shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code);
RouteLineDto routeLineDto1 = shortPathsList.get(0);
String path1 = routeLineDto1.getPath();
String type1 = routeLineDto1.getType();
String[] str = path1.split("->");
List<String> pathlist1 = Arrays.asList(str);
int index = 0;
for (int m = 0; m < pathlist1.size(); m++) {
String deviceType1 = appService.findDeviceByCode(pathlist1.get(m)).getDevice_type();
if(deviceType1.equals(DeviceType.stacker.name())){
index = m + 1;
break;
}
/*if (pathlist1.get(m).equals(start_device_code)) {
}*/
}
next_device_code = pathlist1.get(index);
} else {
next_device_code = this_coevice_code;
}
//校验路由关系
List<RouteLineDto> shortPathsList = routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code);
if (ObjectUtils.isEmpty(shortPathsList) || shortPathsList.size()<1) {
throw new RuntimeException("路由不通!");
}
// Device startdevice = appService.findDeviceByCode(start_device_code);
// Device nextdevice = appService.findDeviceByCode(next_device_code);
if (StrUtil.equals(appService.findDeviceTypeByCode(next_device_code), "storage")) {
next_point_code = next_device_code + "-" + taskDto.getTo_y() + "-" + taskDto.getTo_z();
} else {
next_point_code = next_device_code;
}
//单台堆垛机最多只能创建固定数量指令
Instruction instruction = new Instruction();
instruction.setInstruction_status("1");
@@ -234,7 +275,7 @@ public class CreateDDJInst {
String[] path1 = routeLineDto1.getPath().split("->");
List<String> pathlist1 = Arrays.asList(path1);
if (pathlist1.size() < 3 || pathlist1.get(1).equals(DeviceType.stacker.name())) {
return;
//return;
}
if (pathlist1.get(1).equals(pathlist.get(1))) {
max++;

View File

@@ -3,3 +3,12 @@ task_insHas=指令已存在
task_insRun=有指令未完成
task_isNull={0}查询信息不存在
starting_point_isNull=请选择起点
endpoint_layer=货位信息终点需要包含层信息
endpoint_column=货位信息终点需要包含列信息
start_point_layer=货位信息起点需要包含层信息
start_point_column=货位信息起点需要包含列信息
an_endpoint=只能选择一个终点
material_information=请填写物料信息

View File

@@ -3,3 +3,9 @@ task_insHas=Instruction already exists
task_insRun=There are instructions that are not completed
task_isNull={0}query is null
starting_point_isNull = Please select starting point
endpoint_layer=The destination of the storage location information needs to include the floor information
endpoint_column=The location information endpoint needs to contain column information
start_point_layer=The starting point of the storage location information needs to include the floor information
start_point_column=The starting point of the storage location information needs to contain column information
an_endpoint=Only one endpoint can be selected
material_information=Please fill in the material information!

View File

@@ -3,3 +3,9 @@ task_insHas=Instruksi sudah ada
task_insRun=Ada instruksi yang belum selesai
task_isNull={0}Pertanyaan Tidak ada
starting_point_isNull = Silakan pilih titik awal
endpoint_layer=Tujuan informasi lokasi penyimpanan perlu mencakup informasi lantai.
endpoint_column=Tujuan informasi lokasi penyimpanan perlu mencakup informasi kolom.
start_point_layer=Titik awal perlu mencakup informasi lantai.
start_point_column=Titik awal perlu mencakup informasi kolom.
an_endpoint=Hanya satu tujuan yang dapat dipilih.
material_information=Silakan isi informasi material!

View File

@@ -2,3 +2,10 @@ task_checkExist={0}任务已存在
task_insHas=指令已存在
task_insRun=有指令未完成
task_isNull={0}查询信息不存在
starting_point_isNull=请选择起点
endpoint_layer=货位信息终点需要包含层信息
endpoint_column=货位信息终点需要包含列信息
start_point_layer=货位信息起点需要包含层信息
start_point_column=货位信息起点需要包含列信息
an_endpoint=只能选择一个终点
material_information=请填写物料信息