Browse Source

更新

master
gengby 2 years ago
parent
commit
f56fbfbd1a
  1. 14
      acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java
  2. 28
      acs/nladmin-system/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java
  3. 243
      acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDC2SocketConnectionAutoRun.java
  4. 245
      acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java
  5. 78
      acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java
  6. 6
      acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndctwo/AgvNdcTwoDeviceDriver.java
  7. 54
      acs/nladmin-system/src/main/java/org/nl/acs/hand/amb/service/impl/AMHandServiceImpl.java
  8. 2
      acs/nladmin-system/src/main/java/org/nl/acs/hand/amb/wql/QJN_QUERY001.wql
  9. 3
      acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java
  10. 2
      acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java
  11. 2
      acs/nladmin-system/src/main/java/org/nl/modules/quartz/utils/ExecutionJob.java
  12. 4
      acs/nladmin-ui/src/views/acs/task/index.vue

14
acs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java

@ -1,36 +1,26 @@
package org.nl.acs.agv.server.impl; package org.nl.acs.agv.server.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.acs.AcsConfig; import org.nl.acs.AcsConfig;
import org.nl.acs.agv.server.NDCAgvService; import org.nl.acs.agv.server.NDCAgvService;
import org.nl.acs.agv.server.dto.AgvDto; import org.nl.acs.agv.server.dto.AgvDto;
import org.nl.acs.auto.run.OneNDCSocketConnectionAutoRun; import org.nl.acs.auto.run.OneNDCSocketConnectionAutoRun;
import org.nl.acs.auto.run.TwoNDC2SocketConnectionAutoRun;
import org.nl.acs.auto.run.TwoNDCSocketConnectionAutoRun;
import org.nl.acs.device.service.DeviceService; import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device.service.impl.DeviceServiceImpl; import org.nl.acs.device.service.impl.DeviceServiceImpl;
import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.AcsToWmsService;
import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.instruction.service.dto.Instruction; import org.nl.acs.instruction.service.dto.Instruction;
import org.nl.acs.log.LokiLog; import org.nl.acs.log.LokiLog;
import org.nl.acs.log.LokiLogType; import org.nl.acs.log.LokiLogType;
import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.log.service.DeviceExecuteLogService;
import org.nl.acs.opc.Device;
import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppService;
import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.opc.DeviceAppServiceImpl;
import org.nl.acs.opc.DeviceType;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.service.ParamService; import org.nl.modules.system.service.ParamService;
import org.nl.modules.wql.util.SpringContextHolder; import org.nl.modules.wql.util.SpringContextHolder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j
@ -185,9 +175,9 @@ public class NDCAgvServiceImpl implements NDCAgvService {
} }
log.info("下发AGV作业指令--{}", str1); log.info("下发AGV作业指令--{}", str1);
if (StrUtil.equals(agv_system_type,"2")){ if (StrUtil.equals(agv_system_type,"2")){
TwoNDCSocketConnectionAutoRun.write(b); //TwoNDCSocketConnectionAutoRun.write(b);
} else if (StrUtil.equals(agv_system_type,"3")){ } else if (StrUtil.equals(agv_system_type,"3")){
TwoNDC2SocketConnectionAutoRun.write(b); //TwoNDC2SocketConnectionAutoRun.write(b);
} }
System.out.println("下发agv指令数据:" + Bytes2HexString(b)); System.out.println("下发agv指令数据:" + Bytes2HexString(b));
} else { } else {

28
acs/nladmin-system/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java

@ -11,6 +11,7 @@ import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl;
import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.instruction.service.dto.Instruction; import org.nl.acs.instruction.service.dto.Instruction;
import org.nl.acs.instruction.service.impl.InstructionServiceImpl; import org.nl.acs.instruction.service.impl.InstructionServiceImpl;
import org.nl.acs.log.service.DeviceExecuteLogService;
import org.nl.acs.opc.Device; import org.nl.acs.opc.Device;
import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppService;
import org.nl.modules.system.service.ParamService; import org.nl.modules.system.service.ParamService;
@ -63,17 +64,18 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
} }
public String getName() { public String getName() {
return "1楼NDC在线连接"; return "NDC在线连接";
} }
public void autoRun() throws IOException { public void autoRun() throws IOException {
System.out.println("1楼NDCAgv链接开始"); System.out.println("NDCAgv链接开始");
ParamService ParamService = SpringContextHolder.getBean(ParamServiceImpl.class); ParamService ParamService = SpringContextHolder.getBean(ParamServiceImpl.class);
InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class); InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class);
AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class); AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class);
NDCAgvService NDCAgvService = SpringContextHolder.getBean(NDCAgvService.class); NDCAgvService NDCAgvService = SpringContextHolder.getBean(NDCAgvService.class);
DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class);
DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class); DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class);
DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class);
ip = paramService.findByCode(AcsConfig.AGVURL).getValue(); ip = paramService.findByCode(AcsConfig.AGVURL).getValue();
port = Integer.parseInt(paramService.findByCode(AcsConfig.AGVPORT).getValue()); port = Integer.parseInt(paramService.findByCode(AcsConfig.AGVPORT).getValue());
@ -83,7 +85,8 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
s = new Socket(ip, port); s = new Socket(ip, port);
dos = new DataOutputStream(s.getOutputStream()); dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream()); dis = new DataInputStream(s.getInputStream());
System.out.println("1楼NDCAgv链接成功"); System.out.println("NDCAgv链接成功");
log.info("NDCAgv链接成功");
while (bConnected) { while (bConnected) {
int count = dis.read(b); int count = dis.read(b);
@ -119,6 +122,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
//车号 //车号
int carno = arr[20]; int carno = arr[20];
Instruction link_inst = null; Instruction link_inst = null;
Instruction inst = null;
List<Instruction> insts = null; List<Instruction> insts = null;
boolean link_flag = false; boolean link_flag = false;
Device agv_device = null; Device agv_device = null;
@ -126,7 +130,10 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
agv_device = deviceAppService.findDeviceByCode(String.valueOf(carno)); agv_device = deviceAppService.findDeviceByCode(String.valueOf(carno));
} }
if (ikey != 0) { if (ikey != 0) {
insts = instructionService.findByLinkNum(String.valueOf(ikey)); inst = instructionService.findByCodeFromCache(String.valueOf(ikey));
if (ObjectUtil.isEmpty(inst)){
inst = instructionService.findByCode(String.valueOf(ikey));
}
} }
if (!ObjectUtil.isEmpty(link_inst)) { if (!ObjectUtil.isEmpty(link_inst)) {
link_flag = true; link_flag = true;
@ -142,7 +149,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
//开始任务/上报订单号 //开始任务/上报订单号
if (phase == 0x01) { if (phase == 0x01) {
for (Instruction inst : insts) { if (!ObjectUtil.isEmpty(inst)) {
inst.setInstruction_status("1"); inst.setInstruction_status("1");
inst.setAgv_jobno(String.valueOf(index)); inst.setAgv_jobno(String.valueOf(index));
inst.setSend_status("1"); inst.setSend_status("1");
@ -154,7 +161,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
//(无车id及状态) //(无车id及状态)
else if (phase == 0x0A) { else if (phase == 0x0A) {
for (Instruction inst : insts) { if (!ObjectUtil.isEmpty(inst)) {
if (!ObjectUtil.isEmpty(inst)) { if (!ObjectUtil.isEmpty(inst)) {
instructionService.finish(inst.getInstruction_id()); instructionService.finish(inst.getInstruction_id());
} }
@ -172,7 +179,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
//(需要WCS反馈) //(需要WCS反馈)
else if(phase == 0xFF) { else if(phase == 0xFF) {
for (Instruction inst : insts) { if (!ObjectUtil.isEmpty(inst)) {
if (!ObjectUtil.isEmpty(inst)) { if (!ObjectUtil.isEmpty(inst)) {
instructionService.cancelNOSendAgv(inst.getInstruction_id()); instructionService.cancelNOSendAgv(inst.getInstruction_id());
} }
@ -187,11 +194,14 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
} else { } else {
device = deviceAppService.findDeviceByCode(Integer.toString(arr[20])); device = deviceAppService.findDeviceByCode(Integer.toString(arr[20]));
} }
if(ObjectUtil.isNotEmpty(device)){
if (device.getDeviceDriver() instanceof AgvNdcOneDeviceDriver) { if (device.getDeviceDriver() instanceof AgvNdcOneDeviceDriver) {
agvNdcOneDeviceDriver = (AgvNdcOneDeviceDriver) device.getDeviceDriver(); agvNdcOneDeviceDriver = (AgvNdcOneDeviceDriver) device.getDeviceDriver();
agvNdcOneDeviceDriver.processSocket(arr); agvNdcOneDeviceDriver.processSocket(arr);
} }
} }
}
if (!ObjectUtil.isEmpty(data)) { if (!ObjectUtil.isEmpty(data)) {
write(data); write(data);
} }
@ -203,6 +213,10 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
} catch (Exception e) { } catch (Exception e) {
System.out.println("OneAgv链接异常"); System.out.println("OneAgv链接异常");
log.info("OneAgv链接异常");
log.error("agv连接出现异常:{}", e);
logServer.deviceExecuteLog("1","","","agv异常"+e.getMessage());
logServer.deviceExecuteLog("1","","","agv异常" + e);
if(ObjectUtil.isNotEmpty(s)){ if(ObjectUtil.isNotEmpty(s)){
s.close(); s.close();
} }

243
acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDC2SocketConnectionAutoRun.java

@ -1,243 +0,0 @@
package org.nl.acs.auto.run;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.nl.acs.AcsConfig;
import org.nl.acs.agv.server.NDCAgvService;
import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device_driver.basedriver.agv.ndctwo.AgvNdcTwoDeviceDriver;
import org.nl.acs.ext.wms.service.AcsToWmsService;
import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl;
import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.instruction.service.dto.Instruction;
import org.nl.acs.instruction.service.impl.InstructionServiceImpl;
import org.nl.acs.opc.Device;
import org.nl.acs.opc.DeviceAppService;
import org.nl.modules.system.service.ParamService;
import org.nl.modules.system.service.impl.ParamServiceImpl;
import org.nl.modules.wql.util.SpringContextHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Date;
import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString;
@Slf4j
@Component
public class TwoNDC2SocketConnectionAutoRun extends AbstractAutoRunnable {
Socket s;
String ip = "192.168.46.225";
int port = 1234;
static DataOutputStream dos;
static DataInputStream dis;
private int recordTimeOut = 10000;
private Date recordTime;
String[] ERROR = new String[]{
"货叉尖部传感器触发", "S300传感器触发", "载货状态改变", "急停按钮触发", "触边开关出发", "需要复位",
"停在充电位", "取货失败", "放货失败", "轮子打滑", "没有动作码不能进入站点", "取货时有货", "丢失定位",
"抬叉停止"};
boolean bConnected = true;
boolean isReConnect = false;
@Autowired
ParamService paramService;
@Autowired
AutoRunService autoRunService;
public TwoNDC2SocketConnectionAutoRun() {
this.recordTime = new Date((new Date()).getTime() - (long) this.recordTimeOut);
}
public String getCode() {
return TwoNDC2SocketConnectionAutoRun.class.getSimpleName();
}
public String getName() {
return "2楼2区域AGV系统";
}
public void autoRun() {
try {
System.out.println("2楼2区域AGV系统链接开始");
ParamService paramService = SpringContextHolder.getBean(ParamServiceImpl.class);
InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class);
AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class);
NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvService.class);
DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class);
DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class);
ip = paramService.findByCode(AcsConfig.AGVURL22).getValue();
port = Integer.parseInt(paramService.findByCode(AcsConfig.AGVPORT22).getValue());
byte[] b = new byte[1028];
s = new Socket(ip, port);
System.out.println("2楼2区域AGV链接成功");
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
while (bConnected) {
int count = dis.read(b);
if (count == -1) {
break;
}
int[] arr = new int[count];
StringBuffer bs = new StringBuffer();
for (int i = 0; i < count; i++) {
int temp = b[i];
if (temp < 0)
temp += 256;
arr[i] = temp;
StringBuffer bs1 = new StringBuffer("0");
bs.append(temp < 16 ? bs1.append(Integer.toHexString(temp)) : Integer.toHexString(temp));
}
System.out.println("收到请求参数:" + bs);
boolean flag = false;
if (arr[8] * 256 + arr[9] == 0x73) {
byte[] data = null;
System.out.println("接收agv上报信息:" + bs);
//执行阶段
int phase = arr[16] * 256 + arr[17];
// agv任务号
int index = arr[12] * 256 + arr[13];
//任务号
int ikey = arr[26] * 256 + arr[27];
//站点号
int agvaddr = arr[18] * 256 + arr[19];
//车号
int carno = arr[20];
Instruction inst = null;
if (ikey != 0) {
inst = instructionService.findByCodeFromCache(String.valueOf(ikey));
}
log.info("接收agv上报信息:" + bs);
log.info("接收agv上报信息:" + "phase--" + phase + " index--" + index + " ikey--" + ikey + " agvaddr--" + agvaddr + " Car--" + carno);
Device device = null;
String device_code = null;
String old_device_code = null;
String emptyNum = null;
if (agvaddr != 0) {
old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr);
if (StrUtil.contains(old_device_code, "-")) {
String[] point = old_device_code.split("-");
device_code = point[0];
} else if (StrUtil.contains(old_device_code, ".")) {
String[] point = old_device_code.split("\\.");
device_code = point[0];
emptyNum = point[1];
} else {
device_code = old_device_code;
}
device = deviceAppService.findDeviceByCode(device_code);
}
AgvNdcTwoDeviceDriver agvNdcTwoDeviceDriver;
//开始任务
if (phase == 0x01) {
if (!ObjectUtil.isEmpty(inst)) {
inst.setInstruction_status("1");
inst.setAgv_jobno(String.valueOf(index));
inst.setSend_status("1");
instructionService.update(inst);
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
}
flag = true;
}
//任务完毕
//(无车id及状态)
else if (phase == 0x14) {
if (ObjectUtil.isEmpty(inst)) {
log.info("未找到指令号{}对应的指令", ikey);
break;
}
inst.setInstruction_status("2");
instructionService.finish(inst);
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
}
//请求删除任务
//(需要WCS反馈)
else if (phase == 0x30) {
if (ObjectUtil.isEmpty(inst)) {
log.info("未找到指令号{}对应的指令", ikey);
break;
}
data = ndcAgvService.sendAgvTwoModeInst(0x8F, index, 0);
}
//任务删除确认
//(需要WCS反馈)
else if (phase == 0xFF) {
if (ObjectUtil.isEmpty(inst)) {
log.info("未找到指令号{}对应的指令", ikey);
break;
}
instructionService.cancelNOSendAgv(inst.getInstruction_id());
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
} else {
//上报异常信息
//(不需要WCS反馈)
if(phase == 0x67){
device = deviceAppService.findDeviceByCode(Integer.toString(arr[27]));
} else {
device = deviceAppService.findDeviceByCode(Integer.toString(arr[20]));
}
if (device.getDeviceDriver() instanceof AgvNdcTwoDeviceDriver) {
agvNdcTwoDeviceDriver = (AgvNdcTwoDeviceDriver) device.getDeviceDriver();
agvNdcTwoDeviceDriver.processSocket(arr);
}
}
if (!ObjectUtil.isEmpty(data)) {
write(data);
}
} else {
System.out.println("agv上报不是0073类型动作,不处理");
}
}
} catch (Exception e) {
} finally {
}
}
@Override
public void stop() {
super.after();
try {
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void write(byte[] b) {
try {
log.info("下发agv数据:" + Bytes2HexString(b));
System.out.println("下发agv数据:" + Bytes2HexString(b));
dos.write(b);
dos.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

245
acs/nladmin-system/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java

@ -1,245 +0,0 @@
package org.nl.acs.auto.run;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.nl.acs.AcsConfig;
import org.nl.acs.agv.server.NDCAgvService;
import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device_driver.basedriver.agv.ndcone.AgvNdcOneDeviceDriver;
import org.nl.acs.device_driver.basedriver.agv.ndctwo.AgvNdcTwoDeviceDriver;
import org.nl.acs.ext.wms.service.AcsToWmsService;
import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl;
import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.instruction.service.dto.Instruction;
import org.nl.acs.instruction.service.impl.InstructionServiceImpl;
import org.nl.acs.opc.Device;
import org.nl.acs.opc.DeviceAppService;
import org.nl.modules.system.service.ParamService;
import org.nl.modules.system.service.impl.ParamServiceImpl;
import org.nl.modules.wql.util.SpringContextHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Date;
import java.util.List;
import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString;
@Slf4j
@Component
public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
Socket s;
String ip = "192.168.46.225";
int port = 1234;
static DataOutputStream dos;
static DataInputStream dis;
private int recordTimeOut = 10000;
private Date recordTime;
String[] ERROR = new String[]{
"货叉尖部传感器触发", "S300传感器触发", "载货状态改变", "急停按钮触发", "触边开关出发", "需要复位",
"停在充电位", "取货失败", "放货失败", "轮子打滑", "没有动作码不能进入站点", "取货时有货", "丢失定位",
"抬叉停止"};
boolean bConnected = true;
boolean isReConnect = false;
@Autowired
ParamService paramService;
@Autowired
AutoRunService autoRunService;
public TwoNDCSocketConnectionAutoRun() {
this.recordTime = new Date((new Date()).getTime() - (long) this.recordTimeOut);
}
public String getCode() {
return TwoNDCSocketConnectionAutoRun.class.getSimpleName();
}
public String getName() {
return "2楼1区域AGV系统";
}
public void autoRun() {
try {
System.out.println("2楼1区域AGV系统链接开始");
ParamService paramService = SpringContextHolder.getBean(ParamServiceImpl.class);
InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class);
AcsToWmsService acsToWmsService = SpringContextHolder.getBean(AcsToWmsServiceImpl.class);
NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvService.class);
DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class);
DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class);
ip = paramService.findByCode(AcsConfig.AGVURL).getValue();
port = Integer.parseInt(paramService.findByCode(AcsConfig.AGVPORT).getValue());
byte[] b = new byte[1028];
s = new Socket(ip, port);
System.out.println("2楼1区域Agv链接成功");
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
while (bConnected) {
int count = dis.read(b);
if (count == -1) {
break;
}
int[] arr = new int[count];
StringBuffer bs = new StringBuffer();
for (int i = 0; i < count; i++) {
int temp = b[i];
if (temp < 0)
temp += 256;
arr[i] = temp;
StringBuffer bs1 = new StringBuffer("0");
bs.append(temp < 16 ? bs1.append(Integer.toHexString(temp)) : Integer.toHexString(temp));
}
System.out.println("收到请求参数:" + bs);
boolean flag = false;
if (arr[8] * 256 + arr[9] == 0x73) {
byte[] data = null;
System.out.println("接收agv上报信息:" + bs);
//执行阶段
int phase = arr[16] * 256 + arr[17];
// agv任务号
int index = arr[12] * 256 + arr[13];
//任务号
int ikey = arr[26] * 256 + arr[27];
//站点号
int agvaddr = arr[18] * 256 + arr[19];
//车号
int carno = arr[20];
Instruction inst = null;
if (ikey != 0) {
inst = instructionService.findByCodeFromCache(String.valueOf(ikey));
}
log.info("接收agv上报信息:" + bs);
log.info("接收agv上报信息:" + "phase--" + phase + " index--" + index + " ikey--" + ikey + " agvaddr--" + agvaddr + " Car--" + carno);
Device device = null;
String device_code = null;
String old_device_code = null;
String emptyNum = null;
if (agvaddr != 0) {
old_device_code = deviceService.queryDeviceCodeByAddress(agvaddr);
if (StrUtil.contains(old_device_code, "-")) {
String[] point = old_device_code.split("-");
device_code = point[0];
} else if (StrUtil.contains(old_device_code, ".")) {
String[] point = old_device_code.split("\\.");
device_code = point[0];
emptyNum = point[1];
} else {
device_code = old_device_code;
}
device = deviceAppService.findDeviceByCode(device_code);
}
AgvNdcTwoDeviceDriver agvNdcTwoDeviceDriver;
//开始任务
if (phase == 0x01) {
if (!ObjectUtil.isEmpty(inst)) {
inst.setInstruction_status("1");
inst.setAgv_jobno(String.valueOf(index));
inst.setSend_status("1");
instructionService.update(inst);
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
}
flag = true;
}
//任务完毕
//(无车id及状态)
else if (phase == 0x14) {
if (ObjectUtil.isEmpty(inst)) {
log.info("未找到指令号{}对应的指令", ikey);
break;
}
inst.setInstruction_status("2");
instructionService.finish(inst);
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
}
//请求删除任务
//(需要WCS反馈)
else if (phase == 0x30) {
if (ObjectUtil.isEmpty(inst)) {
log.info("未找到指令号{}对应的指令", ikey);
break;
}
data = ndcAgvService.sendAgvTwoModeInst(0x8F, index, 0);
}
//任务删除确认
//(需要WCS反馈)
else if (phase == 0xFF) {
if (ObjectUtil.isEmpty(inst)) {
log.info("未找到指令号{}对应的指令", ikey);
break;
}
instructionService.cancelNOSendAgv(inst.getInstruction_id());
data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0);
} else {
//上报异常信息
//(不需要WCS反馈)
if(phase == 0x67){
device = deviceAppService.findDeviceByCode(Integer.toString(arr[27]));
} else {
device = deviceAppService.findDeviceByCode(Integer.toString(arr[20]));
}
if (device.getDeviceDriver() instanceof AgvNdcTwoDeviceDriver) {
agvNdcTwoDeviceDriver = (AgvNdcTwoDeviceDriver) device.getDeviceDriver();
agvNdcTwoDeviceDriver.processSocket(arr);
}
}
if (!ObjectUtil.isEmpty(data)) {
write(data);
}
} else {
System.out.println("agv上报不是0073类型动作,不处理");
}
}
} catch (Exception e) {
} finally {
}
}
@Override
public void stop() {
super.after();
try {
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void write(byte[] b) {
try {
log.info("下发agv数据:" + Bytes2HexString(b));
System.out.println("下发agv数据:" + Bytes2HexString(b));
dos.write(b);
dos.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

78
acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java

@ -7,8 +7,11 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.acs.agv.server.NDCAgvService; import org.nl.acs.agv.server.NDCAgvService;
import org.nl.acs.auto.run.OneNDCSocketConnectionAutoRun; import org.nl.acs.auto.run.OneNDCSocketConnectionAutoRun;
import org.nl.acs.common.StandardInspectSiteDevice;
import org.nl.acs.device.service.DeviceService; import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.basedriver.siemens_conveyor.SiemensConveyorDeviceDriver;
import org.nl.acs.device_driver.basedriver.standard_inspect_site.StandardInspectSiteDeviceDriver;
import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver;
import org.nl.acs.device_driver.basedriver.standard_storage.StandardStorageDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_storage.StandardStorageDeviceDriver;
import org.nl.acs.device_driver.driver.AbstractDeviceDriver; import org.nl.acs.device_driver.driver.AbstractDeviceDriver;
@ -26,7 +29,10 @@ import org.nl.modules.system.service.ParamService;
import org.nl.modules.system.service.impl.ParamServiceImpl; import org.nl.modules.system.service.impl.ParamServiceImpl;
import org.nl.modules.wql.util.SpringContextHolder; import org.nl.modules.wql.util.SpringContextHolder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* NDC单工位AGV * NDC单工位AGV
@ -78,13 +84,17 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
int carno = arr[20]; int carno = arr[20];
Instruction link_inst = null; Instruction link_inst = null;
List<Instruction> insts = null; List<Instruction> insts = null;
Instruction inst = null;
boolean link_flag = false; boolean link_flag = false;
Device agv_device = null; Device agv_device = null;
if (carno != 0) { if (carno != 0) {
agv_device = deviceAppService.findDeviceByCode(String.valueOf(carno)); agv_device = deviceAppService.findDeviceByCode(String.valueOf(carno));
} }
if (ikey != 0) { if (ikey != 0) {
insts = instructionService.findByLinkNum(String.valueOf(ikey)); inst = instructionService.findByCodeFromCache(String.valueOf(ikey));
if (ObjectUtil.isEmpty(inst)) {
inst = instructionService.findByCode(String.valueOf(ikey));
}
} }
if (!ObjectUtil.isEmpty(link_inst)) { if (!ObjectUtil.isEmpty(link_inst)) {
link_flag = true; link_flag = true;
@ -106,15 +116,14 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
//普通站点 //普通站点
StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver; StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver;
//货架 //货架
StandardStorageDeviceDriver standardStorageDeviceDriver; StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver;
//
//分配 车id //分配 车id
//(不需要WCS反馈) //(不需要WCS反馈)
if (phase == 0x02) { if (phase == 0x02) {
for (Instruction inst : insts) {
inst.setCarno(String.valueOf(carno)); inst.setCarno(String.valueOf(carno));
instructionService.update(inst); instructionService.update(inst);
}
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + "反馈:" + data);
//到达取货点 //到达取货点
@ -148,12 +157,11 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
logServer.deviceExecuteLog(this.device_code, "", "", agvaddr + "对应设备号为空"); logServer.deviceExecuteLog(this.device_code, "", "", agvaddr + "对应设备号为空");
return; return;
} }
for (Instruction inst : insts) {
//校验agv上报站点编号与指令起始点相同 //校验agv上报站点编号与指令起始点相同
if (ObjectUtil.isEmpty(inst)) { if (ObjectUtil.isEmpty(inst)) {
log.info("未找到关联编号{}对应的指令", ikey); log.info("未找到编号{}对应的指令", ikey);
logServer.deviceExecuteLog(this.device_code, "", "", "未找到关联编号对应的指令" + ikey); logServer.deviceExecuteLog(this.device_code, "", "", "未找到关联编号对应的指令" + ikey);
break; return;
} }
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
@ -161,13 +169,10 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
standardOrdinarySiteDeviceDriver.setAgvphase(phase); standardOrdinarySiteDeviceDriver.setAgvphase(phase);
standardOrdinarySiteDeviceDriver.setIndex(index); standardOrdinarySiteDeviceDriver.setIndex(index);
standardOrdinarySiteDeviceDriver.setInst(inst); standardOrdinarySiteDeviceDriver.setInst(inst);
}
if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) {
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
} }
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);
}
//取货完毕 //取货完毕
//(需要WCS反馈) //(需要WCS反馈)
} else if (phase == 0x05) { } else if (phase == 0x05) {
@ -198,12 +203,11 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
logServer.deviceExecuteLog(this.device_code, "", "", "对应设备号为空" + device_code); logServer.deviceExecuteLog(this.device_code, "", "", "对应设备号为空" + device_code);
return; return;
} }
for (Instruction inst : insts) {
//校验agv上报站点编号与指令起始点相同 //校验agv上报站点编号与指令起始点相同
if (ObjectUtil.isEmpty(inst)) { if (ObjectUtil.isEmpty(inst)) {
log.info("未找到关联编号{}对应的指令", ikey); log.info("未找到关联编号{}对应的指令", ikey);
logServer.deviceExecuteLog(this.device_code, "", "", "未找到关联编号对应的指令" + ikey); logServer.deviceExecuteLog(this.device_code, "", "", "未找到关联编号对应的指令" + ikey);
break; return;
} }
if (StrUtil.equals(inst.getStart_device_code(), device_code)) { if (StrUtil.equals(inst.getStart_device_code(), device_code)) {
@ -213,14 +217,9 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
standardOrdinarySiteDeviceDriver.setAgvphase(phase); standardOrdinarySiteDeviceDriver.setAgvphase(phase);
standardOrdinarySiteDeviceDriver.setIndex(index); standardOrdinarySiteDeviceDriver.setIndex(index);
standardOrdinarySiteDeviceDriver.setInst(inst); standardOrdinarySiteDeviceDriver.setInst(inst);
}
if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) {
standardStorageDeviceDriver = (StandardStorageDeviceDriver) device.getDeviceDriver();
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
} }
} }
}
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);
//到达放货点 //到达放货点
@ -251,23 +250,19 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
log.info(agvaddr + "对应设备号为空!"); log.info(agvaddr + "对应设备号为空!");
return; return;
} }
for (Instruction inst : insts) {
//校验agv上报站点编号与指令起始点相同 //校验agv上报站点编号与指令起始点相同
if (ObjectUtil.isEmpty(inst)) { if (ObjectUtil.isEmpty(inst)) {
log.info("未找到关联编号{}对应的指令", ikey); log.info("未找到关联编号{}对应的指令", ikey);
break; return;
} }
if (StrUtil.equals(inst.getNext_device_code(), device_code)) { if (StrUtil.equals(inst.getNext_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) {
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver();
standardOrdinarySiteDeviceDriver.setAgvphase(phase); // standardOrdinarySiteDeviceDriver.setAgvphase(phase);
standardOrdinarySiteDeviceDriver.setIndex(index); // standardOrdinarySiteDeviceDriver.setIndex(index);
standardOrdinarySiteDeviceDriver.setInst(inst); // standardOrdinarySiteDeviceDriver.setInst(inst);
} if (standardInspectSiteDeviceDriver.getMove() == 0) {
if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) {
standardStorageDeviceDriver = (StandardStorageDeviceDriver) device.getDeviceDriver();
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
} }
} }
@ -303,25 +298,24 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
log.info(agvaddr + "对应设备号为空!"); log.info(agvaddr + "对应设备号为空!");
return; return;
} }
for (Instruction inst : insts) {
//校验agv上报站点编号与指令起始点相同 //校验agv上报站点编号与指令起始点相同
if (ObjectUtil.isEmpty(inst)) { if (ObjectUtil.isEmpty(inst)) {
log.info("未找到关联编号{}对应的指令", ikey); log.info("未找到编号{}对应的指令", ikey);
break; return;
} }
if (StrUtil.equals(inst.getNext_device_code(), device_code)) { if (StrUtil.equals(inst.getNext_device_code(), device_code)) {
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) {
standardOrdinarySiteDeviceDriver.setAgvphase(phase); standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver();
standardOrdinarySiteDeviceDriver.setIndex(index); // standardOrdinarySiteDeviceDriver.setAgvphase(phase);
standardOrdinarySiteDeviceDriver.setInst(inst); // standardOrdinarySiteDeviceDriver.setIndex(index);
} // standardOrdinarySiteDeviceDriver.setInst(inst);
if (device.getDeviceDriver() instanceof StandardStorageDeviceDriver) { if (standardInspectSiteDeviceDriver.getMove() > 0) {
standardStorageDeviceDriver = (StandardStorageDeviceDriver) device.getDeviceDriver();
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
} }
} }
} }
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);
@ -334,10 +328,10 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
agvaddr_copy = agvaddr; agvaddr_copy = agvaddr;
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);
}else if(phase == 0x50){//进入交通灯区域 } else if (phase == 0x50) {//进入交通灯区域
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);
}else if(phase == 0x51){//离开交通灯区域 } else if (phase == 0x51) {//离开交通灯区域
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0);
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);
} }

