rev:控制逻辑
This commit is contained in:
@@ -22,7 +22,6 @@ import org.nl.acs.device.driver.conveyor.strip_conveyor.StripConveyorDeviceDrive
|
||||
import org.nl.acs.device.driver.storage.standard_storage.StandardStorageDeviceDriver;
|
||||
import org.nl.acs.ext.UnifiedResponse;
|
||||
import org.nl.acs.ext.hk.service.AcsToHkService;
|
||||
import org.nl.acs.ext.hk.service.data.BaseReq;
|
||||
import org.nl.acs.ext.hk.service.data.BoxApplyPassReq;
|
||||
import org.nl.acs.ext.socket.Online;
|
||||
import org.nl.acs.ext.wms.data.req.CommonRequest;
|
||||
@@ -46,8 +45,6 @@ import org.nl.config.lucene.service.LuceneExecuteLogService;
|
||||
import org.nl.config.lucene.service.dto.LuceneLogDto;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -276,7 +273,7 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
String notifyValue = Optional.ofNullable(sysParamService.findByCode("is_notify"))
|
||||
.map(notify -> notify.getValue())
|
||||
.orElse("0");
|
||||
if (notifyValue.equals("1")){
|
||||
if (notifyValue.equals("1")) {
|
||||
JSONObject dataParam = new JSONObject();
|
||||
dataParam.put("msg", "设备" + this.currentDeviceCode + "报警, 报警信息: " + ErrorEnum.getLabel(this.error));
|
||||
CommonRequest<JSONObject> requestParam = CommonRequest.<JSONObject>builder()
|
||||
@@ -315,6 +312,19 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
.build();
|
||||
UnifiedResponse<JSONObject> response = acsToWmsService.apply(request);
|
||||
if (!response.isSuccess()) {
|
||||
String notifyValue = Optional.ofNullable(sysParamService.findByCode("is_notify"))
|
||||
.map(notify -> notify.getValue())
|
||||
.orElse("0");
|
||||
if (notifyValue.equals("1")) {
|
||||
JSONObject dataParam = new JSONObject();
|
||||
dataParam.put("msg", "反馈拣选工位启停状态失败!请求参数: " + request + "响应信息: " + response.getMessage());
|
||||
CommonRequest<JSONObject> requestParam = CommonRequest.<JSONObject>builder()
|
||||
.service("ErrorInfo")
|
||||
.type("1")
|
||||
.data(dataParam)
|
||||
.build();
|
||||
acsToWmsService.apply(requestParam);
|
||||
}
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "反馈拣选工位启停状态失败, 原因:" + response.getMessage()));
|
||||
}
|
||||
}
|
||||
@@ -341,9 +351,6 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
.taskCode(this.reqTakeInstCode)
|
||||
.type("1")
|
||||
.build();
|
||||
// BaseReq<BoxApplyPassReq> req = BaseReq.<BoxApplyPassReq>builder()
|
||||
// .data(bapReq)
|
||||
// .build();
|
||||
UnifiedResponse<String> unifiedResponse = acsToHkService.boxApplyPass(bapReq, String.class);
|
||||
if (unifiedResponse.isSuccess()) {
|
||||
this.reqTakeRequireSuccess = false;
|
||||
@@ -360,9 +367,6 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
.taskCode(this.reqPutInstCode)
|
||||
.type("2")
|
||||
.build();
|
||||
// BaseReq<BoxApplyPassReq> req = BaseReq.<BoxApplyPassReq>builder()
|
||||
// .data(bapReq)
|
||||
// .build();
|
||||
UnifiedResponse<String> unifiedResponse = acsToHkService.boxApplyPass(bapReq, String.class);
|
||||
if (unifiedResponse.isSuccess()) {
|
||||
this.reqPutRequireSuccess = false;
|
||||
@@ -455,6 +459,23 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
this.writing("toHeight", type);
|
||||
this.writing("toCommand", this.mode);
|
||||
this.requireSuccess = true;
|
||||
} else {
|
||||
if (isErrorTimeValid(currentTimeMillis)) {
|
||||
this.errorRequireTime = currentTimeMillis;
|
||||
String notifyValue = Optional.ofNullable(sysParamService.findByCode("is_notify"))
|
||||
.map(notify -> notify.getValue())
|
||||
.orElse("0");
|
||||
if (notifyValue.equals("1")) {
|
||||
JSONObject dataParam = new JSONObject();
|
||||
dataParam.put("msg", "申请载具类型高度失败! 请求参数: " + request + "响应信息: " + response.getMessage());
|
||||
CommonRequest<JSONObject> requestParam = CommonRequest.<JSONObject>builder()
|
||||
.service("ErrorInfo")
|
||||
.type("1")
|
||||
.data(dataParam)
|
||||
.build();
|
||||
acsToWmsService.apply(requestParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -498,7 +519,7 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
String notifyValue = Optional.ofNullable(sysParamService.findByCode("is_notify"))
|
||||
.map(notify -> notify.getValue())
|
||||
.orElse("0");
|
||||
if (notifyValue.equals("1")){
|
||||
if (notifyValue.equals("1")) {
|
||||
JSONObject dataParam = new JSONObject();
|
||||
dataParam.put("msg", "申请任务失败! 请求参数: " + request + "响应信息: " + response.getMessage());
|
||||
CommonRequest<JSONObject> requestParam = CommonRequest.<JSONObject>builder()
|
||||
@@ -540,7 +561,7 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
String notifyValue = Optional.ofNullable(sysParamService.findByCode("is_notify"))
|
||||
.map(notify -> notify.getValue())
|
||||
.orElse("0");
|
||||
if (notifyValue.equals("1")){
|
||||
if (notifyValue.equals("1")) {
|
||||
JSONObject dataParam = new JSONObject();
|
||||
dataParam.put("msg", "申请任务失败! 请求参数: " + request + "响应信息: " + response.getMessage());
|
||||
CommonRequest<JSONObject> requestParam = CommonRequest.<JSONObject>builder()
|
||||
@@ -773,7 +794,6 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
AppearanceInspectionScannerConveyorDeviceDriver appearanceInspectionScannerConveyorDeviceDriver = (AppearanceInspectionScannerConveyorDeviceDriver) cacheDevice.getDeviceDriver();
|
||||
checkoutStartDeviceCode = appearanceInspectionScannerConveyorDeviceDriver.getExtraDeviceCodes("checkoutStartDeviceCode");
|
||||
}
|
||||
List<TaskDto> taskDtos = taskService.findReadyTasksByNextDeviceCode(deviceCode, checkoutStartDeviceCode);
|
||||
TaskDto taskDto = taskService.findReadyTaskByNextDeviceCode(deviceCode, checkoutStartDeviceCode);
|
||||
Instruction instDto = instructionService.findReadyInstByEnd(deviceCode);
|
||||
if (ObjectUtil.isNotEmpty(taskDto) && ObjectUtil.isEmpty(instDto)) {
|
||||
@@ -789,8 +809,10 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
return;
|
||||
}
|
||||
DeviceAssignedDto assignedDto = null;
|
||||
//如果有多个对路由信息
|
||||
if (assignedDtos.size() > 1) {
|
||||
Map<Integer, List<DeviceAssignedDto>> tempAss = new HashMap<>();
|
||||
//遍历路由信息
|
||||
for (int i = 0; i < assignedDtos.size(); i++) {
|
||||
DeviceAssignedDto deviceAssignedDto = assignedDtos.get(i);
|
||||
String inst_nextDevice_code = deviceAssignedDto.getInst_nextDevice_code();
|
||||
@@ -802,64 +824,12 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
}
|
||||
deviceAssignedDtos.add(deviceAssignedDto);
|
||||
}
|
||||
Integer from_y = Integer.parseInt(taskDto.getFrom_y());
|
||||
if (bindTaskCode.contains(taskDto.getTask_code())) {
|
||||
for (DeviceAssignedDto dto : assignedDtos) {
|
||||
String inst_nextDevice_code = dto.getInst_nextDevice_code();
|
||||
Device inst_nextDevice = deviceAppService.findDeviceByCode(inst_nextDevice_code);
|
||||
if (inst_nextDevice != null) {
|
||||
Boolean isFront = Optional.ofNullable(inst_nextDevice.getExtraValue().get("isFront")).map(Object::toString).map(Boolean::parseBoolean).orElse(false);
|
||||
if (from_y % 4 == 1 || from_y % 4 == 2) {
|
||||
//分配后叉
|
||||
if (!isFront) {
|
||||
assignedDto = dto;
|
||||
break;
|
||||
}
|
||||
} else if (from_y % 4 == 3 || from_y % 4 == 0) {
|
||||
//分配前叉
|
||||
if (isFront) {
|
||||
assignedDto = dto;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
TaskDto bindTaskDto = this.isBind(taskDtos, taskDto, taskDto.getTask_code());
|
||||
if (bindTaskDto != null) {
|
||||
bindTaskCode.add(bindTaskDto.getTask_code());
|
||||
for (DeviceAssignedDto dto : assignedDtos) {
|
||||
String inst_nextDevice_code = dto.getInst_nextDevice_code();
|
||||
Device inst_nextDevice = deviceAppService.findDeviceByCode(inst_nextDevice_code);
|
||||
if (inst_nextDevice != null) {
|
||||
Boolean isFront = Optional.ofNullable(inst_nextDevice.getExtraValue().get("isFront")).map(Object::toString).map(Boolean::parseBoolean).orElse(false);
|
||||
if (from_y % 4 == 1 || from_y % 4 == 2) {
|
||||
//分配后叉
|
||||
if (!isFront) {
|
||||
assignedDto = dto;
|
||||
break;
|
||||
}
|
||||
} else if (from_y % 4 == 3 || from_y % 4 == 0) {
|
||||
//分配前叉
|
||||
if (isFront) {
|
||||
assignedDto = dto;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Set<Integer> keys = tempAss.keySet();
|
||||
Integer minKey = Collections.min(keys);
|
||||
Integer maxKey = Collections.max(keys);
|
||||
List<DeviceAssignedDto> minList = tempAss.get(minKey);
|
||||
List<DeviceAssignedDto> maxList = tempAss.get(maxKey);
|
||||
if (minList.size() == maxList.size()) {
|
||||
|
||||
}
|
||||
assignedDto = minList.get(0);
|
||||
}
|
||||
}
|
||||
Set<Integer> keys = tempAss.keySet();
|
||||
Integer minKey = Collections.min(keys);
|
||||
Integer maxKey = Collections.max(keys);
|
||||
List<DeviceAssignedDto> minList = tempAss.get(minKey);
|
||||
//List<DeviceAssignedDto> maxList = tempAss.get(maxKey);
|
||||
assignedDto = minList.get(0);
|
||||
} else {
|
||||
assignedDto = assignedDtos.get(0);
|
||||
}
|
||||
@@ -975,32 +945,6 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
}
|
||||
}
|
||||
|
||||
private TaskDto isBind(List<TaskDto> taskDtos, TaskDto link_task, String task_code) {
|
||||
String from_x = link_task.getFrom_x();
|
||||
String from_y = link_task.getFrom_y();
|
||||
String from_z = link_task.getFrom_z();
|
||||
return taskDtos.stream()
|
||||
.filter(taskDto -> !taskDto.getTask_code().equals(task_code))
|
||||
.filter(taskDto -> taskDto.getTask_status().equals(TaskStatusEnum.READY.getIndex()))
|
||||
.filter(taskDto -> taskDto.getFrom_x().equals(from_x) && taskDto.getFrom_z().equals(from_z))
|
||||
.filter(taskDto -> {
|
||||
int frontFromY = Integer.parseInt(from_y);
|
||||
int taskDtoFromY = Integer.parseInt(taskDto.getFrom_y());
|
||||
int frontGroup = (frontFromY - 1) / 4;
|
||||
int taskDtoGroup = (taskDtoFromY - 1) / 4;
|
||||
if (frontGroup != taskDtoGroup) {
|
||||
return false;
|
||||
}
|
||||
int frontMod = frontFromY % 4;
|
||||
int taskDtoMod = taskDtoFromY % 4;
|
||||
return (frontMod + taskDtoMod == 2 || frontMod + taskDtoMod == 4);
|
||||
})
|
||||
.sorted(Comparator.comparing(TaskDto::getPriority)
|
||||
.thenComparing(taskDto -> LocalDateTime.parse(taskDto.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 下发输送线指令
|
||||
*/
|
||||
@@ -1017,14 +961,8 @@ public class AppearanceInspectionScannerConveyorDeviceDriver extends AbstractOpc
|
||||
if (next_device != null && next_device.getDeviceDriver() instanceof AppearanceInspectionScannerConveyorDeviceDriver) {
|
||||
List<String> targetDeviceCode = this.getExtraDeviceCodes("targetDeviceCode");
|
||||
if (targetDeviceCode != null && targetDeviceCode.contains(next_device_code)) {
|
||||
// if (StrUtil.equals(String.valueOf(this.task), inst.getInstruction_code())) {
|
||||
// this.writing(Arrays.asList(ItemProtocol.TO_COMMAND.getKey()), Arrays.asList(CommandEnum.COMMAND_1.getValue()));
|
||||
// this.requireSuccess = true;
|
||||
// } else {
|
||||
Integer address = Optional.ofNullable(next_device.getExtraValue().get("address")).map(Object::toString).map(Integer::parseInt).orElse(0);
|
||||
this.writing(Arrays.asList(ItemProtocol.TO_TASK.getKey(), ItemProtocol.TO_TARGET.getKey()), Arrays.asList(inst.getInstruction_code(), address));
|
||||
//this.writing(Arrays.asList(ItemProtocol.TO_TARGET.getKey()), Arrays.asList(address));
|
||||
// }
|
||||
this.requireSuccess = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.util.concurrent.Uninterruptibles;
|
||||
import lombok.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.nl.acs.device.device.domain.Device;
|
||||
import org.nl.acs.device.device.service.DeviceAppService;
|
||||
import org.nl.acs.device.driver.*;
|
||||
@@ -45,9 +46,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description 1、适用于单/双堆垛机;
|
||||
* 2、默认优先执行移库任务;
|
||||
* 3、其次按照堆垛机设置的策略(入库优先(含拣选出库)策略、出库优先策略、时间顺序策略、一进一出策略)执行;
|
||||
* 4、除移库任务是从任务列表中查找,其余任务都是从指令列表中查找就绪状态下的信息
|
||||
* 2、默认优先执行移库任务,其次执行换层任务,再按照堆垛机所在位置执行一进一出的出入库任务;
|
||||
* @Author Gengby
|
||||
* @Date 2024/6/26
|
||||
*/
|
||||
@@ -360,6 +359,16 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
private List<Integer> HAS_GOODS = Arrays.asList(2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31);
|
||||
|
||||
|
||||
/**
|
||||
* 任务申请失败通知时间
|
||||
*/
|
||||
private long errorRequireTime = System.currentTimeMillis();
|
||||
|
||||
/**
|
||||
* 任务申请失败请求间隔时间
|
||||
*/
|
||||
private long errorRequireTimeOut = 60000L;
|
||||
|
||||
private Map<String, Map<String, List<String>>> createFloorMappingPoint() {
|
||||
List<JSONObject> floorPoint = this.getExtraListValue("floorPoint");
|
||||
Map<String, Map<String, List<String>>> floorMappingPoint = new HashMap<>();
|
||||
@@ -506,7 +515,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
String notifyValue = Optional.ofNullable(sysParamService.findByCode("is_notify"))
|
||||
.map(notify -> notify.getValue())
|
||||
.orElse("0");
|
||||
if (notifyValue.equals("1")){
|
||||
if (notifyValue.equals("1")) {
|
||||
JSONObject dataParam = new JSONObject();
|
||||
dataParam.put("msg", "设备" + this.currentDeviceCode + "报警, 报警信息: 前叉 " + ErrorEnum.getDesc(this.front_Zerror) + ", 后叉 " + ErrorEnum.getDesc(this.back_Zerror));
|
||||
CommonRequest<JSONObject> requestParam = CommonRequest.<JSONObject>builder()
|
||||
@@ -537,11 +546,13 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
if (this.back_command != this.lastBack_command || this.front_command != this.lastFront_command) {
|
||||
this.requireSuccess = false;
|
||||
}
|
||||
|
||||
if (this.front_Zerror != this.lastFront_Zerror || this.back_Zerror != this.lastBack_Zerror) {
|
||||
if (AGAIN_ERROR.contains(this.front_Zerror) || AGAIN_ERROR.contains(this.back_Zerror)) {
|
||||
this.againRequireSuccess = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.front_Zerror == ErrorEnum.MR.getCode()) {
|
||||
if (!this.againRequireSuccess) {
|
||||
this.mR(this.front_task, ForkTypeEnum.FRONT.getCode());
|
||||
@@ -551,6 +562,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
this.mR(this.back_task, ForkTypeEnum.BACK.getCode());
|
||||
}
|
||||
}
|
||||
|
||||
if (this.front_Zerror == ErrorEnum.KC.getCode() && this.back_Zerror == ErrorEnum.KC.getCode()) {
|
||||
if (!this.againRequireSuccess) {
|
||||
this.kC(this.front_task);
|
||||
@@ -573,6 +585,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.front_Zerror == ErrorEnum.ZD.getCode() && this.back_Zerror == ErrorEnum.ZD.getCode()
|
||||
&& NO_HAS_GOODS.contains(this.front_forkCargo) && NO_HAS_GOODS.contains(this.back_forkCargo)
|
||||
) {
|
||||
@@ -686,52 +699,8 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
}
|
||||
//出库
|
||||
else if (instanceStorage(back_start_device) && instanceAppearance(back_next_device)) {
|
||||
String getLinkDeviceCode = this.handExtraStringValue(back_next_device, "getLinkDeviceCode");
|
||||
String frontNoY = this.handExtraStringValue(this.getDevice(), "frontNoY");
|
||||
if (ObjectUtil.isEmpty(frontInst)) {
|
||||
frontInst = instructionService.findReadyInstByLinkDeviceCodeAndNextDeviceCode(getLinkDeviceCode, frontNoY, getFrontDeviceCodeList);
|
||||
if (ObjectUtil.isNotEmpty(frontInst)) {
|
||||
String qPoint = getZdPoint(frontInst.getStart_point_code());
|
||||
TaskDto taskDto = taskService.findByStartPointCode(qPoint);
|
||||
if (ObjectUtil.isNotEmpty(taskDto)) {
|
||||
String task_start_device_code = taskDto.getStart_device_code();
|
||||
String task_next_device_code = taskDto.getNext_device_code();
|
||||
Device task_start_device = deviceAppService.findDeviceByCode(task_start_device_code);
|
||||
Device task_next_devcice = deviceAppService.findDeviceByCode(task_next_device_code);
|
||||
if (task_start_device != null && task_next_devcice != null && instanceStorage(task_start_device) && instanceStorage(task_next_devcice)) {
|
||||
Instruction instruction = instructionService.findByTaskCodeFromCache(taskDto.getTask_code());
|
||||
if (ObjectUtil.isEmpty(instruction)) {
|
||||
frontInst = new Instruction();
|
||||
setInstruction(frontInst, taskDto);
|
||||
try {
|
||||
instructionService.create(frontInst);
|
||||
taskDto.setTask_status(TaskStatusEnum.BUSY.getIndex());
|
||||
taskService.update(taskDto);
|
||||
} catch (Exception e) {
|
||||
this.unExecutedMessage = "后叉出库任务,取货完成后,创建前叉移库指令时出现异常,原因:" + e.getMessage();
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "后叉出库任务,取货完成后,创建前叉移库指令时出现异常,原因:" + e.getMessage()));
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "创建指令失败, 原因:" + e.getMessage()));
|
||||
this.sendPutInfoToPlc(null, backInst);
|
||||
return;
|
||||
}
|
||||
this.frontWrite(frontInst);
|
||||
} else {
|
||||
if (StrUtil.equals(instruction.getInstruction_status(), InstructionStatusEnum.READY.getIndex())) {
|
||||
this.frontWrite(instruction);
|
||||
} else {
|
||||
this.sendPutInfoToPlc(null, backInst);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.sendPutInfoToPlc(null, backInst);
|
||||
}
|
||||
} else {
|
||||
this.frontWrite(frontInst);
|
||||
}
|
||||
} else {
|
||||
this.sendPutInfoToPlc(null, backInst);
|
||||
}
|
||||
}
|
||||
//前叉有货,后叉无货,后叉取货完成
|
||||
this.backGetFinish(back_next_device, frontInst, backInst, getFrontDeviceCodeList);
|
||||
this.requireSuccess = true;
|
||||
} else {
|
||||
this.sendPutInfoToPlc(frontInst, backInst);
|
||||
@@ -773,52 +742,8 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
}
|
||||
//出库
|
||||
else if (instanceStorage(front_start_device) && instanceAppearance(front_next_device)) {
|
||||
String getLinkDeviceCode = this.handExtraStringValue(front_next_device, "getLinkDeviceCode");
|
||||
String backNoY = this.handExtraStringValue(this.getDevice(), "backNoY");
|
||||
if (ObjectUtil.isEmpty(backInst)) {
|
||||
backInst = instructionService.findReadyInstByLinkDeviceCodeAndNextDeviceCode(getLinkDeviceCode, backNoY, getBackDeviceCodeList);
|
||||
if (ObjectUtil.isNotEmpty(backInst)) {
|
||||
String qPoint = getZdPoint(backInst.getStart_point_code());
|
||||
TaskDto taskDto = taskService.findByStartPointCode(qPoint);
|
||||
if (ObjectUtil.isNotEmpty(taskDto)) {
|
||||
String task_start_device_code = taskDto.getStart_device_code();
|
||||
String task_next_device_code = taskDto.getNext_device_code();
|
||||
Device task_start_device = deviceAppService.findDeviceByCode(task_start_device_code);
|
||||
Device task_next_devcice = deviceAppService.findDeviceByCode(task_next_device_code);
|
||||
if (task_start_device != null && task_next_devcice != null && instanceStorage(task_start_device) && instanceStorage(task_next_devcice)) {
|
||||
Instruction instruction = instructionService.findByTaskCodeFromCache(taskDto.getTask_code());
|
||||
if (ObjectUtil.isEmpty(instruction)) {
|
||||
backInst = new Instruction();
|
||||
setInstruction(backInst, taskDto);
|
||||
try {
|
||||
instructionService.create(backInst);
|
||||
taskDto.setTask_status(TaskStatusEnum.BUSY.getIndex());
|
||||
taskService.update(taskDto);
|
||||
} catch (Exception e) {
|
||||
this.unExecutedMessage = "前叉出库任务,取货完成后,创建后叉移库指令时出现异常,原因:" + e.getMessage();
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "前叉出库任务,取货完成后,创建后叉移库指令时出现异常,原因:" + e.getMessage()));
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "创建指令失败, 原因:" + e.getMessage()));
|
||||
this.sendPutInfoToPlc(frontInst, null);
|
||||
return;
|
||||
}
|
||||
this.backWrite(backInst);
|
||||
} else {
|
||||
if (StrUtil.equals(instruction.getInstruction_status(), InstructionStatusEnum.READY.getIndex())) {
|
||||
this.backWrite(instruction);
|
||||
} else {
|
||||
this.sendPutInfoToPlc(frontInst, null);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.sendPutInfoToPlc(frontInst, null);
|
||||
}
|
||||
} else {
|
||||
this.backWrite(backInst);
|
||||
}
|
||||
} else {
|
||||
this.sendPutInfoToPlc(frontInst, null);
|
||||
}
|
||||
}
|
||||
//前叉有货,后叉无货,前叉取货完成
|
||||
this.frontGetFinish(front_next_device, frontInst, backInst, getBackDeviceCodeList);
|
||||
this.requireSuccess = true;
|
||||
} else {
|
||||
this.sendPutInfoToPlc(frontInst, backInst);
|
||||
@@ -878,60 +803,8 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
}
|
||||
//出库
|
||||
else if (instanceStorage(front_start_device) && instanceAppearance(front_next_device)) {
|
||||
String getLinkDeviceCode = this.handExtraStringValue(front_next_device, "getLinkDeviceCode");
|
||||
String backNoY = this.handExtraStringValue(this.getDevice(), "backNoY");
|
||||
if (ObjectUtil.isEmpty(backInst)) {
|
||||
backInst = instructionService.findShallowReadyInstByLinkDeviceCodeAndNextDeviceCode(getLinkDeviceCode, backNoY, getBackDeviceCodeList);
|
||||
if (ObjectUtil.isNotEmpty(backInst)) {
|
||||
this.backWrite(backInst);
|
||||
} else {
|
||||
backInst = instructionService.findDeepReadyInstByLinkDeviceCodeAndNextDeviceCode(getLinkDeviceCode, backNoY, getBackDeviceCodeList);
|
||||
if (ObjectUtil.isNotEmpty(backInst)) {
|
||||
String qPoint = getZdPoint(backInst.getStart_point_code());
|
||||
TaskDto taskDto = taskService.findByStartPointCode(qPoint);
|
||||
if (ObjectUtil.isNotEmpty(taskDto)) {
|
||||
String task_start_device_code = taskDto.getStart_device_code();
|
||||
String task_next_device_code = taskDto.getNext_device_code();
|
||||
Device task_start_device = deviceAppService.findDeviceByCode(task_start_device_code);
|
||||
Device task_next_devcice = deviceAppService.findDeviceByCode(task_next_device_code);
|
||||
if (task_start_device != null && task_next_devcice != null && instanceStorage(task_start_device) && instanceStorage(task_next_devcice)) {
|
||||
Instruction instruction = instructionService.findByTaskCodeFromCache(taskDto.getTask_code());
|
||||
if (ObjectUtil.isEmpty(instruction)) {
|
||||
backInst = new Instruction();
|
||||
setInstruction(backInst, taskDto);
|
||||
try {
|
||||
instructionService.create(backInst);
|
||||
taskDto.setTask_status(TaskStatusEnum.BUSY.getIndex());
|
||||
taskService.update(taskDto);
|
||||
} catch (Exception e) {
|
||||
this.unExecutedMessage = "前叉出库任务,取货完成后,创建后叉移库指令时出现异常,原因:" + e.getMessage();
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "前叉出库任务,取货完成后,创建后叉移库指令时出现异常,原因:" + e.getMessage()));
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "创建指令失败, 原因:" + e.getMessage()));
|
||||
this.sendPutInfoToPlc(frontInst, null);
|
||||
return;
|
||||
}
|
||||
this.backWrite(backInst);
|
||||
} else {
|
||||
if (StrUtil.equals(instruction.getInstruction_status(), InstructionStatusEnum.READY.getIndex())) {
|
||||
this.backWrite(instruction);
|
||||
} else {
|
||||
this.sendPutInfoToPlc(frontInst, null);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.sendPutInfoToPlc(frontInst, null);
|
||||
}
|
||||
} else {
|
||||
this.backWrite(backInst);
|
||||
}
|
||||
} else {
|
||||
//下发前叉放货信息
|
||||
this.sendPutInfoToPlc(frontInst, backInst);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.sendPutInfoToPlc(frontInst, backInst);
|
||||
}
|
||||
//前叉取货完成
|
||||
this.frontGetFinish(front_next_device, frontInst, backInst, getBackDeviceCodeList);
|
||||
} else if (instanceAppearance(front_start_device) && instanceAppearance(front_next_device)) {
|
||||
if (ObjectUtil.isEmpty(backInst)) {
|
||||
// List<String> getBackDeviceCodeList = this.getExtraDeviceCodes("backDeviceCodeList");
|
||||
@@ -992,60 +865,8 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
}
|
||||
//出库
|
||||
else if (instanceStorage(back_start_device) && instanceAppearance(back_next_device)) {
|
||||
String getLinkDeviceCode = this.handExtraStringValue(back_next_device, "getLinkDeviceCode");
|
||||
String frontNoY = this.handExtraStringValue(this.getDevice(), "frontNoY");
|
||||
if (ObjectUtil.isEmpty(frontInst)) {
|
||||
frontInst = instructionService.findShallowReadyInstByLinkDeviceCodeAndNextDeviceCode(getLinkDeviceCode, frontNoY, getFrontDeviceCodeList);
|
||||
if (ObjectUtil.isNotEmpty(frontInst)) {
|
||||
this.frontWrite(frontInst);
|
||||
} else {
|
||||
frontInst = instructionService.findDeepReadyInstByLinkDeviceCodeAndNextDeviceCode(getLinkDeviceCode, frontNoY, getFrontDeviceCodeList);
|
||||
if (ObjectUtil.isNotEmpty(frontInst)) {
|
||||
String qPoint = getZdPoint(frontInst.getStart_point_code());
|
||||
TaskDto taskDto = taskService.findByStartPointCode(qPoint);
|
||||
if (ObjectUtil.isNotEmpty(taskDto)) {
|
||||
String task_start_device_code = taskDto.getStart_device_code();
|
||||
String task_next_device_code = taskDto.getNext_device_code();
|
||||
Device task_start_device = deviceAppService.findDeviceByCode(task_start_device_code);
|
||||
Device task_next_devcice = deviceAppService.findDeviceByCode(task_next_device_code);
|
||||
if (task_start_device != null && task_next_devcice != null && instanceStorage(task_start_device) && instanceStorage(task_next_devcice)) {
|
||||
Instruction instruction = instructionService.findByTaskCodeFromCache(taskDto.getTask_code());
|
||||
if (ObjectUtil.isEmpty(instruction)) {
|
||||
frontInst = new Instruction();
|
||||
setInstruction(frontInst, taskDto);
|
||||
try {
|
||||
instructionService.create(frontInst);
|
||||
taskDto.setTask_status(TaskStatusEnum.BUSY.getIndex());
|
||||
taskService.update(taskDto);
|
||||
} catch (Exception e) {
|
||||
this.unExecutedMessage = "后叉出库任务,取货完成后,创建前叉移库指令时出现异常,原因:" + e.getMessage();
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "后叉出库任务,取货完成后,创建前叉移库指令时出现异常,原因:" + e.getMessage()));
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "创建指令失败, 原因:" + e.getMessage()));
|
||||
this.sendPutInfoToPlc(null, backInst);
|
||||
return;
|
||||
}
|
||||
this.frontWrite(frontInst);
|
||||
} else {
|
||||
if (StrUtil.equals(instruction.getInstruction_status(), InstructionStatusEnum.READY.getIndex())) {
|
||||
this.frontWrite(instruction);
|
||||
} else {
|
||||
this.sendPutInfoToPlc(null, backInst);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.sendPutInfoToPlc(null, backInst);
|
||||
}
|
||||
} else {
|
||||
this.frontWrite(frontInst);
|
||||
}
|
||||
} else {
|
||||
//下发前叉放货信息
|
||||
this.sendPutInfoToPlc(frontInst, backInst);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.sendPutInfoToPlc(frontInst, backInst);
|
||||
}
|
||||
//后叉取货完成
|
||||
this.backGetFinish(back_next_device, frontInst, backInst, getFrontDeviceCodeList);
|
||||
} else if (instanceAppearance(back_start_device) && instanceAppearance(back_next_device)) {
|
||||
if (ObjectUtil.isEmpty(frontInst)) {
|
||||
//List<String> getFrontDeviceCodeList = this.getExtraDeviceCodes("frontDeviceCodeList");
|
||||
@@ -1079,9 +900,8 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
this.clearInfoToPlc();
|
||||
} else if (this.lastFront_command != CommandEnum.UNLOAD.getStatus() && this.front_command != CommandEnum.STANDY.getStatus()) {
|
||||
this.clearInfoToPlc();
|
||||
} else {
|
||||
this.requireSuccess = true;
|
||||
}
|
||||
this.requireSuccess = true;
|
||||
}
|
||||
//请求卸货
|
||||
else if (mode == ModeEnum.MODE_3.getNum() && this.isUnload() && !requireSuccess) {
|
||||
@@ -1274,18 +1094,9 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
} else {
|
||||
String strategyValue = Optional.ofNullable(this.getExtraValue().get("strategyValue")).map(Object::toString).orElse("");
|
||||
switch (strategyValue) {
|
||||
case "2":
|
||||
this.applyOutTask();
|
||||
break;
|
||||
case "3":
|
||||
this.applyTaskByTime();
|
||||
break;
|
||||
case "4":
|
||||
this.applyTaskOneInOneOut();
|
||||
break;
|
||||
default:
|
||||
this.applyInTask();
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -1304,7 +1115,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
|
||||
|
||||
/**
|
||||
* 拣选出库
|
||||
* 堆垛机换层任务
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@@ -1360,230 +1171,6 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 入库
|
||||
*/
|
||||
private void applyInTask() {
|
||||
boolean flag = this.applySpecialTask();
|
||||
if (flag) {
|
||||
this.unExecutedMessage = null;
|
||||
return;
|
||||
}
|
||||
if (!prohibitInWarehouse) {
|
||||
List<String> getFrontDeviceCodeList = this.getExtraDeviceCodes("frontDeviceCodeList");
|
||||
String frontNoY = this.handExtraStringValue(this.getDevice(), "frontNoY");
|
||||
List<String> getBackDeviceCodeList = this.getExtraDeviceCodes("backDeviceCodeList");
|
||||
String backNoY = this.handExtraStringValue(this.getDevice(), "backNoY");
|
||||
List<Instruction> frontInsts = instructionService.findReadyInstByStartDeviceCode(getFrontDeviceCodeList, frontNoY);
|
||||
Instruction frontInst = null;
|
||||
Instruction backInst = null;
|
||||
Device front_start_device = null;
|
||||
Device back_start_device = null;
|
||||
if (CollectionUtil.isNotEmpty(frontInsts)) {
|
||||
frontInst = frontInsts.get(0);
|
||||
if (ObjectUtil.isNotEmpty(frontInst)) {
|
||||
String front_start_device_code = frontInst.getStart_device_code();
|
||||
front_start_device = deviceAppService.findDeviceByCode(front_start_device_code);
|
||||
if (front_start_device != null) {
|
||||
String getLinkDeviceCode = this.handExtraStringValue(front_start_device, "getLinkDeviceCode");
|
||||
backInst = instructionService.findReadyInstByLinkDeviceCodeAndStartDeviceCode(getLinkDeviceCode, backNoY, getBackDeviceCodeList);
|
||||
if (ObjectUtil.isEmpty(backInst)) {
|
||||
Instruction inst = instructionService.findBusyInstByNextDeviceCode(getLinkDeviceCode);
|
||||
if (ObjectUtil.isNotEmpty(inst)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (this.stackerNum == 2) {
|
||||
List<Instruction> backInsts = instructionService.findReadyInstByStartDeviceCode(getBackDeviceCodeList, backNoY);
|
||||
if (CollectionUtil.isNotEmpty(backInsts)) {
|
||||
backInst = backInsts.get(0);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(backInst)) {
|
||||
String back_start_device_code = backInst.getStart_device_code();
|
||||
back_start_device = deviceAppService.findDeviceByCode(back_start_device_code);
|
||||
if (back_start_device != null) {
|
||||
String getLinkDeviceCode = this.handExtraStringValue(back_start_device, "getLinkDeviceCode");
|
||||
front_start_device = deviceAppService.findDeviceByCode(getLinkDeviceCode);
|
||||
if (front_start_device != null) {
|
||||
frontInst = instructionService.findReadyInstByLinkDeviceCodeAndStartDeviceCode(getLinkDeviceCode, frontNoY, getFrontDeviceCodeList);
|
||||
if (ObjectUtil.isEmpty(frontInst)) {
|
||||
Instruction inst = instructionService.findBusyInstByNextDeviceCode(getLinkDeviceCode);
|
||||
if (ObjectUtil.isNotEmpty(inst)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(frontInst) && ObjectUtil.isNotEmpty(backInst)) {
|
||||
this.FBWrite(front_start_device, frontInst, backInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
} else if (ObjectUtil.isNotEmpty(frontInst)) {
|
||||
this.frontWrite(front_start_device, frontInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
} else if (ObjectUtil.isNotEmpty(backInst)) {
|
||||
this.backWrite(back_start_device, backInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
} else {
|
||||
String strategyValue = Optional.ofNullable(this.getExtraValue().get("strategyValue")).map(Object::toString).orElse("");
|
||||
if (ObjectUtil.equals(strategyValue, StrategyEnum.IN.getValue())) {
|
||||
this.applyOutTask();
|
||||
} else if (ObjectUtil.equals(strategyValue, StrategyEnum.OUT.getValue()) && !ObjectUtil.equals(strategyValue, StrategyEnum.TIME.getValue())) {
|
||||
this.unExecutedMessage = "堆垛机未查询到就绪状态下可执行的任务或指令信息";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (this.prohibitOutWarehouse) {
|
||||
this.unExecutedMessage = "堆垛机设置为禁止出库、禁止入库";
|
||||
return;
|
||||
}
|
||||
this.applyOutTask();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 出库(含拣选)
|
||||
*/
|
||||
private void applyOutTask() {
|
||||
if (!this.prohibitOutWarehouse) {
|
||||
List<String> getFrontDeviceCodeList = this.getExtraDeviceCodes("frontDeviceCodeList");
|
||||
List<String> getBackDeviceCodeList = this.getExtraDeviceCodes("backDeviceCodeList");
|
||||
String frontNoY = this.handExtraStringValue(this.getDevice(), "frontNoY");
|
||||
String backNoY = this.handExtraStringValue(this.getDevice(), "backNoY");
|
||||
List<Instruction> frontInsts = instructionService.findReadyInstByNextDeviceCode(getFrontDeviceCodeList, frontNoY);
|
||||
Instruction frontInst = null;
|
||||
Instruction backInst = null;
|
||||
if (CollectionUtil.isNotEmpty(frontInsts)) {
|
||||
frontInst = frontInsts.get(0);
|
||||
if (ObjectUtil.isNotEmpty(frontInst) && this.stackerNum == 2) {
|
||||
String front_next_device_code = frontInst.getNext_device_code();
|
||||
Device front_next_device = deviceAppService.findDeviceByCode(front_next_device_code);
|
||||
if (front_next_device != null) {
|
||||
String getLinkDeviceCode = this.handExtraStringValue(front_next_device, "getLinkDeviceCode");
|
||||
backInst = instructionService.findReadyInstByNextDeviceCode(frontInst, getLinkDeviceCode, backNoY);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (this.stackerNum == 2) {
|
||||
List<Instruction> backInsts = instructionService.findReadyInstByNextDeviceCode(getBackDeviceCodeList, backNoY);
|
||||
if (CollectionUtil.isNotEmpty(backInsts)) {
|
||||
backInst = backInsts.get(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(frontInst) && ObjectUtil.isNotEmpty(backInst)) {
|
||||
this.FBWrite(frontInst, backInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
} else if (ObjectUtil.isNotEmpty(frontInst)) {
|
||||
this.frontWrite(frontInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
} else if (ObjectUtil.isNotEmpty(backInst)) {
|
||||
this.backWrite(backInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
} else {
|
||||
String strategyValue = Optional.ofNullable(this.getExtraValue().get("strategyValue")).map(Object::toString).orElse("");
|
||||
if (ObjectUtil.equals(strategyValue, StrategyEnum.OUT.getValue())) {
|
||||
this.applyInTask();
|
||||
} else if (ObjectUtil.equals(strategyValue, StrategyEnum.IN.getValue()) && !ObjectUtil.equals(strategyValue, StrategyEnum.TIME.getValue())) {
|
||||
this.unExecutedMessage = "堆垛机未查询到就绪状态下可执行的任务或指令信息";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (this.prohibitInWarehouse) {
|
||||
this.unExecutedMessage = "堆垛机设置为禁止出库、禁止入库";
|
||||
return;
|
||||
}
|
||||
this.applyInTask();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 时间顺序策略
|
||||
*/
|
||||
private void applyTaskByTime() {
|
||||
boolean flag = this.applySpecialTask();
|
||||
if (flag) {
|
||||
this.unExecutedMessage = null;
|
||||
return;
|
||||
}
|
||||
List<String> getFrontDeviceCodeList = this.getExtraDeviceCodes("frontDeviceCodeList");
|
||||
String frontNoY = this.handExtraStringValue(this.getDevice(), "frontNoY");
|
||||
List<Instruction> frontInsts = instructionService.findReadyInstByDeviceCode(getFrontDeviceCodeList, frontNoY);
|
||||
Instruction frontInst = null;
|
||||
if (CollectionUtil.isNotEmpty(frontInsts)) {
|
||||
frontInst = frontInsts.get(0);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(frontInst)) {
|
||||
String front_start_device_code = frontInst.getStart_device_code();
|
||||
Device front_start_device = deviceAppService.findDeviceByCode(front_start_device_code);
|
||||
String backNoY = this.handExtraStringValue(this.getDevice(), "backNoY");
|
||||
if (front_start_device != null && front_start_device.getDeviceDriver() instanceof AppearanceInspectionScannerConveyorDeviceDriver) {
|
||||
String getLinkDeviceCode = this.handExtraStringValue(front_start_device, "getLinkDeviceCode");
|
||||
Instruction backInst = instructionService.findReadyInstByStartDeviceCode(frontInst, getLinkDeviceCode, backNoY);
|
||||
if (ObjectUtil.isNotEmpty(getLinkDeviceCode) && deviceAppService.findDeviceByCode(getLinkDeviceCode) != null && ObjectUtil.isNotEmpty(backInst)) {
|
||||
this.FBWrite(front_start_device, frontInst, backInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
} else {
|
||||
this.frontWrite(front_start_device, frontInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
}
|
||||
} else if (front_start_device != null && front_start_device.getDeviceDriver() instanceof StandardStorageDeviceDriver) {
|
||||
String next_device_code = frontInst.getNext_device_code();
|
||||
Device next_device = deviceAppService.findDeviceByCode(next_device_code);
|
||||
if (next_device != null && next_device.getDeviceDriver() instanceof AppearanceInspectionScannerConveyorDeviceDriver) {
|
||||
String getLinkDeviceCode = Optional.ofNullable(next_device.getExtraValue().get("getLinkDeviceCode")).map(Object::toString).orElse(null);
|
||||
Instruction backInst = instructionService.findReadyInstByNextDeviceCode(frontInst, getLinkDeviceCode, backNoY);
|
||||
if (ObjectUtil.isNotEmpty(getLinkDeviceCode) && deviceAppService.findDeviceByCode(getLinkDeviceCode) != null && ObjectUtil.isNotEmpty(backInst)) {
|
||||
this.FBWrite(frontInst, backInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
} else {
|
||||
this.frontWrite(frontInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
List<String> getBackDeviceCodeList = this.getExtraDeviceCodes("backDeviceCodeList");
|
||||
String backNoY = this.handExtraStringValue(this.getDevice(), "backNoY");
|
||||
List<Instruction> backInsts = instructionService.findReadyInstByDeviceCode(getBackDeviceCodeList, backNoY);
|
||||
Instruction backInst = null;
|
||||
if (CollectionUtil.isNotEmpty(backInsts)) {
|
||||
backInst = backInsts.get(0);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(backInst)) {
|
||||
String back_start_device_code = backInst.getStart_device_code();
|
||||
Device back_start_device = deviceAppService.findDeviceByCode(back_start_device_code);
|
||||
if (back_start_device != null && back_start_device.getDeviceDriver() instanceof AppearanceInspectionScannerConveyorDeviceDriver) {
|
||||
this.backWrite(back_start_device, backInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
} else if (back_start_device != null && back_start_device.getDeviceDriver() instanceof StandardStorageDeviceDriver) {
|
||||
this.backWrite(backInst);
|
||||
this.unExecutedMessage = null;
|
||||
this.requireSuccess = true;
|
||||
}
|
||||
} else {
|
||||
this.unExecutedMessage = "堆垛机未查询到就绪状态下可执行的任务或指令信息";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 一进一出策略
|
||||
* 根据楼层优先级
|
||||
@@ -1884,9 +1471,34 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
List<String> getBackDeviceCodeList = this.getExtraDeviceCodes("backDeviceCodeList");
|
||||
String frontNoY = this.handExtraStringValue(this.getDevice(), "frontNoY");
|
||||
String backNoY = this.handExtraStringValue(this.getDevice(), "backNoY");
|
||||
List<Instruction> frontInsts = instructionService.findShallowReadyInstByNextDeviceCode(getFrontDeviceCodeList, frontNoY);
|
||||
if (CollectionUtil.isNotEmpty(frontInsts)) {
|
||||
frontInst = frontInsts.get(0);
|
||||
//先根据优先级和时间顺序查看指令信息
|
||||
List<Instruction> frontInsts = instructionService.findAllInstByPriorityCreateTime(getFrontDeviceCodeList, frontNoY);
|
||||
//如果查询到的是浅货位的指令信息,则直接下发
|
||||
if (CollectionUtils.isNotEmpty(frontInsts)) {
|
||||
for (Instruction inst : frontInsts) {
|
||||
String start_device_code = inst.getStart_device_code();
|
||||
//判断当前库位是深库位还是浅库位
|
||||
int x = Integer.parseInt(getNumericPart(start_device_code));
|
||||
//如果是深库位
|
||||
if (x == 1 || x == 4) {
|
||||
//查询对应的浅货位编码
|
||||
String shallStartPointCode = getZdPoint(inst.getStart_point_code());
|
||||
//查询对应的浅库位是否存在就绪的指令信息
|
||||
Instruction shallInst = instructionService.findReadyInstByStartPointCode(shallStartPointCode);
|
||||
if (shallInst != null) {
|
||||
frontInst = shallInst;
|
||||
break;
|
||||
}
|
||||
//若不存在,则查询是否存在就绪的任务信息
|
||||
TaskDto shallTask = taskService.findReadyByStartPointCode(shallStartPointCode);
|
||||
if (shallTask != null) {
|
||||
continue;
|
||||
}
|
||||
//如果不存在就绪的指令信息和任务信息,直接结束循环
|
||||
}
|
||||
frontInst = inst;
|
||||
break;
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(frontInst) && this.stackerNum == 2) {
|
||||
String front_next_device_code = frontInst.getNext_device_code();
|
||||
Device front_next_device = deviceAppService.findDeviceByCode(front_next_device_code);
|
||||
@@ -1899,28 +1511,30 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
}
|
||||
} else {
|
||||
if (this.stackerNum == 2) {
|
||||
List<Instruction> backInsts = instructionService.findShallowReadyInstByNextDeviceCode(getBackDeviceCodeList, backNoY);
|
||||
if (CollectionUtil.isNotEmpty(backInsts)) {
|
||||
backInst = backInsts.get(0);
|
||||
} else {
|
||||
frontInsts = instructionService.findDeepReadyInstByNextDeviceCode(getFrontDeviceCodeList, frontNoY);
|
||||
if (CollectionUtil.isNotEmpty(frontInsts)) {
|
||||
frontInst = frontInsts.get(0);
|
||||
if (ObjectUtil.isNotEmpty(frontInst) && this.stackerNum == 2) {
|
||||
String front_next_device_code = frontInst.getNext_device_code();
|
||||
Device front_next_device = deviceAppService.findDeviceByCode(front_next_device_code);
|
||||
if (front_next_device != null) {
|
||||
String getLinkDeviceCode = this.handExtraStringValue(front_next_device, "getLinkDeviceCode");
|
||||
if (StrUtil.isNotEmpty(getLinkDeviceCode)) {
|
||||
backInst = instructionService.findDeepReadyInstByNextDeviceCode(frontInst, getLinkDeviceCode, backNoY, getBackDeviceCodeList);
|
||||
}
|
||||
List<Instruction> backInsts = instructionService.findAllInstByPriorityCreateTime(getBackDeviceCodeList, backNoY);
|
||||
if (CollectionUtils.isNotEmpty(backInsts)) {
|
||||
for (Instruction inst : backInsts) {
|
||||
String start_device_code = inst.getStart_device_code();
|
||||
//判断当前库位是深库位还是浅库位
|
||||
int x = Integer.parseInt(getNumericPart(start_device_code));
|
||||
//如果是深库位
|
||||
if (x == 1 || x == 4) {
|
||||
//查询对应的浅货位编码
|
||||
String shallStartPointCode = getZdPoint(inst.getStart_point_code());
|
||||
//查询对应的浅库位是否存在就绪的指令信息
|
||||
Instruction shallInst = instructionService.findReadyInstByStartPointCode(shallStartPointCode);
|
||||
if (shallInst != null) {
|
||||
backInst = shallInst;
|
||||
break;
|
||||
}
|
||||
//若不存在,则查询是否存在就绪的任务信息
|
||||
TaskDto shallTask = taskService.findReadyByStartPointCode(shallStartPointCode);
|
||||
if (shallTask != null) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
backInsts = instructionService.findDeepReadyInstByNextDeviceCode(getBackDeviceCodeList, backNoY);
|
||||
if (CollectionUtil.isNotEmpty(backInsts)) {
|
||||
backInst = backInsts.get(0);
|
||||
}
|
||||
backInst = inst;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2208,7 +1822,6 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
Device front_device = deviceAppService.findDeviceByCode(front_start_device_code);
|
||||
Device back_device = deviceAppService.findDeviceByCode(back_start_device_code);
|
||||
String back_device_code = this.handExtraStringValue(front_device, "getLinkDeviceCode");
|
||||
|
||||
if (instanceStorage(front_device) && instanceStorage(back_device)) {
|
||||
String front_from_x = frontInst.getFrom_x();
|
||||
String front_from_y = frontInst.getFrom_y();
|
||||
@@ -2334,6 +1947,11 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
this.requireSuccess = true;
|
||||
}
|
||||
|
||||
|
||||
private boolean isErrorTimeValid(long errorCurrentTimeMillis) {
|
||||
return errorCurrentTimeMillis - this.errorRequireTime >= this.errorRequireTimeOut;
|
||||
}
|
||||
|
||||
/**
|
||||
* 满入
|
||||
*/
|
||||
@@ -2369,6 +1987,23 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
}
|
||||
this.againRequireSuccess = true;
|
||||
}
|
||||
} else {
|
||||
if (isErrorTimeValid(currentTimeMillis)) {
|
||||
this.errorRequireTime = currentTimeMillis;
|
||||
String notifyValue = Optional.ofNullable(sysParamService.findByCode("is_notify"))
|
||||
.map(notify -> notify.getValue())
|
||||
.orElse("0");
|
||||
if (notifyValue.equals("1")) {
|
||||
JSONObject dataParam = new JSONObject();
|
||||
dataParam.put("msg", "堆垛机满入申请重新分配库位失败! 请求参数: " + request + "响应信息: " + response.getMessage());
|
||||
CommonRequest<JSONObject> requestParam = CommonRequest.<JSONObject>builder()
|
||||
.service("ErrorInfo")
|
||||
.type("1")
|
||||
.data(dataParam)
|
||||
.build();
|
||||
acsToWmsService.apply(requestParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2400,6 +2035,23 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
instructionService.cancelInstAndTask(inst.getInstruction_id());
|
||||
this.writing(ItemProtocol.TO_COMMAND.getKey(), SendSignalEnum.COMMAND_FIVE.getSignalNum());
|
||||
this.againRequireSuccess = true;
|
||||
} else {
|
||||
if (isErrorTimeValid(currentTimeMillis)) {
|
||||
this.errorRequireTime = currentTimeMillis;
|
||||
String notifyValue = Optional.ofNullable(sysParamService.findByCode("is_notify"))
|
||||
.map(notify -> notify.getValue())
|
||||
.orElse("0");
|
||||
if (notifyValue.equals("1")) {
|
||||
JSONObject dataParam = new JSONObject();
|
||||
dataParam.put("msg", "堆垛机空出反馈WMS失败! 请求参数: " + request + "响应信息: " + response.getMessage());
|
||||
CommonRequest<JSONObject> requestParam = CommonRequest.<JSONObject>builder()
|
||||
.service("ErrorInfo")
|
||||
.type("1")
|
||||
.data(dataParam)
|
||||
.build();
|
||||
acsToWmsService.apply(requestParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2441,6 +2093,23 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
}
|
||||
this.writing(ItemProtocol.TO_COMMAND.getKey(), SendSignalEnum.COMMAND_FIVE.getSignalNum());
|
||||
this.againRequireSuccess = true;
|
||||
} else {
|
||||
if (isErrorTimeValid(currentTimeMillis)) {
|
||||
this.errorRequireTime = currentTimeMillis;
|
||||
String notifyValue = Optional.ofNullable(sysParamService.findByCode("is_notify"))
|
||||
.map(notify -> notify.getValue())
|
||||
.orElse("0");
|
||||
if (notifyValue.equals("1")) {
|
||||
JSONObject dataParam = new JSONObject();
|
||||
dataParam.put("msg", "堆垛机取货时浅货位有货反馈WMS失败! 请求参数: " + request + "响应信息: " + response.getMessage());
|
||||
CommonRequest<JSONObject> requestParam = CommonRequest.<JSONObject>builder()
|
||||
.service("ErrorInfo")
|
||||
.type("1")
|
||||
.data(dataParam)
|
||||
.build();
|
||||
acsToWmsService.apply(requestParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2497,6 +2166,23 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
}
|
||||
}
|
||||
this.againRequireSuccess = true;
|
||||
} else {
|
||||
if (isErrorTimeValid(currentTimeMillis)) {
|
||||
this.errorRequireTime = currentTimeMillis;
|
||||
String notifyValue = Optional.ofNullable(sysParamService.findByCode("is_notify"))
|
||||
.map(notify -> notify.getValue())
|
||||
.orElse("0");
|
||||
if (notifyValue.equals("1")) {
|
||||
JSONObject dataParam = new JSONObject();
|
||||
dataParam.put("msg", "堆垛机放货时浅货位有货申请重新分配库位失败! 请求参数: " + request + "响应信息: " + response.getMessage());
|
||||
CommonRequest<JSONObject> requestParam = CommonRequest.<JSONObject>builder()
|
||||
.service("ErrorInfo")
|
||||
.type("1")
|
||||
.data(dataParam)
|
||||
.build();
|
||||
acsToWmsService.apply(requestParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2603,4 +2289,178 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
instdto.setInstruction_type(taskDto.getTask_type());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 出库时,后叉取货完成,下发前叉取/后叉放货信息
|
||||
*
|
||||
* @param back_next_device
|
||||
* @param frontInst
|
||||
* @param getFrontDeviceCodeList
|
||||
*/
|
||||
private void backGetFinish(Device back_next_device, Instruction frontInst, Instruction backInst, List<String> getFrontDeviceCodeList) {
|
||||
List<String> xDeviceCodeList = this.getExtraDeviceCodes("xDeviceCodeList");
|
||||
String getLinkDeviceCode = this.handExtraStringValue(back_next_device, "getLinkDeviceCode");
|
||||
String frontNoY = this.handExtraStringValue(this.getDevice(), "frontNoY");
|
||||
if (ObjectUtil.isEmpty(frontInst)) {
|
||||
//前叉无货,后叉有货,前叉无指令信息,后叉有指令信息
|
||||
//根据后叉关联点位,按照优先级、创建时间去查询前叉指令信息
|
||||
List<Instruction> frontInsts = instructionService.findAllInstByPriorityCreateTime(getLinkDeviceCode, getFrontDeviceCodeList, frontNoY);
|
||||
//遍历前叉指令信息,判断前叉指令起点是深库位还是浅库位
|
||||
if (CollectionUtils.isNotEmpty(frontInsts)) {
|
||||
for (Instruction inst : frontInsts) {
|
||||
String start_device_code = inst.getStart_device_code();
|
||||
//判断当前库位是深库位还是浅库位
|
||||
int x = Integer.parseInt(getNumericPart(start_device_code));
|
||||
//如果是深库位
|
||||
if (x == 1 || x == 4) {
|
||||
//查询对应的浅货位编码
|
||||
String shallStartPointCode = getZdPoint(inst.getStart_point_code());
|
||||
//查询对应的浅库位是否存在就绪的指令信息
|
||||
Instruction shallInst = instructionService.findReadyInstByStartPointCode(shallStartPointCode);
|
||||
if (shallInst != null) {
|
||||
//判断该就绪的指令信息是否是堆垛机库内移库指令信息
|
||||
String next_device_code = shallInst.getNext_device_code();
|
||||
if (xDeviceCodeList.contains(next_device_code)) {
|
||||
Set<String> currentNoY = frontNoY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(frontNoY.split(",")));
|
||||
//如果是的话,判断终点是否前叉可达的,
|
||||
if (!currentNoY.contains(String.valueOf(Integer.parseInt(shallInst.getFrom_y())))) {
|
||||
// 如果前叉可达,则下发前叉移库指令的取货信息 break;
|
||||
this.frontWrite(shallInst);
|
||||
break;
|
||||
}
|
||||
// 否则直接下发后叉放货信息 break
|
||||
this.sendPutInfoToPlc(null, backInst);
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
//若不存在,则查询是否存在就绪的任务信息
|
||||
TaskDto shallTask = taskService.findReadyByStartPointCode(shallStartPointCode);
|
||||
if (shallTask != null) {
|
||||
//判断该就绪的任务信息是否是堆垛机库内移库任务信息
|
||||
String next_device_code = shallTask.getNext_device_code();
|
||||
if (xDeviceCodeList.contains(next_device_code)) {
|
||||
Set<String> currentNoY = frontNoY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(frontNoY.split(",")));
|
||||
//如果是的话,判断终点是否前叉可达的,
|
||||
if (!currentNoY.contains(String.valueOf(Integer.parseInt(shallTask.getFrom_y())))) {
|
||||
// 如果前叉可达,则创建移库指令,并下发前叉移库指令的取货信息 break;
|
||||
frontInst = new Instruction();
|
||||
setInstruction(frontInst, shallTask);
|
||||
try {
|
||||
instructionService.create(frontInst);
|
||||
shallTask.setTask_status(TaskStatusEnum.BUSY.getIndex());
|
||||
taskService.update(shallTask);
|
||||
} catch (Exception e) {
|
||||
this.unExecutedMessage = "后叉出库任务,取货完成后,创建前叉移库指令时出现异常,原因:" + e.getMessage();
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "后叉出库任务,取货完成后,创建前叉移库指令时出现异常,原因:" + e.getMessage()));
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "创建指令失败, 原因:" + e.getMessage()));
|
||||
this.sendPutInfoToPlc(null, backInst);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// 否则直接下发后叉放货信息 break
|
||||
this.sendPutInfoToPlc(null, backInst);
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
frontInst = inst;
|
||||
this.frontWrite(frontInst);
|
||||
//直接下发前叉取货信息
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
this.sendPutInfoToPlc(null, backInst);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 出库时,前叉取货完成,下发后叉取/前叉放货信息
|
||||
*
|
||||
* @param front_next_device
|
||||
* @param frontInst
|
||||
* @param backInst
|
||||
* @param getBackDeviceCodeList
|
||||
*/
|
||||
private void frontGetFinish(Device front_next_device, Instruction frontInst, Instruction backInst, List<String> getBackDeviceCodeList) {
|
||||
List<String> xDeviceCodeList = this.getExtraDeviceCodes("xDeviceCodeList");
|
||||
String getLinkDeviceCode = this.handExtraStringValue(front_next_device, "getLinkDeviceCode");
|
||||
String backNoY = this.handExtraStringValue(this.getDevice(), "backNoY");
|
||||
if (ObjectUtil.isEmpty(backInst)) {
|
||||
//根据后叉关联点位,按照优先级、创建时间去查询后叉指令信息
|
||||
List<Instruction> backInsts = instructionService.findAllInstByPriorityCreateTime(getLinkDeviceCode, getBackDeviceCodeList, backNoY);
|
||||
//遍历后叉指令信息,判断后叉指令起点是深库位还是浅库位
|
||||
if (CollectionUtils.isNotEmpty(backInsts)) {
|
||||
for (Instruction inst : backInsts) {
|
||||
String start_device_code = inst.getStart_device_code();
|
||||
//判断当前库位是深库位还是浅库位
|
||||
int x = Integer.parseInt(getNumericPart(start_device_code));
|
||||
//如果是深库位
|
||||
if (x == 1 || x == 4) {
|
||||
//查询对应的浅货位编码
|
||||
String shallStartPointCode = getZdPoint(inst.getStart_point_code());
|
||||
//查询对应的浅库位是否存在就绪的指令信息
|
||||
Instruction shallInst = instructionService.findReadyInstByStartPointCode(shallStartPointCode);
|
||||
if (shallInst != null) {
|
||||
//判断该就绪的指令信息是否是堆垛机库内移库指令信息
|
||||
String next_device_code = shallInst.getNext_device_code();
|
||||
if (xDeviceCodeList.contains(next_device_code)) {
|
||||
Set<String> currentNoY = backNoY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(backNoY.split(",")));
|
||||
//如果是的话,判断终点是否后叉可达的,
|
||||
if (!currentNoY.contains(String.valueOf(Integer.parseInt(shallInst.getFrom_y())))) {
|
||||
// 如果后叉可达,则下发后叉移库指令的取货信息 break;
|
||||
this.backWrite(shallInst);
|
||||
break;
|
||||
}
|
||||
// 否则直接下发前叉放货信息 break
|
||||
this.sendPutInfoToPlc(frontInst, null);
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
//若不存在,则查询是否存在就绪的任务信息
|
||||
TaskDto shallTask = taskService.findReadyByStartPointCode(shallStartPointCode);
|
||||
if (shallTask != null) {
|
||||
//判断该就绪的任务信息是否是堆垛机库内移库任务信息
|
||||
String next_device_code = shallTask.getNext_device_code();
|
||||
if (xDeviceCodeList.contains(next_device_code)) {
|
||||
Set<String> currentNoY = backNoY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(backNoY.split(",")));
|
||||
//如果是的话,判断终点是否后叉可达的,
|
||||
if (!currentNoY.contains(String.valueOf(Integer.parseInt(shallTask.getFrom_y())))) {
|
||||
// 如果后叉可达,则创建移库指令,并下发后叉移库指令的取货信息 break;
|
||||
backInst = new Instruction();
|
||||
setInstruction(backInst, shallTask);
|
||||
try {
|
||||
instructionService.create(backInst);
|
||||
shallTask.setTask_status(TaskStatusEnum.BUSY.getIndex());
|
||||
taskService.update(shallTask);
|
||||
} catch (Exception e) {
|
||||
this.unExecutedMessage = "前叉出库任务,取货完成后,创建后叉移库指令时出现异常,原因:" + e.getMessage();
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "前叉出库任务,取货完成后,创建后叉移库指令时出现异常,原因:" + e.getMessage()));
|
||||
logService.deviceExecuteLog(new LuceneLogDto(this.currentDeviceCode, "创建指令失败, 原因:" + e.getMessage()));
|
||||
this.sendPutInfoToPlc(frontInst, null);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// 否则直接下发前叉放货信息 break
|
||||
this.sendPutInfoToPlc(frontInst, null);
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
//直接下发后叉取货信息
|
||||
backInst = inst;
|
||||
this.backWrite(backInst);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
this.sendPutInfoToPlc(frontInst, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -493,32 +493,6 @@ public interface InstructionService extends CommonService<InstructionMybatis> {
|
||||
* @return
|
||||
*/
|
||||
List<Instruction> findReadyInstByNextDeviceCode(List<String> next_device_code_list, String noY);
|
||||
List<Instruction> findDeepReadyInstByNextDeviceCode(List<String> next_device_code_list, String noY);
|
||||
List<Instruction> findShallowReadyInstByNextDeviceCode(List<String> next_device_code_list, String noY);
|
||||
|
||||
/**
|
||||
* 用于时间顺序出入库策略
|
||||
* 查询前叉或后叉可达设备的指令信息
|
||||
*
|
||||
* @param device_code_list
|
||||
* @param noY
|
||||
* @return
|
||||
*/
|
||||
List<Instruction> findReadyInstByDeviceCode(List<String> device_code_list, String noY);
|
||||
|
||||
|
||||
/**
|
||||
* 用于优先入库策略和时间顺序策略
|
||||
* 主要是根据前叉指令排列层信息及前叉指令起点关联设备
|
||||
* 一般是入库时根据指令起点查询是否可组成双叉指令
|
||||
*
|
||||
* @param frontInst
|
||||
* @param link_device_code
|
||||
* @param noY
|
||||
* @return
|
||||
*/
|
||||
Instruction findReadyInstByStartDeviceCode(Instruction frontInst, String link_device_code, String noY);
|
||||
|
||||
|
||||
/**
|
||||
* @param linkDeviceCode
|
||||
@@ -541,10 +515,6 @@ public interface InstructionService extends CommonService<InstructionMybatis> {
|
||||
*/
|
||||
Instruction findShallowReadyInstByLinkDeviceCodeAndStartDeviceCode(String linkDeviceCode, String noY, List<String> getDeviceCodeList);
|
||||
|
||||
Instruction findReadyInstByLinkDeviceCodeAndNextDeviceCode(String linkDeviceCode, String noY, List<String> getDeviceCodeList);
|
||||
Instruction findDeepReadyInstByLinkDeviceCodeAndNextDeviceCode(String linkDeviceCode, String noY,List<String> getDeviceCodeList);
|
||||
Instruction findShallowReadyInstByLinkDeviceCodeAndNextDeviceCode(String linkDeviceCode, String noY,List<String> getDeviceCodeList);
|
||||
|
||||
/**
|
||||
* 用于优先出库策略和时间顺序策略 -出库
|
||||
* 主要是根据前叉指令的排列层、前叉指令终点的关联设备,查询后叉指令信息
|
||||
@@ -556,7 +526,8 @@ public interface InstructionService extends CommonService<InstructionMybatis> {
|
||||
* @return
|
||||
*/
|
||||
Instruction findReadyInstByNextDeviceCode(Instruction frontInst, String link_device_code, String noY);
|
||||
Instruction findDeepReadyInstByNextDeviceCode(Instruction frontInst, String link_device_code, String noY, List<String> getDeviceCodeList);
|
||||
|
||||
|
||||
Instruction findShallowReadyInstByNextDeviceCode(Instruction frontInst, String link_device_code, String noY, List<String> getDeviceCodeList);
|
||||
|
||||
|
||||
@@ -572,6 +543,8 @@ public interface InstructionService extends CommonService<InstructionMybatis> {
|
||||
|
||||
Instruction findReadyInstByEnd(String next_device_code);
|
||||
|
||||
Instruction findReadyInstByStartPointCode(String start_point_code);
|
||||
|
||||
int findReadyInstNumByEnd(String next_device_code);
|
||||
|
||||
Instruction findReadyInstByVehicleCode(String vehicleCode);
|
||||
@@ -586,9 +559,26 @@ public interface InstructionService extends CommonService<InstructionMybatis> {
|
||||
|
||||
void cancelInstAndTaskNoSendWms(String instruction_id);
|
||||
|
||||
List<Instruction> findReadyInstByXDeviceCode(List<String> xDeviceCodeList, String noY);
|
||||
List<Instruction> findReadyInstByXDeviceCode(List<String> xDeviceCodeList, String noY);
|
||||
|
||||
Instruction findByNextPointCode(String nextPointCode);
|
||||
|
||||
List<Instruction> findInstsByNextDeviceCode(String deviceCode);
|
||||
|
||||
/**
|
||||
* 根据优先级和创建时间顺序去查找前/后叉可取指令信息
|
||||
*
|
||||
* @param next_device_code_list
|
||||
* @param noY
|
||||
* @return
|
||||
*/
|
||||
List<Instruction> findAllInstByPriorityCreateTime(List<String> next_device_code_list, String noY);
|
||||
|
||||
/**
|
||||
* 根据前后叉对接位关联点位及优先级和创建时间顺序去查找前/后叉可取指令信息
|
||||
*
|
||||
* @param next_device_code_list
|
||||
* @param noY
|
||||
* @return
|
||||
*/
|
||||
List<Instruction> findAllInstByPriorityCreateTime(String link_device_code, List<String> next_device_code_list, String noY);
|
||||
}
|
||||
|
||||
@@ -1954,59 +1954,6 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Instruction> findDeepReadyInstByNextDeviceCode(List<String> next_device_code_list, String noY) {
|
||||
Set<String> currentNoY = noY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(noY.split(",")));
|
||||
return Optional.ofNullable(this.instructions)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(inst -> inst.getInstruction_status().equals(InstructionStatusEnum.READY.getIndex()))
|
||||
.filter(inst -> next_device_code_list.contains(inst.getNext_device_code()))
|
||||
.filter(inst -> ObjectUtil.isNotEmpty(inst.getFrom_y()) && !currentNoY.contains(String.valueOf(Integer.parseInt(inst.getFrom_y()))))
|
||||
.filter(inst -> Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4 == 1 || Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4 == 0)
|
||||
// .sorted(Comparator.comparingInt((Instruction inst) -> Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4).reversed()
|
||||
.sorted(Comparator.comparingInt((Instruction inst) -> {
|
||||
int startCode = Integer.parseInt(getNumericPart(inst.getStart_device_code()));
|
||||
if (startCode == 1 || startCode == 4) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
})
|
||||
.thenComparing(inst -> Integer.parseInt(inst.getNext_device_code()))
|
||||
.thenComparing(inst -> Integer.parseInt(ObjectUtil.isEmpty(inst.getFrom_z()) ? "0" : inst.getFrom_z()))
|
||||
.thenComparing(inst -> Integer.parseInt(ObjectUtil.isEmpty(inst.getFrom_y()) ? "0" : inst.getFrom_y()))
|
||||
.thenComparing(Comparator.comparing(Instruction::getPriority))
|
||||
.thenComparing(inst -> LocalDateTime.parse(inst.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Instruction> findShallowReadyInstByNextDeviceCode(List<String> next_device_code_list, String noY) {
|
||||
Set<String> currentNoY = noY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(noY.split(",")));
|
||||
return Optional.ofNullable(this.instructions)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(inst -> inst.getInstruction_status().equals(InstructionStatusEnum.READY.getIndex()))
|
||||
.filter(inst -> next_device_code_list.contains(inst.getNext_device_code()))
|
||||
.filter(inst -> ObjectUtil.isNotEmpty(inst.getFrom_y()) && !currentNoY.contains(String.valueOf(Integer.parseInt(inst.getFrom_y()))))
|
||||
.filter(inst -> Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4 == 2 || Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 3 == 0)
|
||||
// .sorted(Comparator.comparingInt((Instruction inst) -> Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4).reversed()
|
||||
.sorted(Comparator.comparingInt((Instruction inst) -> {
|
||||
int startCode = Integer.parseInt(getNumericPart(inst.getStart_device_code()));
|
||||
if (startCode == 2 || startCode == 3) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
})
|
||||
.thenComparing(inst -> inst.getNext_device_code())
|
||||
.thenComparing(inst -> Integer.parseInt(ObjectUtil.isEmpty(inst.getFrom_z()) ? "0" : inst.getFrom_z()))
|
||||
.thenComparing(inst -> Integer.parseInt(ObjectUtil.isEmpty(inst.getFrom_y()) ? "0" : inst.getFrom_y()))
|
||||
.thenComparing(Comparator.comparing(Instruction::getPriority))
|
||||
.thenComparing(inst -> LocalDateTime.parse(inst.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private String getNumericPart(String device_c0de) {
|
||||
Pattern pattern = Pattern.compile("\\d+");
|
||||
@@ -2017,49 +1964,6 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
|
||||
return "0";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Instruction> findReadyInstByDeviceCode(List<String> device_code_list, String noY) {
|
||||
//String currentNoY = noY == null ? "" : noY;
|
||||
Set<String> currentNoY = noY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(noY.split(",")));
|
||||
return Optional.ofNullable(this.instructions)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(inst -> inst.getInstruction_status().equals(InstructionStatusEnum.READY.getIndex()))
|
||||
.filter(inst -> (device_code_list.contains(inst.getStart_device_code()) && ObjectUtil.isNotEmpty(inst.getTo_y()) && !currentNoY.contains(inst.getTo_y())) || (device_code_list.contains(inst.getNext_device_code()) && ObjectUtil.isNotEmpty(inst.getFrom_y()) && !currentNoY.contains(inst.getFrom_y())))
|
||||
.sorted(Comparator.comparing(Instruction::getPriority)
|
||||
.thenComparing(inst -> LocalDateTime.parse(inst.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Instruction findReadyInstByStartDeviceCode(Instruction frontInst, String link_device_code, String noY) {
|
||||
//String currentNoY = noY == null ? "" : noY;
|
||||
Set<String> currentNoY = noY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(noY.split(",")));
|
||||
return Optional.ofNullable(this.instructions)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(inst -> inst.getInstruction_status().equals(InstructionStatusEnum.READY.getIndex()))
|
||||
.filter(inst -> inst.getStart_device_code().equals(link_device_code))
|
||||
.filter(inst -> ObjectUtil.isNotEmpty(inst.getTo_y()) && !currentNoY.contains(inst.getTo_y()))
|
||||
.filter(inst -> Integer.parseInt(StringUtil.handleString(inst.getTo_x())) == Integer.parseInt(StringUtil.handleString(frontInst.getTo_x())))
|
||||
// .filter(inst -> ((Integer.parseInt(frontInst.getTo_y()) - 1) / 4 == (Integer.parseInt(inst.getTo_y()) - 1) / 4) && (((Integer.parseInt(frontInst.getTo_y()) % 4) + (Integer.parseInt(inst.getTo_y()) % 4) == 2) || (Integer.parseInt(frontInst.getTo_y()) % 4) + (Integer.parseInt(inst.getTo_y()) % 4) == 4))
|
||||
.filter(inst -> {
|
||||
int frontToY = Integer.parseInt(frontInst.getTo_y());
|
||||
int instToY = Integer.parseInt(inst.getTo_y());
|
||||
int frontGroup = (frontToY - 1) / 4;
|
||||
int instGroup = (instToY - 1) / 4;
|
||||
if (frontGroup != instGroup) {
|
||||
return false;
|
||||
}
|
||||
int frontMod = frontToY % 4;
|
||||
int instMod = instToY % 4;
|
||||
return (frontMod + instMod == 2 || frontMod + instMod == 4);
|
||||
})
|
||||
.filter(inst -> Integer.parseInt(inst.getTo_z()) == Integer.parseInt(frontInst.getTo_z()))
|
||||
.sorted(Comparator.comparing(Instruction::getPriority)
|
||||
.thenComparing(inst -> LocalDateTime.parse(inst.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
|
||||
.findFirst().orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Instruction findReadyInstByLinkDeviceCodeAndStartDeviceCode(String linkDeviceCode, String noY, List<String> getDeviceCodeList) {
|
||||
@@ -2112,64 +2016,8 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Instruction findReadyInstByLinkDeviceCodeAndNextDeviceCode(String linkDeviceCode, String noY, List<String> getDeviceCodeList) {
|
||||
Set<String> currentNoY = noY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(noY.split(",")));
|
||||
return Optional.ofNullable(this.instructions)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(inst -> inst.getInstruction_status().equals(InstructionStatusEnum.READY.getIndex()))
|
||||
.filter(inst -> inst.getNext_device_code().equals(linkDeviceCode))
|
||||
.filter(inst -> getDeviceCodeList.contains(inst.getNext_device_code()))
|
||||
.filter(inst -> StrUtil.isNotBlank(inst.getFrom_y()) && !currentNoY.contains(String.valueOf(Integer.parseInt(inst.getFrom_y()))))
|
||||
.sorted(Comparator.comparingInt((Instruction inst) -> Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4).reversed()
|
||||
.thenComparing(inst -> Integer.parseInt(ObjectUtil.isEmpty(inst.getFrom_z()) ? "0" : inst.getFrom_z()))
|
||||
.thenComparing(inst -> Integer.parseInt(ObjectUtil.isEmpty(inst.getFrom_y()) ? "0" : inst.getFrom_y()))
|
||||
.thenComparing(Comparator.comparing(Instruction::getPriority))
|
||||
.thenComparing(inst -> LocalDateTime.parse(inst.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Instruction findDeepReadyInstByLinkDeviceCodeAndNextDeviceCode(String linkDeviceCode, String noY, List<String> getDeviceCodeList) {
|
||||
Set<String> currentNoY = noY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(noY.split(",")));
|
||||
return Optional.ofNullable(this.instructions)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(inst -> inst.getInstruction_status().equals(InstructionStatusEnum.READY.getIndex()))
|
||||
.filter(inst -> inst.getNext_device_code().equals(linkDeviceCode))
|
||||
.filter(inst -> getDeviceCodeList.contains(inst.getNext_device_code()))
|
||||
.filter(inst -> StrUtil.isNotBlank(inst.getFrom_y()) && !currentNoY.contains(String.valueOf(Integer.parseInt(inst.getFrom_y()))))
|
||||
.filter(inst -> Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4 == 1 || Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4 == 0)
|
||||
.sorted(Comparator.comparingInt((Instruction inst) -> Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4).reversed()
|
||||
.thenComparing(inst -> Integer.parseInt(ObjectUtil.isEmpty(inst.getFrom_z()) ? "0" : inst.getFrom_z()))
|
||||
.thenComparing(inst -> Integer.parseInt(ObjectUtil.isEmpty(inst.getFrom_y()) ? "0" : inst.getFrom_y()))
|
||||
.thenComparing(Comparator.comparing(Instruction::getPriority))
|
||||
.thenComparing(inst -> LocalDateTime.parse(inst.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Instruction findShallowReadyInstByLinkDeviceCodeAndNextDeviceCode(String linkDeviceCode, String noY, List<String> getDeviceCodeList) {
|
||||
Set<String> currentNoY = noY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(noY.split(",")));
|
||||
return Optional.ofNullable(this.instructions)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(inst -> inst.getInstruction_status().equals(InstructionStatusEnum.READY.getIndex()))
|
||||
.filter(inst -> inst.getNext_device_code().equals(linkDeviceCode))
|
||||
.filter(inst -> getDeviceCodeList.contains(inst.getNext_device_code()))
|
||||
.filter(inst -> StrUtil.isNotBlank(inst.getFrom_y()) && !currentNoY.contains(String.valueOf(Integer.parseInt(inst.getFrom_y()))))
|
||||
.filter(inst -> Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4 == 2 || Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4 == 3)
|
||||
.sorted(Comparator.comparingInt((Instruction inst) -> Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4).reversed()
|
||||
.thenComparing(inst -> Integer.parseInt(ObjectUtil.isEmpty(inst.getFrom_z()) ? "0" : inst.getFrom_z()))
|
||||
.thenComparing(inst -> Integer.parseInt(ObjectUtil.isEmpty(inst.getFrom_y()) ? "0" : inst.getFrom_y()))
|
||||
.thenComparing(Comparator.comparing(Instruction::getPriority))
|
||||
.thenComparing(inst -> LocalDateTime.parse(inst.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Instruction findReadyInstByNextDeviceCode(Instruction frontInst, String link_device_code, String noY) {
|
||||
@@ -2202,36 +2050,6 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
|
||||
.findFirst().orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Instruction findDeepReadyInstByNextDeviceCode(Instruction frontInst, String link_device_code, String noY, List<String> getDeviceCodeList) {
|
||||
Set<String> currentNoY = noY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(noY.split(",")));
|
||||
return Optional.ofNullable(this.instructions)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(inst -> inst.getInstruction_status().equals(InstructionStatusEnum.READY.getIndex()))
|
||||
.filter(inst -> inst.getNext_device_code().equals(link_device_code))
|
||||
.filter(inst -> ObjectUtil.isNotEmpty(inst.getFrom_y()) && !currentNoY.contains(inst.getFrom_y()))
|
||||
.filter(inst -> Integer.parseInt(StringUtil.handleString(inst.getFrom_x())) == Integer.parseInt(StringUtil.handleString(frontInst.getFrom_x())))
|
||||
.filter(inst -> getDeviceCodeList.contains(inst.getNext_device_code()))
|
||||
.filter(inst -> {
|
||||
int frontY = Integer.parseInt(frontInst.getFrom_y());
|
||||
int instY = Integer.parseInt(inst.getFrom_y());
|
||||
int frontGroup = (frontY - 1) / 4;
|
||||
int instGroup = (instY - 1) / 4;
|
||||
if (frontGroup != instGroup) {
|
||||
return false;
|
||||
}
|
||||
int frontMod = frontY % 4;
|
||||
int instMod = instY % 4;
|
||||
return (frontMod + instMod == 2 || frontMod + instMod == 4);
|
||||
})
|
||||
.filter(inst -> Integer.parseInt(inst.getFrom_y()) < Integer.parseInt(frontInst.getFrom_y()))
|
||||
.filter(inst -> Integer.parseInt(inst.getFrom_z()) == Integer.parseInt(frontInst.getFrom_z()))
|
||||
.filter(inst -> Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4 == 0 || Integer.parseInt(getNumericPart(inst.getStart_device_code())) % 4 == 1)
|
||||
.sorted(Comparator.comparing(Instruction::getPriority).reversed()
|
||||
.thenComparing(inst -> LocalDateTime.parse(inst.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
|
||||
.findFirst().orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Instruction findShallowReadyInstByNextDeviceCode(Instruction frontInst, String link_device_code, String noY, List<String> getDeviceCodeList) {
|
||||
@@ -2284,6 +2102,16 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
|
||||
.findFirst().orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Instruction findReadyInstByStartPointCode(String start_point_code) {
|
||||
return Optional.ofNullable(this.instructions)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(inst -> inst.getInstruction_status().equals(InstructionStatusEnum.READY.getIndex()))
|
||||
.filter(inst -> inst.getStart_point_code().equals(start_point_code))
|
||||
.findFirst().orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int findReadyInstNumByEnd(String next_device_code) {
|
||||
return Optional.ofNullable(this.instructions)
|
||||
@@ -2414,13 +2242,68 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<Instruction> findInstsByNextDeviceCode(String deviceCode) {
|
||||
public List<Instruction> findAllInstByPriorityCreateTime(List<String> next_device_code_list, String noY) {
|
||||
Set<String> currentNoY = noY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(noY.split(",")));
|
||||
return Optional.ofNullable(this.instructions)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(inst -> inst.getNext_device_code().equals(deviceCode))
|
||||
.filter(inst -> inst.getInstruction_status().equals(InstructionStatusEnum.READY.getIndex()))
|
||||
.filter(inst -> next_device_code_list.contains(inst.getNext_device_code()))
|
||||
.filter(inst -> ObjectUtil.isNotEmpty(inst.getFrom_y()) && !currentNoY.contains(String.valueOf(Integer.parseInt(inst.getFrom_y()))))
|
||||
.sorted(Comparator
|
||||
.comparingInt((Instruction inst) ->
|
||||
inst.getPriority() != null && !inst.getPriority().isEmpty() ?
|
||||
Integer.parseInt(inst.getPriority()) :
|
||||
1)
|
||||
.reversed()
|
||||
.thenComparing(inst -> LocalDateTime.parse(inst.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))
|
||||
.thenComparing(inst -> {
|
||||
String startDeviceCode = inst.getStart_device_code();
|
||||
String numericPart = getNumericPart(startDeviceCode);
|
||||
int location = Integer.parseInt(numericPart);
|
||||
if (location == 2 || location == 3) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
})
|
||||
.thenComparing(inst -> Integer.parseInt(inst.getNext_device_code()))
|
||||
)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Instruction> findAllInstByPriorityCreateTime(String link_device_code, List<String> next_device_code_list, String noY) {
|
||||
Set<String> currentNoY = noY == null ? Collections.emptySet() : new HashSet<>(Arrays.asList(noY.split(",")));
|
||||
return Optional.ofNullable(this.instructions)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(inst -> inst.getInstruction_status().equals(InstructionStatusEnum.READY.getIndex()))
|
||||
.filter(inst -> inst.getNext_device_code().equals(link_device_code))
|
||||
.filter(inst -> next_device_code_list.contains(inst.getNext_device_code()))
|
||||
.filter(inst -> ObjectUtil.isNotEmpty(inst.getFrom_y()) && !currentNoY.contains(String.valueOf(Integer.parseInt(inst.getFrom_y()))))
|
||||
.sorted(Comparator
|
||||
.comparingInt((Instruction inst) ->
|
||||
inst.getPriority() != null && !inst.getPriority().isEmpty() ?
|
||||
Integer.parseInt(inst.getPriority()) :
|
||||
1)
|
||||
.reversed()
|
||||
.thenComparing(inst -> LocalDateTime.parse(inst.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))
|
||||
.thenComparing(inst -> {
|
||||
String startDeviceCode = inst.getStart_device_code();
|
||||
String numericPart = getNumericPart(startDeviceCode);
|
||||
int location = Integer.parseInt(numericPart);
|
||||
if (location == 2 || location == 3) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
})
|
||||
)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -294,7 +294,7 @@ public interface TaskService extends CommonService<Task> {
|
||||
|
||||
List<TaskDto> findTasksByNextCode(String device_code);
|
||||
|
||||
TaskDto findByStartPointCode(String device_code);
|
||||
TaskDto findReadyByStartPointCode(String start_point_code);
|
||||
|
||||
|
||||
TaskDto findReadyByVehicleCode(String vehicleCode);
|
||||
@@ -331,16 +331,6 @@ public interface TaskService extends CommonService<Task> {
|
||||
*/
|
||||
String queryAssignedByDevice(String device_code, String task_nextdevice_code);
|
||||
|
||||
|
||||
/**
|
||||
* 查询相同起终任务的数量
|
||||
*
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
Integer querySameDeviceReadyTask(String start_device, String next_device, String status);
|
||||
|
||||
|
||||
/**
|
||||
* 条件查询任务和指令
|
||||
*
|
||||
@@ -385,8 +375,6 @@ public interface TaskService extends CommonService<Task> {
|
||||
|
||||
TaskDto findReadyTaskByNextDeviceCode(String next_device_code, List<String> checkoutStartDeviceCode);
|
||||
|
||||
List<TaskDto> findReadyTasksByNextDeviceCode(String next_device_code, List<String> checkoutStartDeviceCode);
|
||||
|
||||
List<TaskDto> findReadyTaskByXDeviceCode(List<String> xDeviceCodeList, String noY);
|
||||
|
||||
/**
|
||||
@@ -409,6 +397,5 @@ public interface TaskService extends CommonService<Task> {
|
||||
|
||||
void cancelNoSendWms(String task_id);
|
||||
|
||||
|
||||
List<TaskDto> findInstsByNextDeviceCode(String deviceCode);
|
||||
}
|
||||
|
||||
@@ -742,7 +742,7 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
|
||||
instdto.setNext_point_code2(next_point_code2);
|
||||
instdto.setAgv_inst_type(CommonFinalParam.ONE);
|
||||
instdto.setAgv_system_type(agv_system_type);
|
||||
if (StrUtil.equals(instdto.getNext_device_code(),"3101")){
|
||||
if (StrUtil.equals(instdto.getNext_device_code(), "3101")) {
|
||||
instdto.setAgv_system_type(AgvSystemTypeEnum.HK_SYSTEM_TYPE.getCode());
|
||||
instdto.setInstruction_type(InstTypeEnum.CTU_OUT_TASK.getCode());
|
||||
}
|
||||
@@ -904,13 +904,15 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public TaskDto findByStartPointCode(String device_code) {
|
||||
public TaskDto findReadyByStartPointCode(String start_point_code) {
|
||||
return Optional
|
||||
.ofNullable(this.tasks)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(task -> StrUtil.equals(task.getStart_point_code(), device_code))
|
||||
.filter(task -> StrUtil.equals(task.getStart_point_code(), start_point_code))
|
||||
.filter(task -> StrUtil.equals(task.getTask_status(),TaskStatusEnum.READY.getIndex()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
@@ -1251,21 +1253,6 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Integer querySameDeviceReadyTask(String start_device, String next_device, String status) {
|
||||
int num = 0;
|
||||
Iterator<TaskDto> iterator = tasks.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
TaskDto task = iterator.next();
|
||||
if (StrUtil.equals(task.getStart_device_code(), start_device)
|
||||
&& StrUtil.equals(task.getNext_device_code(), next_device)
|
||||
&& StrUtil.equals(task.getTask_status(), status)) {
|
||||
num++;
|
||||
}
|
||||
}
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@@ -1340,7 +1327,7 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
|
||||
String type = shortPathsList.get(0).getType();
|
||||
// != 0 为agv任务
|
||||
if (!StrUtil.equals(type, "0")) {
|
||||
if (StrUtil.equals(paramService.findByCode(AcsConfig.AGV_TYPE).getValue(), "3") && StrUtil.equals(taskDto.getAgv_system_type(),AgvSystemTypeEnum.XG_SYSTEM_TYPE.getCode())) {
|
||||
if (StrUtil.equals(paramService.findByCode(AcsConfig.AGV_TYPE).getValue(), "3") && StrUtil.equals(taskDto.getAgv_system_type(), AgvSystemTypeEnum.XG_SYSTEM_TYPE.getCode())) {
|
||||
try {
|
||||
JSONObject reqParam = new JSONObject();
|
||||
reqParam.put("id", taskDto.getTask_code());
|
||||
@@ -1361,30 +1348,29 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
|
||||
.filter(taskDto -> TaskStatusEnum.READY.getIndex().equals(taskDto.getTask_status()))
|
||||
.filter(taskDto -> taskDto.getNext_device_code().equals(next_device_code))
|
||||
.filter(taskDto -> !checkoutStartDeviceCode.contains(taskDto.getStart_device_code()))
|
||||
.sorted(Comparator.comparingInt((TaskDto taskDto) -> Integer.parseInt(getNumericPart(taskDto.getStart_device_code())) % 4).reversed()
|
||||
.thenComparing(taskDto -> Integer.parseInt(ObjectUtil.isEmpty(taskDto.getFrom_y()) ? "0" : taskDto.getFrom_y()))
|
||||
.thenComparing(TaskDto::getPriority)
|
||||
.thenComparing(taskDto -> LocalDateTime.parse(taskDto.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
|
||||
.sorted(
|
||||
Comparator
|
||||
.comparingInt((TaskDto taskDto) ->
|
||||
taskDto.getPriority() != null && !taskDto.getPriority().isEmpty() ?
|
||||
Integer.parseInt(taskDto.getPriority()) :
|
||||
1)
|
||||
.reversed()
|
||||
.thenComparing(taskDto -> LocalDateTime.parse(taskDto.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))
|
||||
.thenComparing(taskDto -> {
|
||||
String startDeviceCode = taskDto.getStart_device_code();
|
||||
String numericPart = getNumericPart(startDeviceCode);
|
||||
int location = Integer.parseInt(numericPart);
|
||||
if (location == 2 || location == 3) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
})
|
||||
)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskDto> findReadyTasksByNextDeviceCode(String next_device_code, List<String> checkoutStartDeviceCode) {
|
||||
return Optional.ofNullable(this.tasks)
|
||||
.orElse(new CopyOnWriteArrayList<>())
|
||||
.stream()
|
||||
.filter(taskDto -> TaskStatusEnum.READY.getIndex().equals(taskDto.getTask_status()))
|
||||
.filter(taskDto -> taskDto.getNext_device_code().equals(next_device_code))
|
||||
.filter(taskDto -> !checkoutStartDeviceCode.contains(taskDto.getStart_device_code()))
|
||||
.sorted(Comparator.comparingInt((TaskDto taskDto) -> Integer.parseInt(getNumericPart(taskDto.getStart_device_code())) % 4).reversed()
|
||||
.thenComparing(taskDto -> Integer.parseInt(ObjectUtil.isEmpty(taskDto.getFrom_z()) ? "0" : taskDto.getFrom_z()))
|
||||
.thenComparing(taskDto -> Integer.parseInt(ObjectUtil.isEmpty(taskDto.getFrom_y()) ? "0" : taskDto.getFrom_y()))
|
||||
.thenComparing(TaskDto::getPriority)
|
||||
.thenComparing(taskDto -> LocalDateTime.parse(taskDto.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private String getNumericPart(String device_c0de) {
|
||||
Pattern pattern = Pattern.compile("\\d+");
|
||||
Matcher matcher = pattern.matcher(device_c0de);
|
||||
|
||||
@@ -17,7 +17,7 @@ import java.util.List;
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@Order(100)
|
||||
@ConditionalOnProperty(value = "spring.profiles.active",havingValue = "dev")
|
||||
@ConditionalOnProperty(value = "spring.profiles.active",havingValue = "prod")
|
||||
public class JobRunner implements ApplicationRunner {
|
||||
private static final Logger log = LoggerFactory.getLogger(JobRunner.class);
|
||||
private final ISysQuartzJobService quartzJobService;
|
||||
|
||||
@@ -91,10 +91,6 @@ public class AutoCreateYkInst {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!StrUtil.equals(shortPathsList.get(0).getType(), CommonFinalParam.ONE) && !StrUtil.equals(shortPathsList.get(0).getType(), CommonFinalParam.TWO)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
RouteLineDto routeLineDto = shortPathsList.get(0);
|
||||
String path = routeLineDto.getPath();
|
||||
String type = routeLineDto.getType();
|
||||
|
||||
Reference in New Issue
Block a user