Browse Source

add:任务取消同步ndc;

任务反馈wcs重试。
1
gongbaoxiong 2 months ago
parent
commit
d182f6feac
  1. 74
      nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java
  2. 30
      nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java
  3. 32
      nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java
  4. 7
      nlsso-server/src/main/java/org/nl/quartz/task/SyncDeviceStatus.java
  5. 2
      nlsso-server/src/main/resources/logback-spring.xml

74
nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java

@ -500,36 +500,36 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
}
}
//到达桁架2请求放货
if (device.getDeviceDriver() instanceof Hj1DeviceDriver) {
hj1DeviceDriver = (Hj1DeviceDriver) device.getDeviceDriver();
hj1DeviceDriver.writing(7);
log.info("agv到达" + device_code + ",放货点,开始写入信号7进行进入申请,当前信号值为:Mode:" + hj1DeviceDriver.getMode() + ",Move:" + hj1DeviceDriver.getMove() + ",Action:" + hj1DeviceDriver.getAction());
if (device.getDeviceDriver() instanceof Hj2DeviceDriver) {
hj2DeviceDriver = (Hj2DeviceDriver) device.getDeviceDriver();
hj2DeviceDriver.writing(7);
log.info("agv到达" + device_code + ",放货点,开始写入信号7进行进入申请,当前信号值为:Mode:" + hj2DeviceDriver.getMode() + ",Move:" + hj2DeviceDriver.getMove() + ",Action:" + hj2DeviceDriver.getAction());
//反馈WMS请求放货
//sendAgvTaskStatus(inst, device_code, Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("请求取货")));
if (hj1DeviceDriver.getMode() != 0 && hj1DeviceDriver.getMove() == 0) {
if (hj1DeviceDriver.getAction() == 3) {
log.info("设备" + device_code + "的Action信号已变更为3允许进入,当前信号值为:Mode:" + hj1DeviceDriver.getMode() + ",Move:" + hj1DeviceDriver.getMove() + ",Action:" + hj1DeviceDriver.getAction() + ",agv开始进入放货。");
if (hj2DeviceDriver.getMode() != 0 && hj2DeviceDriver.getMove() == 0) {
if (hj2DeviceDriver.getAction() == 3) {
log.info("设备" + device_code + "的Action信号已变更为3允许进入,当前信号值为:Mode:" + hj2DeviceDriver.getMode() + ",Move:" + hj2DeviceDriver.getMove() + ",Action:" + hj2DeviceDriver.getAction() + ",agv开始进入放货。");
agv_status = 2;
flag = true;
data = getData(data, index, inst, task);
} else {
log.info("设备" + device_code + "的Action信号未变更为3,不允许进入,当前信号值为:Mode:" + hj1DeviceDriver.getMode() + ",Move:" + hj1DeviceDriver.getMove() + ",Action:" + hj1DeviceDriver.getAction() + ",尝试重新写入信号7进行进入申请");
hj1DeviceDriver.writing(7);
log.info("设备" + device_code + "已完成信号7写入,当前信号值为:" + "Mode:" + hj1DeviceDriver.getMode() + ",Move:" + hj1DeviceDriver.getMove() + ",Action:" + hj1DeviceDriver.getAction());
log.info("设备" + device_code + "的Action信号未变更为3,不允许进入,当前信号值为:Mode:" + hj2DeviceDriver.getMode() + ",Move:" + hj2DeviceDriver.getMove() + ",Action:" + hj2DeviceDriver.getAction() + ",尝试重新写入信号7进行进入申请");
hj2DeviceDriver.writing(7);
log.info("设备" + device_code + "已完成信号7写入,当前信号值为:" + "Mode:" + hj2DeviceDriver.getMode() + ",Move:" + hj2DeviceDriver.getMove() + ",Action:" + hj2DeviceDriver.getAction());
//反馈WMS请求放货
//sendAgvTaskStatus(inst, device_code, Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("请求取货")));
}
hj1DeviceDriver.setMessage("");
hj2DeviceDriver.setMessage("");
} else {
String message = "";
if (hj1DeviceDriver.getMode() == 0) {
if (hj2DeviceDriver.getMode() == 0) {
message += "设备Mode值为0,设备异常,请检查!";
} else {
message += "设备光电信号不为0,站点有货,请检查!";
}
message += "不允许AGV放货。";
agv_message = hj1DeviceDriver.getDevice_code() + message;
hj1DeviceDriver.setMessage(message);
agv_message = hj2DeviceDriver.getDevice_code() + message;
hj2DeviceDriver.setMessage(message);
logServer.deviceExecuteLog(device_code, "", "", message);
log.info(device_code + message);
lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message));
@ -605,24 +605,24 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
}
transportOrder = "";
// "========================================================================放货完成================================================================================="
//到达桁架2放货完成
if (device.getDeviceDriver() instanceof Hj2DeviceDriver) {
hj2DeviceDriver = (Hj2DeviceDriver) device.getDeviceDriver();
log.info("agv进入" + device_code + ",放货完成,开始写入信号5进行安全交互,当前信号值为:Mode:" + hj2DeviceDriver.getMode() + ",Move:" + hj2DeviceDriver.getMove() + ",Action:" + hj2DeviceDriver.getAction());
hj2DeviceDriver.writing(5);
if (hj2DeviceDriver.getMode() == 4) {
log.info("设备" + device_code + "的Mode信号已变更为4,当前信号值为:Mode:" + hj2DeviceDriver.getMode() + ",Move:" + hj2DeviceDriver.getMove() + ",Action:" + hj2DeviceDriver.getAction() + ",开始写入0清除mode信号。");
hj2DeviceDriver.writing(0);
//到达桁架1放货完成
if (device.getDeviceDriver() instanceof Hj1DeviceDriver) {
hj1DeviceDriver = (Hj1DeviceDriver) device.getDeviceDriver();
log.info("agv进入" + device_code + ",放货完成,开始写入信号5进行安全交互,当前信号值为:Mode:" + hj1DeviceDriver.getMode() + ",Move:" + hj1DeviceDriver.getMove() + ",Action:" + hj1DeviceDriver.getAction());
hj1DeviceDriver.writing(5);
if (hj1DeviceDriver.getMode() == 4) {
log.info("设备" + device_code + "的Mode信号已变更为4,当前信号值为:Mode:" + hj1DeviceDriver.getMode() + ",Move:" + hj1DeviceDriver.getMove() + ",Action:" + hj1DeviceDriver.getAction() + ",开始写入0清除mode信号。");
hj1DeviceDriver.writing(0);
agv_status = 0;
flag = true;
data = actionComplete(index, inst, device_code, hj2DeviceDriver.getTo_command(), Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("放货完成")), "放货完成");
log.info("设备" + device_code + "已完成信号0写入,当前信号值为:" + "Mode:" + hj2DeviceDriver.getMode() + ",Move:" + hj2DeviceDriver.getMove() + ",Action:" + hj2DeviceDriver.getAction() + ",agv开始离开。");
data = actionComplete(index, inst, device_code, hj1DeviceDriver.getTo_command(), Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("放货完成")), "放货完成");
log.info("设备" + device_code + "已完成信号0写入,当前信号值为:" + "Mode:" + hj1DeviceDriver.getMode() + ",Move:" + hj1DeviceDriver.getMove() + ",Action:" + hj1DeviceDriver.getAction() + ",agv开始离开。");
} else {
log.info("设备" + device_code + "的Mode信号未变更为4,当前信号值为:Mode:" + hj2DeviceDriver.getMode() + ",Move:" + hj2DeviceDriver.getMove() + ",Action:" + hj2DeviceDriver.getAction() + ",尝试重新写入信号5进行安全交互");
hj2DeviceDriver.writing(5);
log.info("设备" + device_code + "已完成信号5写入,当前信号值为:" + "Mode:" + hj2DeviceDriver.getMode() + ",Move:" + hj2DeviceDriver.getMove() + ",Action:" + hj2DeviceDriver.getAction());
log.info("设备" + device_code + "的Mode信号未变更为4,当前信号值为:Mode:" + hj1DeviceDriver.getMode() + ",Move:" + hj1DeviceDriver.getMove() + ",Action:" + hj1DeviceDriver.getAction() + ",尝试重新写入信号5进行安全交互");
hj1DeviceDriver.writing(5);
log.info("设备" + device_code + "已完成信号5写入,当前信号值为:" + "Mode:" + hj1DeviceDriver.getMode() + ",Move:" + hj1DeviceDriver.getMove() + ",Action:" + hj1DeviceDriver.getAction());
}
hj2DeviceDriver.setMessage("");
hj1DeviceDriver.setMessage("");
}
//到达桁架2放货完成
if (device.getDeviceDriver() instanceof Hj2DeviceDriver) {
@ -647,19 +647,19 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
if (device.getDeviceDriver() instanceof SsxDeviceDriver) {
ssxDeviceDriver = (SsxDeviceDriver) device.getDeviceDriver();
log.info("agv进入" + device_code + ",放货完成,开始写入信号5进行安全交互,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
// ssxDeviceDriver.writing(5);
// if (ssxDeviceDriver.getMode() == 4) {
ssxDeviceDriver.writing(5);
if (ssxDeviceDriver.getMode() == 4) {
log.info("设备" + device_code + "的Mode信号已变更为4,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",开始写入0清除mode信号。");
// ssxDeviceDriver.writing(0);
ssxDeviceDriver.writing(0);
agv_status = 0;
flag = true;
data = actionComplete(index, inst, device_code, ssxDeviceDriver.getTo_command(), Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("放货完成")), "放货完成");
log.info("设备" + device_code + "已完成信号0写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",agv开始离开。");
// } else {
// log.info("设备" + device_code + "的Mode信号未变更为4,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",尝试重新写入信号5进行安全交互");
// ssxDeviceDriver.writing(5);
// log.info("设备" + device_code + "已完成信号5写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
// }
} else {
log.info("设备" + device_code + "的Mode信号未变更为4,当前信号值为:Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction() + ",尝试重新写入信号5进行安全交互");
ssxDeviceDriver.writing(5);
log.info("设备" + device_code + "已完成信号5写入,当前信号值为:" + "Mode:" + ssxDeviceDriver.getMode() + ",Move:" + ssxDeviceDriver.getMove() + ",Action:" + ssxDeviceDriver.getAction());
}
ssxDeviceDriver.setMessage("");
}
//agv普通站点放货完成
@ -779,7 +779,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
.method("feedAgvTaskStatus")
.build();
luceneExecuteLogService.deviceExecuteLog(reqlogDto);
for (int i = 0; i < 5; i++) {
for (int i = 0; i < 10; i++) {
log.info("点位:" + device_code + ",agv开始反馈wcs动作" + AgvActionEnum.ACTION_STATUS.check(String.valueOf(status)) );
JSONObject resp = acsToWmsService.feedAgvTaskAction(ja);
if ("200".equals(resp.getString("code"))) {

30
nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java

@ -1,5 +1,6 @@
package org.nl.acs.instruction.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
@ -14,6 +15,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.nl.acs.AcsConfig;
import org.nl.acs.agv.server.MagicAgvService;
@ -1221,13 +1223,17 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
boolean flag = false;
InstructionDto entity = this.findById(id);
if (entity == null) {
throw new BadRequestException("被删除或无权限,操作失败!");
List<InstructionMybatis> entities = this.list(new LambdaQueryWrapper<InstructionMybatis>().eq(InstructionMybatis::getTask_id, id).lt(InstructionMybatis::getInstruction_status, 2));
if (CollectionUtils.isNotEmpty(entities)) {
entity = BeanUtil.copyProperties(entities.get(0), InstructionDto.class);
} else {
return;
}
}
TaskDto task = taskService.findByCodeFromCache(entity.getTask_code());
if (StrUtil.isEmpty(entity.getRoute_plan_code())) {
entity.setRoute_plan_code(task.getRoute_plan_code());
}
// != 0 为agv任务 1=magic 2=NDC 3=XZ,4=ZHEDA
if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "1")
&& !StrUtil.equals(entity.getSend_status(), "2")) {
@ -1237,12 +1243,12 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
} else if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "2")) {
// NDC agv指令不当场取消指令,需要等agv上报
if (!StrUtil.isEmpty(entity.getAgv_jobno())) {
if (StrUtil.isEmpty(entity.getAgv_jobno())) {
throw new BadRequestException("该任务已下发NDC,等待NDC反馈任务号,暂时无法取消!");
} else {
ndcAgvService.deleteAgvInstToNDC(new Instruction(entity));
flag = true;
}
// } else {
flag = true;
// }
} else {
flag = true;
}
@ -1252,22 +1258,16 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
zheDaAgvService.deleteZDAgvInst(entity.getInstruction_code());
flag = true;
}
if (flag) {
String currentUsername = SecurityUtils.getCurrentUsername();
String now = DateUtil.now();
entity.setUpdate_time(now);
entity.setUpdate_by(currentUsername);
entity.setInstruction_status("3");
// WQLObject wo = WQLObject.getWQLObject("acs_instruction");
// JSONObject json = (JSONObject) JSONObject.toJSON(entity);
// wo.update(json);
InstructionMybatis ins = ConvertUtil.convert(entity, InstructionMybatis.class);
instructionMapper.updateById(ins);
DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class);
// 如果是无光电的设备 指令完成变更起点、终点状态
JSONObject jo = new JSONObject();
jo.put("device_code", entity.getStart_device_code());
@ -1283,7 +1283,6 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
jo.put("batch", entity.getBatch());
jo.put("islock", "false");
deviceService.changeDeviceStatus(jo);
JSONObject jo1 = new JSONObject();
jo1.put("device_code", entity.getNext_device_code());
jo.put("hasGoodStatus", "0");
@ -1291,7 +1290,6 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
jo.put("batch", "");
jo1.put("islock", "false");
deviceService.changeDeviceStatus(jo1);
String instnextdevice = entity.getNext_device_code();
Device device = appService.findDeviceByCode(instnextdevice);
if (device == null) {
@ -1299,9 +1297,9 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
return;
}
removeByCodeFromCache(entity.getInstruction_code());
// taskService.cancel(entity.getTask_id());
// taskService.cancel(entity.getTask_id());
}
// this.reload();
// this.reload();
}
@Override

32
nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java

@ -963,33 +963,29 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
if (entity == null) {
throw new BadRequestException("被删除或无权限,操作失败!");
}
InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl");
InstructionDto instdto = instructionservice.findByTaskid(id, "instruction_status <2 ");
if (instdto != null) {
throw new BadRequestException("有指令未完成!");
try {
InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl");
instructionservice.cancel(id);
} catch (Exception e) {
throw new BadRequestException(e.getMessage());
}
String currentUsername = SecurityUtils.getCurrentUsername();
String now = DateUtil.now();
entity.setUpdate_time(now);
entity.setUpdate_by(currentUsername);
entity.setTask_status("3");
Task task = ConvertUtil.convert(entity, Task.class);
taskMapper.updateById(task);
// synchronized (TaskServiceImpl.class){
// Iterator<TaskDto> it = tasks.iterator();
// // 清理缓存
// while (it.hasNext()) {
// TaskDto taskDto = it.next();
// if (taskDto.getTask_id().equals(id)) {
// tasks.remove(taskDto);
// }
// }}
// synchronized (TaskServiceImpl.class){
// Iterator<TaskDto> it = tasks.iterator();
// // 清理缓存
// while (it.hasNext()) {
// TaskDto taskDto = it.next();
// if (taskDto.getTask_id().equals(id)) {
// tasks.remove(taskDto);
// }
// }}
removeByCodeFromCache(entity.getTask_code());
// 判断是否为WMS下发的任务,如果是反馈任务状态给WMS
String hasWms = paramService.findByCode(AcsConfig.HASWMS).getValue();
if (!StrUtil.startWith(entity.getTask_code(), "-") && StrUtil.equals(hasWms, "1")) {

7
nlsso-server/src/main/java/org/nl/quartz/task/SyncDeviceStatus.java

@ -86,11 +86,12 @@ public class SyncDeviceStatus {
param.put("AGV", AGV);
redisUtils.set("AGV", AGV);
//agv状态信息反馈
acsToWmsService.shipAgvUpdate(AGV);
//log.trace("自动上 报agv状态,完毕耗时{}", System.currentTimeMillis() - startTime);
//acsToWmsService.shipAgvUpdate(AGV);
log.trace("自动上报agv状态,完毕耗时{}", System.currentTimeMillis() - startTime);
Integer sd =0;
}
} catch (Exception e) {
// log.error("自动线程开始查询AGV设备状态失败{}{}", e, e.getMessage());
log.error("自动线程开始查询AGV设备状态失败{}{}", e, e.getMessage());
}
}
}

2
nlsso-server/src/main/resources/logback-spring.xml

@ -71,7 +71,7 @@ https://juejin.cn/post/6844903775631572999
<!--添加loki-->
<!--开发环境:打印控制台-->
<springProfile name="dev">
<root level="debug">
<root level="info">
<appender-ref ref="asyncLuceneAppender"/>
<appender-ref ref="asyncFileAppender"/>
</root>

Loading…
Cancel
Save