6
acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndctwo/AgvNdcTwoDeviceDriver.java

@ -6,8 +6,6 @@ import lombok.Data;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.acs.agv.server.NDCAgvService; import org.nl.acs.agv.server.NDCAgvService;
import org.nl.acs.auto.run.TwoNDC2SocketConnectionAutoRun;
import org.nl.acs.auto.run.TwoNDCSocketConnectionAutoRun;
import org.nl.acs.device.service.DeviceService; import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver;
@ -469,9 +467,9 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
if (!ObjectUtil.isEmpty(data)) { if (!ObjectUtil.isEmpty(data)) {
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);
if (StrUtil.equals(inst.getAgv_system_type(), "2")) { if (StrUtil.equals(inst.getAgv_system_type(), "2")) {
TwoNDCSocketConnectionAutoRun.write(data); //TwoNDCSocketConnectionAutoRun.write(data);
} else if (StrUtil.equals(inst.getAgv_system_type(), "3")) { } else if (StrUtil.equals(inst.getAgv_system_type(), "3")) {
TwoNDC2SocketConnectionAutoRun.write(data); //TwoNDC2SocketConnectionAutoRun.write(data);
} }
} }
} }

54
acs/nladmin-system/src/main/java/org/nl/acs/hand/amb/service/impl/AMHandServiceImpl.java

