add:新增wcs接口

This commit is contained in:
2026-02-12 10:40:20 +08:00
parent ed9a42b086
commit 39839495d8
11 changed files with 933 additions and 479 deletions

View File

@@ -2,17 +2,27 @@ package org.nl.acs.device_driver.basedriver.standard_inspect_site;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.dreamlu.mica.core.utils.StringUtil;
import org.apache.commons.lang3.ObjectUtils;
import org.nl.acs.device.device_driver.standard_inspect.ReadUtil;
import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.RouteableDeviceDriver;
import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver;
import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver;
import org.nl.acs.device_driver.driver.ExecutableDeviceDriver;
import org.nl.acs.ext.wms.service.AcsToHJXService;
import org.nl.acs.ext.wms.service.AcsToMesService;
import org.nl.acs.ext.wms.service.AcsToNDCService;
import org.nl.acs.ext.wms.service.AcsToZDWmsService;
import org.nl.acs.instruction.enums.InstTypeEnum;
import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.instruction.service.dto.Instruction;
import org.nl.acs.monitor.DeviceStageMonitor;
@@ -24,12 +34,15 @@ import org.nl.acs.route.service.RouteLineService;
import org.nl.acs.route.service.dto.RouteLineDto;
import org.nl.acs.task.service.TaskService;
import org.nl.acs.task.service.dto.TaskDto;
import org.nl.modules.lucene.service.LuceneExecuteLogService;
import org.nl.modules.lucene.service.dto.LuceneLogDto;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.openscada.opc.lib.da.Server;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException;
import java.util.*;
/**
@@ -48,6 +61,15 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp
RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl");
@Autowired
TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl");
DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class);
DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class);
LuceneExecuteLogService luceneExecuteLogService = SpringContextHolder.getBean(LuceneExecuteLogService.class);
//外部系统交互
AcsToZDWmsService acsToZDWmsService = SpringContextHolder.getBean(AcsToZDWmsService.class);
AcsToHJXService acsToHJXService = SpringContextHolder.getBean(AcsToHJXService.class);
AcsToMesService acsToMesService = SpringContextHolder.getBean(AcsToMesService.class);
AcsToNDCService acsToNDCService = SpringContextHolder.getBean(AcsToNDCService.class);
String container;
String container_type_desc;
String last_container_type_desc;
@@ -132,172 +154,438 @@ public class StandardInspectSiteDeviceDriver extends AbstractOpcDeviceDriver imp
@Override
public void execute() {
String message = null;
// try {
// String device_code = this.getDeviceCode();
// mode = this.itemProtocol.getMode();
// error = this.itemProtocol.getError();
// move = this.itemProtocol.getMove();
// task = this.itemProtocol.getTask();
// hasGoods = this.itemProtocol.getMove();
//
// if (mode != last_mode) {
// this.setRequireSucess(false);
// }
// if (move != last_move) {
// }
// if (error != last_error) {
// }
// if (this.getApply_handling()) {
// String link_device_code = this.getDevice().getExtraValue().get("link_device_code").toString();
// DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
// Device link_device = appService.findDeviceByCode(link_device_code);
// StandardInspectSiteDeviceDriver standardInspectSiteDevicedriver;
// if (link_device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) {
// standardInspectSiteDevicedriver = (StandardInspectSiteDeviceDriver) link_device.getDeviceDriver();
//// if(standardInspectSiteDevicedriver.getMode() != 2){
//// log.debug("设备未待机");
//// return;
//// }
//// if(standardInspectSiteDevicedriver.getMove() != 0){
//// log.debug("设备不满足放货条件");
//// return;
//// }
//
// //如果目标设备申请叫料 则允许生成任务
// if (standardInspectSiteDevicedriver.getApply_material()) {
// TaskDto dto = new TaskDto();
// String now = DateUtil.now();
// dto.setTask_id(IdUtil.simpleUUID());
// dto.setCreate_by(this.getDevice().getDevice_code());
// dto.setUpdate_by(this.getDevice().getDevice_code());
// dto.setStart_point_code(this.getDevice().getDevice_code());
//
// String taskcode = CodeUtil.getNewCode("TASK_NO");
// dto.setTask_code("-" + taskcode);
// dto.setTask_status("0");
// dto.setPriority("101");
//// RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code());
//// String next_device_codecode = jo.getNext_device_code();
//// if(StrUtil.isEmpty(next_device_codecode)){
//// throw new RuntimeException("该设备未找到对应路由");
//// }
// dto.setNext_point_code(standardInspectSiteDevicedriver.getDevicecode());
// dto.setUpdate_time(now);
// dto.setCreate_time(now);
//
// WQLObject wo = WQLObject.getWQLObject("acs_task");
// JSONObject json = (JSONObject) JSONObject.toJSON(dto);
//
// wo.insert(json);
// standardInspectSiteDevicedriver.setApply_material(false);
// }
// }
// this.setApply_handling(false);
// }
try {
this.devicecode = this.getDevice().getDevice_code();
if (this.reqTakeRequireSuccess && ObjectUtil.isNotEmpty(this.reqTakeInstCode)) {
Instruction instruction = instructionService.findByCodeFromCache(this.reqTakeInstCode);
//取货申请
if (ObjectUtil.isNotEmpty(instruction) && StrUtil.equals(instruction.getStart_point_code(), this.devicecode)) {
if (agvphase == 1) {
device = deviceAppService.findDeviceByCode(this.devicecode);
TaskService taskService = SpringContextHolder.getBean("taskServiceImpl");
TaskDto task = taskService.findByCode(instruction.getTask_code());
if ((StrUtil.startWith(task.getTask_code(), "-"))) {
log.info("定点任务下发agv允许取货信号");
HttpResponse result = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
Object ext_system = device.getExtraValue().get("ext_system");
//检测站点,安全交互类型为中鼎的
if (!StringUtil.isEmpty(ext_system)) {
if (ext_system.equals("1")) {
JSONObject jo = new JSONObject();
jo.put("taskCode", task.getTask_code());
jo.put("carId", instruction.getCarno());
jo.put("taskType ", task.getTask_type());
jo.put("feedbackStatus", "applyTake");
log.info("请求wms取货参数:{}", jo);
HttpResponse result = acsToZDWmsService.taskFeedback(jo);
JSONObject response = JSONObject.parseObject(result.body());
int responseCode = response.getInteger("responseCode");
if (responseCode == 0) {
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
log.error("请求wms取货失败参数:{}", response);
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(this.getDeviceCode())
.content("请求wms取货失败参数::" + response)
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
}
//焊接线
} else if (ext_system.equals("3")) {
JSONObject jo1 = new JSONObject();
jo1.put("point", this.devicecode);
jo1.put("type", "1");
jo1.put("containerCode", task.getVehicle_code());
Object url = device.getExtraValue().get("address");
if (StringUtil.isEmpty(ext_system)) {
log.error("请求安全交互失败未配置焊接线IP" + this.devicecode);
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(this.getDeviceCode())
.content("请求安全交互失败未配置焊接线IP" + this.devicecode)
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
return;
}
jo1.put("url", url);
HttpResponse result = acsToHJXService.actionRequest(jo1);
JSONObject response = JSONObject.parseObject(result.body());
int code = response.getInteger("code");
if (code == 200) {
log.info("请求焊接线成功,申请取货 请求结果{}", code);
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(this.getDeviceCode())
.content("请求焊接线成功,申请取货 请求结果:" + code)
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
log.error("请求焊接线失败,申请区货 错误信息{}", response);
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(this.getDeviceCode())
.content("请求焊接线失败,申请区货 错误信息:" + response)
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
}
} else if (ext_system.equals("2")) {
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
}
} else {
log.error("检测站点未配置检测系统");
LuceneLogDto logDto = LuceneLogDto.builder()
.device_code(this.getDeviceCode())
.content("检测站点未配置检测系统")
.build();
logDto.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto);
return;
}
}
}
if (agvphase == 2) {
device = deviceAppService.findDeviceByCode(this.devicecode);
TaskService taskService = SpringContextHolder.getBean("taskServiceImpl");
TaskDto task = taskService.findByCode(instruction.getTask_code());
// } catch (Exception var17) {
// return;
// }
//
// if (!this.itemProtocol.getIsonline()) {
// this.setIsonline(false);
// this.setIserror(true);
// message = "信号量同步异常";
// //未联机
// } else if (mode == 0) {
// this.setIsonline(false);
// this.setIserror(true);
// message = "未联机";
// //有报警
// } else if (error != 0) {
// this.setIsonline(false);
// this.setIserror(true);
// message = "有报警";
// //无报警
// } else {
// this.setIsonline(true);
// this.setIserror(false);
// message = "";
// Instruction instruction = null;
// List toInstructions;
// switch (mode) {
// case 1:
// log.debug("设备运转模式:等待工作");
// return;
// case 2:
//申请任务
// if (this.getApply_handling()) {
// String link_device_code = this.getDevice().getExtraValue().get("link_device_code").toString();
// DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
// Device link_device = appService.findDeviceByCode(link_device_code);
// StandardInspectSiteDeviceDriver standardInspectSiteDevicedriver;
// if(link_device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) {
// standardInspectSiteDevicedriver = (StandardInspectSiteDeviceDriver) link_device.getDeviceDriver();
// if(standardInspectSiteDevicedriver.getMode() != 2){
// log.debug("设备未待机");
// return;
// }
// if(standardInspectSiteDevicedriver.getMove() != 0){
// log.debug("设备不满足放货条件");
// return;
// }
//
// //如果目标设备申请叫料 则允许生成任务
// if(standardInspectSiteDevicedriver.getApply_material()){
// TaskDto dto = new TaskDto();
// String now = DateUtil.now();
// dto.setTask_id(IdUtil.simpleUUID());
// dto.setCreate_by(this.getDevice().getDevice_code());
// dto.setUpdate_by(this.getDevice().getDevice_code());
// dto.setStart_point_code(this.getDevice().getDevice_code());
//
// String taskcode = CodeGenerateUtil.getNewCode("TASK_NO");
// dto.setTask_code("-"+taskcode);
// dto.setTask_status("0");
// dto.setPriority("101");
// RouteLineDto jo = routelineserver.findByCode(this.getDevice().getDevice_code());
// String next_device_codecode = jo.getNext_device_code();
// if(StrUtil.isEmpty(next_device_codecode)){
// throw new RuntimeException("该设备未找到对应路由");
// }
// dto.setNext_point_code(next_device_codecode);
// dto.setUpdate_time(now);
// dto.setCreate_time(now);
//
// WQLObject wo = WQLObject.getWQLObject("acs_task");
// JSONObject json = (JSONObject) JSONObject.toJSON(dto);
if ((StrUtil.startWith(task.getTask_code(), "-"))) {
log.info("定点任务下发agv允许取货信号");
HttpResponse result = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
Object ext_system = device.getExtraValue().get("ext_system");
//检测站点,安全交互类型为中鼎的
if (!StringUtil.isEmpty(ext_system)) {
if (ext_system.equals("1")) {
JSONObject jo = new JSONObject();
jo.put("taskCode", task.getTask_code());
jo.put("carId", instruction.getCarno());
jo.put("taskType ", task.getTask_type());
jo.put("feedbackStatus", "takeFinish");
log.info("请求wms取货完毕参数:{}", jo);
HttpResponse result = acsToZDWmsService.taskFeedback(jo);
JSONObject response = JSONObject.parseObject(result.body());
int responseCode = response.getInteger("responseCode");
if (responseCode == 0) {
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
log.error("请求wms取货失败参数:{}", response);
}
//焊接线
} else if (ext_system.equals("3")) {
JSONObject jo = new JSONObject();
jo.put("taskCode", task.getTask_code());
jo.put("carId", instruction.getCarno());
jo.put("taskType ", task.getTask_type());
jo.put("feedbackStatus", "takeFinish");
log.info("请求MES取货完成参数:{}", jo);
HttpResponse result = acsToMesService.taskFeedback(jo);
JSONObject response = JSONObject.parseObject(result.body());
int responseCode = response.getInteger("responseCode");
if (responseCode == 0) {
log.info("请求MES成功取货完成 请求结果{}", responseCode);
JSONObject jo1 = new JSONObject();
jo1.put("point", this.devicecode);
jo1.put("type", "3");
jo1.put("containerCode", task.getVehicle_code());
Object url = device.getExtraValue().get("address");
if (StringUtil.isEmpty(ext_system)) {
log.error("请求焊接线失败未配置焊接线IP" + this.devicecode);
return;
}
jo1.put("url", url);
HttpResponse result2 = acsToHJXService.actionFinish(jo1);
JSONObject response2 = JSONObject.parseObject(result2.body());
int code = response2.getInteger("code");
if (code == 200) {
log.info("请求焊接线成功,申请取货完成 请求结果{}", code);
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
log.info("请求焊接线失败,申请取货完成 错误信息{}", response2);
}
} else {
log.info("请求MES取货完成失败取货完成 错误码{}", responseCode);
}
} else if (ext_system.equals("2")) {
JSONObject jo = new JSONObject();
jo.put("taskCode", task.getTask_code());
jo.put("carId", instruction.getCarno());
jo.put("taskType ", task.getTask_type());
jo.put("feedbackStatus", "takeFinish");
log.info("请求MES取货完成参数:{}", jo);
HttpResponse result = acsToMesService.taskFeedback(jo);
JSONObject response = JSONObject.parseObject(result.body());
int responseCode = response.getInteger("responseCode");
if (responseCode == 0) {
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
}
}
}
}
}
}
//放货申请
else if (ObjectUtil.isNotEmpty(instruction) && StrUtil.equals(instruction.getNext_point_code(), this.devicecode)) {
if (agvphase == 3) {
device = deviceAppService.findDeviceByCode(this.devicecode);
TaskService taskService = SpringContextHolder.getBean("taskServiceImpl");
TaskDto task = taskService.findByCode(instruction.getTask_code());
if ((StrUtil.startWith(task.getTask_code(), "-"))) {
log.info("定点任务下发agv允许取货信号");
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
Object ext_system = device.getExtraValue().get("ext_system");
//检测站点,安全交互类型为中鼎的
if (!StringUtil.isEmpty(ext_system)) {
if (ext_system.equals("1")) {
JSONObject jo = new JSONObject();
jo.put("taskCode", task.getTask_code());
jo.put("carId", instruction.getCarno());
jo.put("taskType ", task.getTask_type());
jo.put("feedbackStatus", "applyPut");
log.info("请求wms请求放货参数:{}", jo);
HttpResponse result = acsToZDWmsService.taskFeedback(jo);
JSONObject response = JSONObject.parseObject(result.body());
int responseCode = response.getInteger("responseCode");
if (responseCode == 0) {
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
log.error("请求wms请求放货失败参数:{}", response);
}
//焊接线
} else if (ext_system.equals("3")) {
JSONObject jo1 = new JSONObject();
jo1.put("point", this.devicecode);
jo1.put("type", "2");
jo1.put("containerCode", task.getVehicle_code());
Object url = device.getExtraValue().get("address");
if (StringUtil.isEmpty(ext_system)) {
log.error("请求焊接线请求放货未配置焊接线IP" + this.devicecode);
return;
}
jo1.put("url", url);
HttpResponse result = acsToHJXService.actionRequest(jo1);
JSONObject response = JSONObject.parseObject(result.body());
int code = response.getInteger("code");
if (code == 200) {
log.info("请求焊接线放货成功,申请取货 请求结果{}", code);
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
log.error("请求焊接线放货失败,申请区货 错误信息{}", response);
return;
}
} else if (ext_system.equals("2")) {
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
}
} else {
log.error("检测站点未配置检测系统");
return;
}
}
}
if (agvphase == 4) {
device = deviceAppService.findDeviceByCode(this.devicecode);
TaskService taskService = SpringContextHolder.getBean("taskServiceImpl");
TaskDto task = taskService.findByCode(instruction.getTask_code());
if ((StrUtil.startWith(task.getTask_code(), "-"))) {
log.info("定点任务下发agv允许取货信号");
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
Object ext_system = device.getExtraValue().get("ext_system");
//检测站点,安全交互类型为中鼎的
if (!StringUtil.isEmpty(ext_system)) {
if (ext_system.equals("1")) {
JSONObject jo = new JSONObject();
jo.put("taskCode", task.getTask_code());
jo.put("carId", instruction.getCarno());
jo.put("taskType ", task.getTask_type());
jo.put("feedbackStatus", "putFinish");
log.info("请求wms放货完成参数:{}", jo);
HttpResponse result = acsToZDWmsService.taskFeedback(jo);
JSONObject response = JSONObject.parseObject(result.body());
int responseCode = response.getInteger("responseCode");
if (responseCode == 0) {
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
log.error("请求wms放货失败参数:{}", response);
return;
}
//焊接线
} else if (ext_system.equals("3")) {
JSONObject jo = new JSONObject();
jo.put("taskCode", task.getTask_code());
jo.put("carId", instruction.getCarno());
jo.put("taskType ", task.getTask_type());
jo.put("feedbackStatus", "putFinish");
log.info("请求MES放货完成参数:{}", jo);
HttpResponse result = acsToMesService.taskFeedback(jo);
JSONObject response = JSONObject.parseObject(result.body());
int responseCode = response.getInteger("responseCode");
if (responseCode == 0) {
JSONObject jo1 = new JSONObject();
jo1.put("point", this.devicecode);
jo1.put("type", "4");
jo1.put("containerCode", task.getVehicle_code());
Object url = device.getExtraValue().get("address");
if (StringUtil.isEmpty(ext_system)) {
log.error("请求MES放货完成失败未配置焊接线IP" + this.devicecode);
}
jo1.put("url", url);
HttpResponse result2 = acsToHJXService.actionFinish(jo1);
JSONObject response2 = JSONObject.parseObject(result2.body());
int code = response2.getInteger("code");
if (code == 200) {
log.info("请求焊接线放货货完成成功,请求结果{}", code);
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
log.info("请求焊接线放货货完成失败 错误信息{}", response2);
return;
}
} else {
log.info("请求MES放货完成失败,错误码{}", responseCode);
return;
}
} else if (ext_system.equals("2")) {
JSONObject jo = new JSONObject();
jo.put("taskCode", task.getTask_code());
jo.put("carId", instruction.getCarno());
jo.put("taskType ", task.getTask_type());
jo.put("feedbackStatus", "putFinish");
log.info("请求MES放货完成参数:{}", jo);
HttpResponse result = acsToMesService.taskFeedback(jo);
JSONObject response = JSONObject.parseObject(result.body());
int responseCode = response.getInteger("responseCode");
if (responseCode == 0) {
HttpResponse result1 = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result1) || result1.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
log.info("请求MES放货货完成失败 错误信息{}", responseCode);
return;
}
}
}
}
// wo.insert(json);
// standardInspectSiteDevicedriver.setApply_material(false);
// }
// }
// this.setApply_handling(false);
// }
// if (material.length() > 0 && qty.length() > 0 && !requireSucess) {
// this.instruction_require(container);
// }
// }
//
// switch (flag) {
// //取货完成
// case 1:
// writing(2);
// return;
// //放货完成
// case 2:
// writing(3);
// return;
//
// }
//
// }
// last_mode = mode;
// last_error = error;
// last_move = move;
// last_task = task;
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}

View File

@@ -1,10 +1,13 @@
package org.nl.acs.device_driver.basedriver.standard_ordinary_site;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.nl.acs.agv.server.AgvService;
import org.nl.acs.agv.server.NDCAgvService;
import org.nl.acs.device.service.DeviceService;
@@ -12,7 +15,7 @@ import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.RouteableDeviceDriver;
import org.nl.acs.device_driver.driver.AbstractDeviceDriver;
import org.nl.acs.device_driver.driver.ExecutableDeviceDriver;
import org.nl.acs.ext.wms.service.AcsToWmsService;
import org.nl.acs.ext.wms.service.*;
import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl;
import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.instruction.service.dto.Instruction;
@@ -21,9 +24,12 @@ import org.nl.acs.monitor.DeviceStageMonitor;
import org.nl.acs.opc.DeviceAppService;
import org.nl.acs.route.service.RouteLineService;
import org.nl.acs.task.service.TaskService;
import org.nl.acs.task.service.dto.TaskDto;
import org.nl.modules.lucene.service.LuceneExecuteLogService;
import org.nl.modules.wql.util.SpringContextHolder;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException;
import java.util.Date;
@@ -52,6 +58,14 @@ public class StandardOrdinarySiteDeviceDriver extends AbstractDeviceDriver imple
DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class);
@Autowired
NDCAgvService agvService = SpringContextHolder.getBean(NDCAgvService.class);
DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class);
DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class);
LuceneExecuteLogService luceneExecuteLogService = SpringContextHolder.getBean(LuceneExecuteLogService.class);
//外部系统交互
AcsToZDWmsService acsToZDWmsService = SpringContextHolder.getBean(AcsToZDWmsService.class);
AcsToHJXService acsToHJXService = SpringContextHolder.getBean(AcsToHJXService.class);
AcsToMesService acsToMesService = SpringContextHolder.getBean(AcsToMesService.class);
AcsToNDCService acsToNDCService = SpringContextHolder.getBean(AcsToNDCService.class);
Integer hasGoods = 0;
@@ -108,6 +122,7 @@ public class StandardOrdinarySiteDeviceDriver extends AbstractDeviceDriver imple
// 1 上位系统允许进入 2 上位系统允许离开
int status = 0;
String devicecode;
//1取货请求 2取货完成完成 3放货请求 4放货完成 -1进入请求 -2请求离开
private volatile int agvphase = 0;
@@ -124,72 +139,139 @@ public class StandardOrdinarySiteDeviceDriver extends AbstractDeviceDriver imple
@Override
public void execute() {
hasGoods = this.getDevice().getHas_goods();
batch = this.getDevice().getBatch();
device_code = this.getDeviceCode();
if (agvphase == 0x03) {
if (ObjectUtil.isNotEmpty(inst)) {
inst.setExecute_status("1");
instructionService.update(inst);
byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0);
agvphase = 0;
index = 0;
inst = null;
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + agvphase + "反馈成功");
try {
this.devicecode = this.getDevice().getDevice_code();
if (this.reqTakeRequireSuccess && ObjectUtil.isNotEmpty(this.reqTakeInstCode)) {
Instruction instruction = instructionService.findByCodeFromCache(this.reqTakeInstCode);
//取货申请
if (ObjectUtil.isNotEmpty(instruction) && StrUtil.equals(instruction.getStart_point_code(), this.devicecode)) {
if (agvphase == 1) {
device = deviceAppService.findDeviceByCode(this.devicecode);
HttpResponse result = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) {
return;
} else {
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + agvphase + "等待反馈");
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
}
if (agvphase == 2) {
device = deviceAppService.findDeviceByCode(this.devicecode);
TaskService taskService = SpringContextHolder.getBean("taskServiceImpl");
TaskDto task = taskService.findByCode(instruction.getTask_code());
if (agvphase == 0x05) {
if (ObjectUtil.isNotEmpty(inst)) {
inst.setExecute_status("2");
instructionService.update(inst);
byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0);
// OneNDCSocketConnectionAutoRun.write(data);
agvphase = 0;
index = 0;
inst = null;
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + agvphase + "反馈成功");
if ((StrUtil.startWith(task.getTask_code(), "-"))) {
log.info("定点任务下发agv允许取货信号");
HttpResponse result = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) {
return;
} else {
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + agvphase + "等待反馈");
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
}
if (agvphase == 0x07) {
if (ObjectUtil.isNotEmpty(inst)) {
inst.setExecute_status("5");
instructionService.update(inst);
byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0);
// OneNDCSocketConnectionAutoRun.write(data);
agvphase = 0;
index = 0;
inst = null;
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + agvphase + "反馈成功");
} else {
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + agvphase + "等待反馈");
//MES下发需要上报取货完成
if ("2".equals(task.getCreate_by())) {
JSONObject jo = new JSONObject();
jo.put("taskCode", task.getTask_code());
jo.put("carId", instruction.getCarno());
jo.put("taskType ", task.getTask_type());
jo.put("feedbackStatus", "takeFinish");
log.info("请求MES取货完成参数:{}", jo);
HttpResponse result = acsToMesService.taskFeedback(jo);
JSONObject response = JSONObject.parseObject(result.body());
int responseCode = response.getInteger("responseCode");
if (responseCode != 0) {
log.error("请求MES取货完成失败参数:{}", response);
return;
}
}
if (agvphase == 0x09) {
if (ObjectUtil.isNotEmpty(inst)) {
inst.setExecute_status("6");
instructionService.update(inst);
byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0);
// OneNDCSocketConnectionAutoRun.write(data);
agvphase = 0;
index = 0;
inst = null;
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + agvphase + "反馈成功");
HttpResponse result = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) {
return;
} else {
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + agvphase + "等待反馈");
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
}
}
}
//放货申请
else if (ObjectUtil.isNotEmpty(instruction) && StrUtil.equals(instruction.getNext_point_code(), this.devicecode)) {
if (agvphase == 3) {
device = deviceAppService.findDeviceByCode(this.devicecode);
HttpResponse result = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
}
if (agvphase == 4) {
device = deviceAppService.findDeviceByCode(this.devicecode);
TaskService taskService = SpringContextHolder.getBean("taskServiceImpl");
TaskDto task = taskService.findByCode(instruction.getTask_code());
if ((StrUtil.startWith(task.getTask_code(), "-"))) {
log.info("定点任务下发agv允许取货信号");
HttpResponse result = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
} else {
//mes下发需要上报放货完成
if ("2".equals(task.getCreate_by())) {
JSONObject jo = new JSONObject();
jo.put("taskCode", task.getTask_code());
jo.put("carId", instruction.getCarno());
jo.put("taskType ", task.getTask_type());
jo.put("feedbackStatus", "putFinish");
log.info("请求MES放货完成参数:{}", jo);
HttpResponse result = acsToMesService.taskFeedback(jo);
JSONObject response = JSONObject.parseObject(result.body());
int responseCode = response.getInteger("responseCode");
if (responseCode != 0) {
log.error("请求MES放货失败参数:{}", response);
return;
} //wms下发需要上报放货完成
} else if ("1".equals(task.getCreate_by())) {
JSONObject jo = new JSONObject();
jo.put("taskCode", task.getTask_code());
jo.put("carId", instruction.getCarno());
jo.put("taskType ", task.getTask_type());
jo.put("feedbackStatus", "putFinish");
log.info("请求WMS放货完成参数:{}", jo);
HttpResponse result = acsToZDWmsService.taskFeedback(jo);
JSONObject response = JSONObject.parseObject(result.body());
int responseCode = response.getInteger("responseCode");
if (responseCode != 0) {
log.info("请求WMS放货货完成失败 错误信息{}", responseCode);
return;
}
}
HttpResponse result = acsToNDCService.genAgvSchedulingTask(instruction, 10);
if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) {
return;
} else {
this.reqTakeRequireSuccess = false;
this.reqTakeInstCode = null;
this.agvphase = 0;
}
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override

View File

@@ -1,7 +1,10 @@
package org.nl.acs.ext.wms.service;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import org.nl.acs.instruction.service.dto.Instruction;
public interface AcsToNDCService {
HttpResponse genAgvSchedulingTask(Instruction instruction,int type);
}

View File

@@ -1,12 +1,94 @@
package org.nl.acs.ext.wms.service.impl;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.acs.AcsConfig;
import org.nl.acs.device.address.service.AddressService;
import org.nl.acs.device.address.service.dto.AddressDto;
import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device.service.impl.DeviceServiceImpl;
import org.nl.acs.ext.wms.NdcHttpUtil;
import org.nl.acs.ext.wms.UnifiedResponse;
import org.nl.acs.ext.wms.service.AcsToNDCService;
import org.nl.acs.instruction.service.dto.Instruction;
import org.nl.modules.lucene.service.LuceneExecuteLogService;
import org.nl.modules.lucene.service.dto.LuceneLogDto;
import org.nl.modules.system.service.ParamService;
import org.nl.modules.wql.util.SpringContextHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
@Slf4j
public class AcsToNDCServiceImpl implements AcsToNDCService {
private final ParamService paramService;
@Autowired
private LuceneExecuteLogService luceneExecuteLogService;
@Autowired
AddressService addressService;
/**
* 生成任务单
*
* @param instruction
* @return
*/
@Override
public HttpResponse genAgvSchedulingTask(Instruction instruction,int type) {
JSONObject jo = new JSONObject();
jo.put("receiver", "NDC");
jo.put("sender", "ACS");
jo.put("type", type);
JSONObject ja = new JSONObject();
//type 3:下发任务
if (type==3) {
ja.put("taskId", instruction.getInstruction_code());
DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class);
int startAddress = deviceService.queryAddressBydeviceCode(instruction.getStart_point_code());
int nextAddress = deviceService.queryAddressBydeviceCode(instruction.getNext_point_code());
ja.put("pickId", startAddress);
ja.put("pickName", instruction.getStart_point_code());
ja.put("releaseId", nextAddress);
ja.put("releaseIdName", instruction.getNext_point_code());
ja.put("taskType", 5);
ja.put("vehicleId", 0);
ja.put("priority", 0);
jo.put("params", ja);
}
//type 9:取消任务
else if (type==9){
ja.put("taskId", instruction.getInstruction_code());
jo.put("params", ja);
}
//type 10:取放货请求应答
else if (type==10){
ja.put("taskId", instruction.getInstruction_code());
ja.put("taskPhase", instruction.getExecute_status());
jo.put("params", ja);
}
String wmsurl = paramService.findByCode(AcsConfig.WCSURL).getValue();
AddressDto addressDto = addressService.findByCode("applyTaskToWcs");
String url = wmsurl + addressDto.getMethods_url();
HttpResponse result = HttpRequest.post(url)
//表单内容
.body(String.valueOf(jo))
//超时,毫秒
.timeout(20000)
.execute();
LuceneLogDto logDto1 = LuceneLogDto.builder()
.device_code("下发科聪任务")
.content("任务号:" + instruction.getTask_code() + ",指令号:" + instruction.getInstruction_code() + ",下发wcs任务序列反馈参数:" + jo)
.build();
logDto1.setLog_level(4);
luceneExecuteLogService.deviceExecuteLog(logDto1);
log.info("任务号:{},指令号{},状态{},下发agv订单序列反馈:{}", instruction.getTask_code(), instruction.getInstruction_code(), result.getStatus(), result.body());
return result;
}
}

