Merge remote-tracking branch 'origin/master'

This commit is contained in:
zhangzhiqiang
2023-05-29 19:23:45 +08:00
4 changed files with 41 additions and 35 deletions

View File

@@ -138,12 +138,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//取满箱任务起点 一般是专机满料点和缓存线
if (StrUtil.equals(inst.getStart_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,到达取货点1,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialFullStationDeviceDriver.set(phase, index, inst);
}
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,到达出缓存线取满框点1,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
}
@@ -175,13 +175,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//取满箱任务起点 一般是专机满料点和缓存线
if (StrUtil.equals(inst.getStart_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,取货点1取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialFullStationDeviceDriver.set(phase, index, inst);
}
//入缓存线任务的起点有专机满料位 出缓存的起点是缓存线
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线取满框点1取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
}
@@ -213,12 +213,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//双任务-取满箱任务起点2 一般是专机满料点和缓存线
if (StrUtil.equals(inst.getStart_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,到达取货点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialFullStationDeviceDriver.set(phase, index, inst);
}
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,到达出缓存线取满框点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
}
@@ -249,12 +249,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//双任务-取满箱任务起点2 一般是专机满料点和缓存线
if (StrUtil.equals(inst.getStart_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,取货点2取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialFullStationDeviceDriver.set(phase, index, inst);
}
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,出缓存线取满框点2取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
}
@@ -285,7 +285,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//只有满料位入到缓存线有到达送满框
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线入库到达送满框点1,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
break;
@@ -320,13 +320,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,到达倒料点1,设备号:{}", device_code);
hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialPourStationDeviceDriver.set(phase, index, inst);
break;
}
if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,到达倒料点1,设备号:{}", device_code);
hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver();
hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst);
break;
@@ -359,7 +359,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//送满框1 只有满料位到缓存线才有送满框1
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线入库送满框点1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
break;
@@ -392,13 +392,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//只有满料位、缓存线到倒料位、清洗储料仓才有倒料完毕1
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,倒料点1倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialPourStationDeviceDriver.set(phase, index, inst);
break;
}
if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,倒料点1倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver();
hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst);
break;
@@ -430,7 +430,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//只有满料位到缓存线放满完成后才有到达取空框1 取空框是缓存线才有
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线入库,到达取空框1,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
break;
@@ -453,6 +453,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
log.info(agvaddr + "对应设备号为空!");
return;
}
Collections.reverse(insts);
for (Instruction inst : insts) {
//校验agv上报站点编号与指令起始点相同
if (ObjectUtil.isEmpty(inst)) {
@@ -462,13 +463,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,到达倒料点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialPourStationDeviceDriver.set(phase, index, inst);
break;
}
if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,到达倒料点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver();
hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst);
break;
@@ -500,7 +501,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//只有满料位到缓存线入库才有取空框1完毕
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线入库,取空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
break;
@@ -532,7 +533,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//只有满料位到缓存线才有到达送满框2
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线入库,到达送满框点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
break;
@@ -564,7 +565,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//只有满料位到缓存线才有到送满框完毕
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线入库,送满框点2完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
break;
@@ -597,7 +598,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//只有满料位到缓存线才有到达取空框2
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线入库,到达取空框点2,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
break;
@@ -629,7 +630,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//只有满料位到缓存线才有到达取空框完毕2
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线入库,取空框点2取货完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
break;
@@ -662,13 +663,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓
if (StrUtil.equals(inst.getPut_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,倒料点2倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialPourStationDeviceDriver.set(phase, index, inst);
break;
}
if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,倒料点2倒料完毕,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver();
hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst);
break;
@@ -702,12 +703,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//所有任务都有到达送空框1
if (StrUtil.equals(inst.getNext_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,到达还空框1,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst);
}
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线出库,还空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
}
@@ -740,12 +741,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//所有任务都有到送空框1完毕
if (StrUtil.equals(inst.getNext_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,还空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst);
}
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线出库还空框1完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
}
@@ -778,12 +779,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//所有双任务都有到达送空框2
if (StrUtil.equals(inst.getNext_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,到达还空框2,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst);
}
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线出库到达还空框2,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
}
@@ -816,12 +817,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
//所有双任务都有送空框完毕2
if (StrUtil.equals(inst.getNext_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,还空框2完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver();
hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst);
}
if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) {
log.info("开始设置phase值,设备号:{}", device_code);
log.info("开始设置phase值,缓存线出库还空框2完成,设备号:{},指令号:{}", device_code, inst.getInstruction_code());
hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver();
hailiangAutoCacheLineDeviceDriver.set(phase, index, inst);
}

View File

@@ -11,6 +11,7 @@ import org.nl.acs.agv.server.impl.NDCAgvServiceImpl;
import org.nl.acs.auto.run.NDCSocketConnectionAutoRun;
import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.RouteableDeviceDriver;
import org.nl.acs.device_driver.basedriver.hailiang_one.MonitoringLargeScreenData;
import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver;
import org.nl.acs.device_driver.driver.ExecutableDeviceDriver;
import org.nl.acs.history.ErrorUtil;
@@ -139,6 +140,7 @@ public class HailiangCleaningMachineStorageStationDeviceDriver extends AbstractO
logServer.deviceExecuteLog(this.device_code, "", "", "信号is_open" + last_is_open + "->" + is_open);
}
if (silo_weight != last_silo_weight) {
MonitoringLargeScreenData.deviceNumData.put(this.device_code, this.getSilo_weight());
logServer.deviceExecuteLog(this.device_code, "", "", "信号silo_weight" + last_silo_weight + "->" + silo_weight);
}
if (full_number != last_full_number) {

View File

@@ -230,7 +230,7 @@ public class HailiangSpecialDeviceDriver extends AbstractOpcDeviceDriver impleme
}
//修改工单状态为自动完成
if (mode == 1 && finish != last_finish && finish == 1 && order > 0) {
if (mode == 1 && finish != last_finish && finish == 1 && order > 0 && now_order_prod_num == order_prod_allnum) {
ProduceshiftorderDto pdto = produceshiftorderService.findByCodeFromCache(String.valueOf(order));
if (pdto != null) {
if (pdto.getOrder_status().equals(WorkerOrderEnum.PRODUCTING.getCode())) {

View File

@@ -1,5 +1,6 @@
package org.nl.acs.instruction.service.impl;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -453,7 +454,9 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu
dto2.setCreate_by(currentUsername2);
dto2.setUpdate_by(currentUsername2);
dto2.setUpdate_time(now2);
dto2.setCreate_time(now2);
Date date2 = DateUtil.parse(now2);
Date newDate = DateUtil.offset(date2, DateField.SECOND, 2);
dto2.setCreate_time(DateUtil.formatDateTime(newDate));
dto2.setStart_parent_code(task2.getStart_parent_code());
dto2.setNext_parent_code(task2.getNext_parent_code());
dto2.setAgv_inst_type(AgvTypeEnum.getAgvInstTypeByTaskType(task2.getTask_type()));
@@ -1094,7 +1097,7 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu
.orElse(new CopyOnWriteArrayList<>())
.stream()
.filter(i -> i.getLink_num().equals(link_no))
.sorted((inst1, inst2) -> inst1.getInstruction_code().compareTo(inst2.getInstruction_code()))
.sorted((inst1, inst2) -> inst1.getCreate_time().compareTo(inst2.getCreate_time()))
.collect(Collectors.toList());
}