@ -90,14 +90,19 @@ public class AMHandServiceImpl implements AMHandService {
String device_id = device.getString("device_id"); String device_id = device.getString("device_id");
String device_code = device.getString("device_code"); String device_code = device.getString("device_code");
String device_name = device.getString("device_name"); String device_name = device.getString("device_name");
JSONObject deviceRunPoint = wo_runPoint.query("device_id = '" + device_id + "'").uniqueResult(0); StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver;
Integer hasgoods = deviceRunPoint.getInteger("hasgoods"); StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver;
String material_type = deviceRunPoint.getString("material_type"); Device device_driver = deviceAppService.findDeviceByCode(device_code);
//点位状态status对应status_name 0空 1有货 2有任务 //点位状态status对应status_name 0空 1有货 2有任务
String status = "0"; String status = "0";
String status_name = "无货"; String status_name = "无货";
String input_material = "0"; String input_material = "0";
String allow_update = "0"; String allow_update = "0";
String material_type = "0";
if (device_driver.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
JSONObject deviceRunPoint = wo_runPoint.query("device_id = '" + device_id + "'").uniqueResult(0);
Integer hasgoods = deviceRunPoint.getInteger("hasgoods");
material_type = deviceRunPoint.getString("material_type");
TaskDto taskDto = taskService.findByStartAndNextCode(device_code); TaskDto taskDto = taskService.findByStartAndNextCode(device_code);
if (ObjectUtil.isNotEmpty(taskDto) && hasgoods == 1) { if (ObjectUtil.isNotEmpty(taskDto) && hasgoods == 1) {
status = "2"; status = "2";
@ -106,10 +111,21 @@ public class AMHandServiceImpl implements AMHandService {
status = "1"; status = "1";
status_name = "有货"; status_name = "有货";
} }
Device device_driver = deviceAppService.findDeviceByCode(device_code);
if (device_driver.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
input_material = "1"; input_material = "1";
allow_update = "1"; allow_update = "1";
} else if (device_driver.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) {
standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device_driver.getDeviceDriver();
int move = standardInspectSiteDeviceDriver.getMove();
TaskDto taskDto = taskService.findByStartAndNextCode(device_code);
if (move != 0 && ObjectUtil.isNotEmpty(taskDto)) {
status = "2";
status_name = "有任务";
material_type = "1";
} else if (move != 0) {
status = "1";
status_name = "有货";
material_type = "1";
}
} }
JSONObject map = new JSONObject(); JSONObject map = new JSONObject();
map.put("device_id", device_id); map.put("device_id", device_id);
@ -671,12 +687,12 @@ public class AMHandServiceImpl implements AMHandService {
status = "1"; status = "1";
} }
JSONObject map = new JSONObject(); JSONObject map = new JSONObject();
if (StrUtil.equals(type, "0")) { if (StrUtil.equals(type, "1")) {
map.put("material_type", "");
map.put("hasgoods", "0");
} else {
map.put("material_type", material_type); map.put("material_type", material_type);
map.put("hasgoods", status); map.put("hasgoods", status);
} else {
map.put("material_type", "");
map.put("hasgoods", "0");
} }
wo_runPoint.update(map, "device_code = '" + device_code + "'"); wo_runPoint.update(map, "device_code = '" + device_code + "'");
jo.put("code", "1"); jo.put("code", "1");
@ -753,6 +769,21 @@ public class AMHandServiceImpl implements AMHandService {
jo.put("desc", "呼叫失败,起点或终点不能为空!"); jo.put("desc", "呼叫失败,起点或终点不能为空!");
return jo; return jo;
} }
for (int i = 0; i < start_device_codes.size(); i++) {
String device_code = start_device_codes.getString(i);
Device device = deviceAppService.findDeviceByCode(device_code);
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) {
JSONObject jsonObject = wo_runPoint.query("device_code = '" + device_code + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonObject)){
String hasgoods = jsonObject.getString("hasgoods");
if (StrUtil.equals(hasgoods,"0")){
throw new BadRequestException("设备:" + device_code + "库存为无货状态,请手动绑定货物!");
}
}
} else if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) {
}
}
//将数组转换为集合判断是否为同一排的库位,并按照库位顺序号排序 //将数组转换为集合判断是否为同一排的库位,并按照库位顺序号排序
List<String> start_device_code_list = JSONArray.parseArray(start_device_codes.toJSONString(), String.class); List<String> start_device_code_list = JSONArray.parseArray(start_device_codes.toJSONString(), String.class);
Collections.sort(start_device_code_list, new Comparator<String>() { Collections.sort(start_device_code_list, new Comparator<String>() {
@ -808,13 +839,14 @@ public class AMHandServiceImpl implements AMHandService {
taskDto.setCreate_by(SecurityUtils.getCurrentUsername()); taskDto.setCreate_by(SecurityUtils.getCurrentUsername());
taskDto.setUpdate_by(SecurityUtils.getCurrentUsername()); taskDto.setUpdate_by(SecurityUtils.getCurrentUsername());
taskDto.setRoute_plan_code("normal"); taskDto.setRoute_plan_code("normal");
taskDto.setTask_type("3"); //任务类型
taskDto.setTask_type("4");
taskDto.setTask_status("0"); taskDto.setTask_status("0");
taskDto.setPriority("1"); taskDto.setPriority("1");
taskDto.setCreate_time(DateUtil.now()); taskDto.setCreate_time(DateUtil.now());
taskDto.setUpdate_time(DateUtil.now()); taskDto.setUpdate_time(DateUtil.now());
taskDto.setRemark("手持创建任务!"); taskDto.setRemark("手持创建任务!");
taskDto.setAgv_system_type("2"); taskDto.setAgv_system_type("1");
taskDto.setMaterial(jsonObject.getString("material")); taskDto.setMaterial(jsonObject.getString("material"));
TaskService taskService = SpringContextHolder.getBean(TaskServiceImpl.class); TaskService taskService = SpringContextHolder.getBean(TaskServiceImpl.class);
try { try {

2
acs/nladmin-system/src/main/java/org/nl/acs/hand/amb/wql/QJN_QUERY001.wql

@ -54,6 +54,8 @@
LEFT JOIN sys_dict_detail dtl ON dtl.dict_id = sys.dict_id LEFT JOIN sys_dict_detail dtl ON dtl.dict_id = sys.dict_id
WHERE WHERE
sys.NAME = "region_type" sys.NAME = "region_type"
order by
dict_sort
ENDSELECT ENDSELECT
ENDQUERY ENDQUERY
ENDIF ENDIF

3
acs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java

@ -217,6 +217,9 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu
public Instruction findByCode(String code) { public Instruction findByCode(String code) {
WQLObject wo = WQLObject.getWQLObject("acs_instruction"); WQLObject wo = WQLObject.getWQLObject("acs_instruction");
JSONObject json = wo.query("instruction_code ='" + code + "'").uniqueResult(0); JSONObject json = wo.query("instruction_code ='" + code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(json)){
return null;
}
final Instruction obj = json.toJavaObject(Instruction.class); final Instruction obj = json.toJavaObject(Instruction.class);
return obj; return obj;
} }

2
acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java

@ -1170,7 +1170,7 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial {
return task; return task;
} }
} }
return new TaskDto(); return null;
} }
@Override @Override

2
acs/nladmin-system/src/main/java/org/nl/modules/quartz/utils/ExecutionJob.java

@ -25,6 +25,7 @@ import org.nl.modules.quartz.domain.QuartzLog;
import org.nl.modules.quartz.repository.QuartzLogRepository; import org.nl.modules.quartz.repository.QuartzLogRepository;
import org.nl.modules.quartz.service.QuartzJobService; import org.nl.modules.quartz.service.QuartzJobService;
import org.nl.modules.wql.util.SpringContextHolder; import org.nl.modules.wql.util.SpringContextHolder;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.quartz.QuartzJobBean; import org.springframework.scheduling.quartz.QuartzJobBean;
@ -41,6 +42,7 @@ import java.util.concurrent.ThreadPoolExecutor;
@Async @Async
@SuppressWarnings({"unchecked", "all"}) @SuppressWarnings({"unchecked", "all"})
@Slf4j @Slf4j
@DisallowConcurrentExecution
public class ExecutionJob extends QuartzJobBean { public class ExecutionJob extends QuartzJobBean {
/** /**

4
acs/nladmin-ui/src/views/acs/task/index.vue

@ -460,7 +460,7 @@ export default {
task_id: null, task_id: null,
vehicle_code: null, vehicle_code: null,
vehicle_type: null, vehicle_type: null,
task_type: '3', task_type: '4',
storage_task_type: '', storage_task_type: '',
task_status: null, task_status: null,
priority: 1, priority: 1,
@ -479,7 +479,7 @@ export default {
to_x: null, to_x: null,
to_y: null, to_y: null,
to_z: null, to_z: null,
agv_system_type: '2' agv_system_type: '1'
}, },
rules: { rules: {
start_point_code: [ start_point_code: [

Loading…
Cancel
Save