View File

@@ -45,20 +45,16 @@ public class NDCToAcsServiceImpl implements NDCToAcsService {
String type = requestParam.getString("type");
JSONObject params = requestParam.getJSONObject("params");
//任务状态上报
if (MsgTypeEnum.TASK_STATE_RPT.getValue().equals(type)) {
String taskId = params.getString("taskId");
String taskPhase = params.getString("taskPhase");
String taskState = params.getString("taskState");
String taskPoint = params.getString("taskPoint");
String taskPoint = params.getString("taskPoint");//请求进入/离开需要上报站点号
StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver;
StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver;
//请求进入/请求离开
if (StrUtil.isNotEmpty(taskPhase)&&(TaskPhaseEnum.ENTER_REQUEST_OR_ALLOWED.getValue().equals(taskPhase)||TaskPhaseEnum.LEAVE_NOTICE_OR_ALLOWED.getValue().equals(taskPhase))){
}else if (StrUtil.isNotEmpty(taskPhase)&&(TaskPhaseEnum.PICKUP_REQUEST_OR_RESPONSE.getValue().equals(taskPhase)||TaskPhaseEnum.PICKUP_COMPLETE.getValue().equals(taskPhase)||TaskPhaseEnum.RELEASE_REQUEST_OR_RESPONSE.getValue().equals(taskPhase)||TaskPhaseEnum.RELEASE_COMPLETE.getValue().equals(taskPhase)||TaskStateEnum.NOT_STARTED.getValue().equals(taskPhase)||TaskStateEnum.EXECUTING.getValue().equals(taskPhase)||TaskStateEnum.COMPLETED.getValue().equals(taskPhase))){
Instruction instruction = instructionService.findByCodeFromCache(taskId);
if (ObjectUtil.isEmpty(instruction)) {
resp.put("code", "400");
resp.put("message", "请求失败,任务信息不存在,指令号:" + taskId);
return resp;
}
StorageCellDto storageCellDto = storageCellService.findByAddress(taskPoint);
if (ObjectUtil.isEmpty(storageCellDto)) {
resp.put("code", "400");
@@ -71,95 +67,6 @@ public class NDCToAcsServiceImpl implements NDCToAcsService {
resp.put("message", "请求失败,请求位置编号不存在!");
return resp;
}
StandardOrdinarySiteDeviceDriver standardOrdinarySiteDeviceDriver;
StandardInspectSiteDeviceDriver standardInspectSiteDeviceDriver;
//taskPhase 任务完成
if (TaskStateEnum.COMPLETED.getValue().equals(taskPhase)){
//修改指令状态完成
instruction.setInstruction_status(InstStatusEnum.FINISHED.getCode());
instruction.setUpdate_time(DateUtil.now());
instructionService.finish(instruction);
resp.put("code", "200");
resp.put("message", "完成任务成功");
return resp;
}
if (TaskStateEnum.CANCELED.getValue().equals(taskPhase)){
instruction.setInstruction_status(InstStatusEnum.CANCELED.getCode());
instruction.setUpdate_time(DateUtil.now());
instructionService.cancel(instruction.getInstruction_id());
resp.put("code", "200");
resp.put("message", "取消任务成功");
return resp;
}
if (TaskPhaseEnum.PICKUP_REQUEST_OR_RESPONSE.getValue().equals(taskPhase)){
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver){
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver();
standardOrdinarySiteDeviceDriver.setAgvphase(1);
standardOrdinarySiteDeviceDriver.setReqTakeInstCode(taskId);
standardOrdinarySiteDeviceDriver.setReqTakeRequireSuccess(true);
}
if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver){
standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver();
standardInspectSiteDeviceDriver.setAgvphase(1);
standardInspectSiteDeviceDriver.setReqTakeInstCode(taskId);
standardInspectSiteDeviceDriver.setReqTakeRequireSuccess(true);
}
resp.put("code", "200");
resp.put("message", "反馈请求取货成功");
return resp;
}
if (TaskPhaseEnum.PICKUP_COMPLETE.getValue().equals(taskPhase)){
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver){
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver();
standardOrdinarySiteDeviceDriver.setAgvphase(2);
standardOrdinarySiteDeviceDriver.setReqTakeInstCode(taskId);
standardOrdinarySiteDeviceDriver.setReqTakeRequireSuccess(true);
}
if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver){
standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver();
standardInspectSiteDeviceDriver.setAgvphase(2);
standardInspectSiteDeviceDriver.setReqTakeInstCode(taskId);
standardInspectSiteDeviceDriver.setReqTakeRequireSuccess(true);
}
resp.put("code", "200");
resp.put("message", "反馈取货完成成功");
return resp;
}
if (TaskPhaseEnum.RELEASE_REQUEST_OR_RESPONSE.getValue().equals(taskPhase)){
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver){
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver();
standardOrdinarySiteDeviceDriver.setAgvphase(3);
standardOrdinarySiteDeviceDriver.setReqTakeInstCode(taskId);
standardOrdinarySiteDeviceDriver.setReqTakeRequireSuccess(true);
}
if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver){
standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver();
standardInspectSiteDeviceDriver.setAgvphase(3);
standardInspectSiteDeviceDriver.setReqTakeInstCode(taskId);
standardInspectSiteDeviceDriver.setReqTakeRequireSuccess(true);
}
resp.put("code", "200");
resp.put("message", "反馈请求放货成功");
return resp;
}
if (TaskPhaseEnum.RELEASE_COMPLETE.getValue().equals(taskPhase)){
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver){
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver();
standardOrdinarySiteDeviceDriver.setAgvphase(4);
standardOrdinarySiteDeviceDriver.setReqTakeInstCode(taskId);
standardOrdinarySiteDeviceDriver.setReqTakeRequireSuccess(true);
}
if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver){
standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) device.getDeviceDriver();
standardInspectSiteDeviceDriver.setAgvphase(4);
standardInspectSiteDeviceDriver.setReqTakeInstCode(taskId);
standardInspectSiteDeviceDriver.setReqTakeRequireSuccess(true);
}
resp.put("code", "200");
resp.put("message", "反馈放货完成成功");
return resp;
}
if (TaskPhaseEnum.ENTER_REQUEST_OR_ALLOWED.getValue().equals(taskPhase)){
if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver){
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver();
@@ -194,10 +101,138 @@ public class NDCToAcsServiceImpl implements NDCToAcsService {
resp.put("message", "反馈请求离开成功");
return resp;
}
} else if (StrUtil.isNotEmpty(taskPhase)&&(TaskPhaseEnum.PICKUP_REQUEST_OR_RESPONSE.getValue().equals(taskPhase)||TaskPhaseEnum.PICKUP_COMPLETE.getValue().equals(taskPhase)||TaskPhaseEnum.RELEASE_REQUEST_OR_RESPONSE.getValue().equals(taskPhase)||TaskPhaseEnum.RELEASE_COMPLETE.getValue().equals(taskPhase)||TaskStateEnum.NOT_STARTED.getValue().equals(taskPhase)||TaskStateEnum.EXECUTING.getValue().equals(taskPhase)||TaskStateEnum.COMPLETED.getValue().equals(taskPhase))){
Instruction instruction = instructionService.findByCodeFromCache(taskId);
if (ObjectUtil.isEmpty(instruction)) {
resp.put("code", "400");
resp.put("message", "请求失败,任务信息不存在,指令号:" + taskId);
return resp;
}
//taskPhase 任务完成
if (TaskStateEnum.COMPLETED.getValue().equals(taskState)){
instructionService.finish(instruction.getInstruction_id());
resp.put("code", "200");
resp.put("message", "完成任务成功");
return resp;
}
//taskPhase 任务取消
if (TaskStateEnum.CANCELED.getValue().equals(taskState)){
instructionService.cancel(instruction.getInstruction_id());
resp.put("code", "200");
resp.put("message", "取消任务成功");
return resp;
}
String start_point_code = instruction.getStart_point_code();
String next_point_code = instruction.getNext_point_code();
Device startDevice = deviceAppService.findDeviceByCode(start_point_code);
Device nextDevice = deviceAppService.findDeviceByCode(next_point_code);
//taskPhase 请求取货上报
if (TaskPhaseEnum.PICKUP_REQUEST_OR_RESPONSE.getValue().equals(taskPhase)){
if (ObjectUtil.isEmpty(startDevice)) {
resp.put("code", "400");
resp.put("message", "请求取货失败,请求位置编号不存在!");
return resp;
}
if (startDevice.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver){
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) startDevice.getDeviceDriver();
standardOrdinarySiteDeviceDriver.setAgvphase(1);
standardOrdinarySiteDeviceDriver.setReqTakeInstCode(taskId);
standardOrdinarySiteDeviceDriver.setReqTakeRequireSuccess(true);
}
if (startDevice.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver){
standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) startDevice.getDeviceDriver();
standardInspectSiteDeviceDriver.setAgvphase(1);
standardInspectSiteDeviceDriver.setReqTakeInstCode(taskId);
standardInspectSiteDeviceDriver.setReqTakeRequireSuccess(true);
}
instruction.setExecute_status("1");
instructionService.update(instruction);
resp.put("code", "200");
resp.put("message", "反馈请求取货成功");
return resp;
}
//taskPhase 取货完成上报
if (TaskPhaseEnum.PICKUP_COMPLETE.getValue().equals(taskPhase)){
if (ObjectUtil.isEmpty(startDevice)) {
resp.put("code", "400");
resp.put("message", "请求取货完成失败,请求位置编号不存在!");
return resp;
}
if (startDevice.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver){
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) startDevice.getDeviceDriver();
standardOrdinarySiteDeviceDriver.setAgvphase(2);
standardOrdinarySiteDeviceDriver.setReqTakeInstCode(taskId);
standardOrdinarySiteDeviceDriver.setReqTakeRequireSuccess(true);
}
if (startDevice.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver){
standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) startDevice.getDeviceDriver();
standardInspectSiteDeviceDriver.setAgvphase(2);
standardInspectSiteDeviceDriver.setReqTakeInstCode(taskId);
standardInspectSiteDeviceDriver.setReqTakeRequireSuccess(true);
}
instruction.setExecute_status("2");
instructionService.update(instruction);
resp.put("code", "200");
resp.put("message", "反馈取货完成成功");
return resp;
}
//taskPhase 请求放货上报
if (TaskPhaseEnum.RELEASE_REQUEST_OR_RESPONSE.getValue().equals(taskPhase)){
if (ObjectUtil.isEmpty(nextDevice)) {
resp.put("code", "400");
resp.put("message", "请求放货失败,请求位置编号不存在!");
return resp;
}
if (nextDevice.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver){
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) nextDevice.getDeviceDriver();
standardOrdinarySiteDeviceDriver.setAgvphase(3);
standardOrdinarySiteDeviceDriver.setReqTakeInstCode(taskId);
standardOrdinarySiteDeviceDriver.setReqTakeRequireSuccess(true);
}
if (nextDevice.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver){
standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) nextDevice.getDeviceDriver();
standardInspectSiteDeviceDriver.setAgvphase(3);
standardInspectSiteDeviceDriver.setReqTakeInstCode(taskId);
standardInspectSiteDeviceDriver.setReqTakeRequireSuccess(true);
}
instruction.setExecute_status("3");
instructionService.update(instruction);
resp.put("code", "200");
resp.put("message", "反馈请求放货成功");
return resp;
}
//taskPhase 放货完成上报
if (TaskPhaseEnum.RELEASE_COMPLETE.getValue().equals(taskPhase)){
if (ObjectUtil.isEmpty(nextDevice)) {
resp.put("code", "400");
resp.put("message", "请求放货完成失败,请求位置编号不存在!");
return resp;
}
if (nextDevice.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver){
standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) nextDevice.getDeviceDriver();
standardOrdinarySiteDeviceDriver.setAgvphase(4);
standardOrdinarySiteDeviceDriver.setReqTakeInstCode(taskId);
standardOrdinarySiteDeviceDriver.setReqTakeRequireSuccess(true);
}
if (nextDevice.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver){
standardInspectSiteDeviceDriver = (StandardInspectSiteDeviceDriver) nextDevice.getDeviceDriver();
standardInspectSiteDeviceDriver.setAgvphase(4);
standardInspectSiteDeviceDriver.setReqTakeInstCode(taskId);
standardInspectSiteDeviceDriver.setReqTakeRequireSuccess(true);
}
instruction.setExecute_status("4");
instructionService.update(instruction);
resp.put("code", "200");
resp.put("message", "反馈放货完成成功");
return resp;
}
}else {
throw new BadRequestException("上报的阶段值有误!");
}
}else if (MsgTypeEnum.AGV_ID_RPT.getValue().equals(type)){
}
//任务分配车辆上报
else if (MsgTypeEnum.AGV_ID_RPT.getValue().equals(type)){
String taskId = params.getString("taskId");
String agvId = params.getString("agvId");
Instruction instruction = instructionService.findByCodeFromCache(taskId);
@@ -214,7 +249,9 @@ public class NDCToAcsServiceImpl implements NDCToAcsService {
resp.put("code", "200");
resp.put("message", "更新车号成功");
return resp;
}else if (MsgTypeEnum.TASK_INDEX_RPT.getValue().equals(type)){
}
//车辆任务生成上报
else if (MsgTypeEnum.TASK_INDEX_RPT.getValue().equals(type)){
String taskId = params.getString("taskId");
Instruction instruction = instructionService.findByCodeFromCache(taskId);
if (ObjectUtil.isEmpty(instruction)) {
@@ -230,7 +267,27 @@ public class NDCToAcsServiceImpl implements NDCToAcsService {
resp.put("message", "更新指令执行中成功");
return resp;
}else if (MsgTypeEnum.AGV_POWER_RPT.getValue().equals(type)){
int agvId = params.getIntValue("agvId");
int stateValue = params.getIntValue("stateValue");
resp.put("code", "200");
resp.put("message", "更新指令执行中成功");
return resp;
}else if (MsgTypeEnum.AGV_STATE_RPT.getValue().equals(type)){
int agvId = params.getIntValue("agvId");
int stateValue = params.getIntValue("stateValue");
int xLocation = params.getIntValue("xLocation");
int yLocation = params.getIntValue("yLocation");
int angle = params.getIntValue("angle");
int speed = params.getIntValue("speed");
resp.put("code", "200");
resp.put("message", "更新指令执行中成功");
return resp;
}else if (MsgTypeEnum.AGV_ERROR_RPT.getValue().equals(type)){
int agvId = params.getIntValue("agvId");
int errorCode = params.getIntValue("errState");
resp.put("code", "200");
resp.put("message", "更新指令执行中成功");
return resp;
}
return null;
}

View File

@@ -27,6 +27,7 @@ import org.nl.acs.device_driver.basedriver.standard_conveyor_control_with_scanne
import org.nl.acs.device_driver.basedriver.standard_inspect_site.StandardInspectSiteDeviceDriver;
import org.nl.acs.ext.wms.liKuData.*;
import org.nl.acs.ext.wms.service.AcsToLiKuService;
import org.nl.acs.ext.wms.service.AcsToNDCService;
import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.instruction.service.dto.Instruction;
import org.nl.acs.opc.Device;
@@ -94,6 +95,8 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu
@Lazy
@Autowired
ZheDaAgvService zheDaAgvService;
@Autowired
AcsToNDCService acsToNDCService;
@Override
public void autoInitial() {
@@ -347,62 +350,15 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu
Device startdevice = appService.findDeviceByCode(dto.getStart_device_code());
try {
if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue().toString(),String.valueOf(AgvSystemEnum.Maigic.getIndex()))) {
HttpResponse result = magicAgvService.sendAgvInstToMagic(dto);
HttpResponse result = acsToNDCService.genAgvSchedulingTask(dto,3);
if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) {
dto.setSend_status("2");
} else {
dto.setSend_status("1");
}
} else if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue().toString(), String.valueOf(AgvSystemEnum.NDC.getIndex()))) {
if(StrUtil.isBlank(dto.getAgv_inst_type())){
// String agv_system_type = task.getAgv_system_type();
String task_type = task.getTask_type();
// task_type
//1、普通任务 Itype=1:
//2、四点任务 Itype=2
//3、八点任务 Itype=3
if (StrUtil.equals(task_type, "1")) {
dto.setAgv_inst_type("1");
} else if (StrUtil.equals(task_type, "2")||task_type.equals("4")) {
dto.setAgv_inst_type("2");
} else if (StrUtil.equals(task_type, "3")) {
dto.setAgv_inst_type("3");
} else {
log.info("未找到对应的AGV指令类型任务号:" + task.getTask_code() + ",task_type:" + task.getTask_type()) ;
}
// dto.setAgv_system_type(task.getAgv_system_type());
}
ndcAgvService.sendAgvInstToNDC("1", dto);
dto.setSend_status("1");
} else if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).toString(), String.valueOf(AgvSystemEnum.XianGong.getIndex()))) {
if (StrUtil.equals(task.getRequest_again_success(), "1")) {
//追加订单
HttpResponse result = xianGongAgvService.sendOrderSequencesToXZ(dto);
if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) {
dto.setSend_status("2");
} else {
dto.setSend_status("1");
}
} else {
//创建订单序列
HttpResponse result = xianGongAgvService.sendOrderSequencesToXZ(dto);
if (ObjectUtils.isEmpty(result) || result.getStatus() != 200) {
dto.setSend_status("2");
} else {
dto.setSend_status("1");
}
}
} else if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue().toString(), String.valueOf(AgvSystemEnum.ZheDa.getIndex()))) {
ZheDaAgvService zheDaAgvService = SpringContextHolder.getBean(ZheDaAgvService.class);
zheDaAgvService.sendAgvInstToAgv(dto);
}
} catch (Exception e) {
dto.setSend_status("2");
e.printStackTrace();
}
WQLObject wo = WQLObject.getWQLObject("acs_instruction");
@@ -679,11 +635,11 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu
entity.setUpdate_by(currentUsername);
entity.setInstruction_status("2");
WQLObject wo = WQLObject.getWQLObject("acs_instruction");
String instnextdevice = entity.getNext_device_code();
String instnextdevice = entity.getNext_point_code();
String insttaskid = entity.getTask_id();
WQLObject taskwo = WQLObject.getWQLObject("acs_task");
DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
Device startdevice = appService.findDeviceByCode(entity.getStart_device_code());
Device startdevice = appService.findDeviceByCode(entity.getStart_point_code());
if (ObjectUtils.isEmpty(startdevice)) {
log.debug("地址对应设备未找到");
throw new BadRequestException("地址对应设备未找到");
@@ -910,7 +866,7 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu
} else if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "2")) {
// NDC agv指令不当场取消指令,需要等agv上报
if (!StrUtil.isEmpty(entity.getAgv_jobno())) {
ndcAgvService.deleteAgvInstToNDC(entity);
acsToNDCService.genAgvSchedulingTask(entity, 9);
} else {
flag = true;
}

View File

@@ -18,7 +18,7 @@ public abstract class BlockedRunable implements Runnable {
public abstract String getCode();
public abstract void subRun();
public abstract void subRun() throws Exception;
public void run() {
try {

View File

@@ -97,7 +97,7 @@ public class DeviceExecuteAutoRun extends AbstractAutoRunnable {
if (!this.runs.keySet().contains(deviceDriver.getDeviceCode())) {
BlockedRunable runnable = new BlockedRunable() {
@Override
public void subRun() {
public void subRun() throws Exception {
deviceDriver.executeAuto();
}

View File

@@ -451,8 +451,8 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial {
}
String start_point_code = dto.getStart_point_code();
String next_point_code = dto.getNext_point_code();
String start_device_code = dto.getStart_device_code();
String next_device_code = dto.getNext_device_code();
String start_device_code = dto.getStart_point_code();
String next_device_code = dto.getNext_point_code();
String route_plan_code = dto.getRoute_plan_code();
if (StrUtil.isEmpty(dto.getCreate_by())) {
dto.setCreate_by(currentUsername);
@@ -463,82 +463,14 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial {
dto.setTask_code(task_code);
dto.setRoute_plan_code(route_plan_code);
dto.setTask_status("0");
dto.setStart_device_code(start_device_code);
dto.setNext_device_code(next_device_code);
dto.setStart_device_code2(dto.getStart_point_code2());
dto.setNext_device_code2(dto.getNext_point_code2());
if (StrUtil.isEmpty(dto.getPriority())) {
dto.setPriority("1");
}
String plan_code = dto.getRoute_plan_code();
// 判断起点终点设备类型
String startDeviceType = deviceAppService.findDeviceTypeByCode(dto.getStart_device_code());
String nextDeviceType = deviceAppService.findDeviceTypeByCode(dto.getNext_device_code());
// if (routelineserver
// .getShortPathLines(dto.getStart_device_code(), dto.getNext_device_code(), plan_code)
// .size()
// == 0) {
// throw new Exception(dto.getStart_point_code() + "->" + dto.getNext_point_code() + "路由不通!");
// }
String createTaskCheck = paramService.findByCode(AcsConfig.CREATETASKCHECK).getValue();
DeviceService deviceService = SpringContextHolder.getBean(DeviceServiceImpl.class);
DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class);
Device nextdevice = appService.findDeviceByCode(next_device_code);
Device startdevice = appService.findDeviceByCode(start_device_code);
// dto.setMaterial(startdevice.getMaterial_type());
// if (StrUtil.equals(createTaskCheck, "1")) {
// // 判断起点为输送设备
// if (StrUtil.equals(DeviceType.conveyor.toString(), startDeviceType)) {
// }
//
// if (StrUtil.equals(DeviceType.conveyor.toString(), nextDeviceType)) {
// }
// } else {
// // 判断起点为输送设备
// if (StrUtil.equals(DeviceType.conveyor.toString(), startDeviceType)) {
// }
//
// if (StrUtil.equals(DeviceType.conveyor.toString(), nextDeviceType)) {
// // if (nextdevice.getDeviceDriver() instanceof
// // StandardOrdinarySiteDeviceDriver) {
// // standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver)
// // nextdevice.getDeviceDriver();
// // if (nextdevice.getHas_goods() != 0) {
// // throw new Exception("任务终点需满足无货!");
// // }
// // }
//
// JSONObject jo = new JSONObject();
// JSONObject jo2 = new JSONObject();
// if (!StrUtil.isEmpty(dto.getMaterial())) {
// if (!StrUtil.equals(dto.getMaterial(), "1")) {
// jo.put("hasGoodStatus", "2");
// jo.put("material_type", dto.getMaterial());
// } else {
// jo.put("hasGoodStatus", "1");
// jo.put("material_type", "1");
// }
//
// } else {
// jo.put("hasGoodStatus", "1");
// jo.put("material_type", "1");
// }
// jo.put("device_code", dto.getStart_device_code());
// jo.put("quantity", dto.getQuantity());
// jo.put("remark", dto.getRemark());
// jo.put("batch", startdevice.getBatch());
// jo.put("islock", "true");
// deviceService.changeDeviceStatus(jo);
// Device deviceByCode = deviceAppService.findDeviceByCode(dto.getNext_device_code());
// jo2.put("device_code", dto.getNext_device_code());
// jo2.put("hasGoodStatus", deviceByCode.getHas_goods());
// jo2.put("quantity", deviceByCode.getQuantity());
// jo2.put("remark", deviceByCode.getRemark());
// jo2.put("material_type", deviceByCode.getMaterial_type());
// jo2.put("batch", deviceByCode.getBatch());
// jo2.put("islock", "true");
// deviceService.changeDeviceStatus(jo2);
// }
// }
WQLObject wo = WQLObject.getWQLObject("acs_task");
JSONObject json = (JSONObject) JSONObject.toJSON(dto);
@@ -968,18 +900,6 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial {
log.info("请求ZDwcs成功任务取消 请求结果{}", responseCode);
}
}
// List<RouteLineDto> shortPathsList =
// routeLineService.getShortPathLines(
// entity.getStart_device_code(),
// entity.getNext_device_code(),
// entity.getRoute_plan_code());
// String type = shortPathsList.get(0).getType();
// // != 0 为agv任务
// if (!StrUtil.equals(type, "0")) {
// if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "3")) {
// agvService.markComplete(entity.getTask_code());
// }
// }
}
@Override

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<included>
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
<property name="LOG_HOME" value="${logPath}"/>
<!-- 按照每天生成日志文件 -->
<appender name="FILE22" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/ACS请求NDC/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
<!--单个日志最大容量 至少10MB才能看得出来-->
<maxFileSize>200MB</maxFileSize>
<!--所有日志最多占多大容量-->
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>
<!-- <logger name="org.nl.start.Init" level="info" additivity="false">
<appender-ref ref="FILE3"/>
</logger>-->
<!-- 打印sql -->
<logger name="org.nl.acs.ext.wms.service.impl.AcsToNDCServiceImpl" level="info" additivity="true">
<appender-ref ref="FILE22"/>
</logger>
</included>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<included>
<springProperty scope="context" name="logPath" source="logging.file.path" defaultValue="logs"/>
<property name="LOG_HOME" value="${logPath}"/>
<!-- 按照每天生成日志文件 -->
<appender name="FILE22" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/NDC反馈ACS/%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
<!--单个日志最大容量 至少10MB才能看得出来-->
<maxFileSize>200MB</maxFileSize>
<!--所有日志最多占多大容量-->
<totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>
<!-- <logger name="org.nl.start.Init" level="info" additivity="false">
<appender-ref ref="FILE3"/>
</logger>-->
<!-- 打印sql -->
<logger name="org.nl.acs.ext.wms.service.impl.NDCToAcsServiceImpl" level="info" additivity="true">
<appender-ref ref="FILE22"/>
</logger>
</included>