From 00bbc35055258c115e3cf97eea5abf1d049b37dc Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Sat, 21 Dec 2024 13:23:37 +0800 Subject: [PATCH] =?UTF-8?q?opt:=E5=A2=9E=E5=8A=A0=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=A4=B1=E8=B4=A5=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agv/ndcone/AgvNdcOneDeviceDriver.java | 37 ++- .../acs/ext/wms/rest/WmsToAcsController.java | 13 + .../acs/ext/wms/service/AcsToWmsService.java | 8 +- .../acs/ext/wms/service/WmsToAcsService.java | 4 + .../wms/service/impl/AcsToWmsServiceImpl.java | 24 ++ .../wms/service/impl/WmsToAcsServiceImpl.java | 21 ++ .../domain/InstructionMybatis.java | 33 +- .../rest/InstructionController.java | 6 +- .../service/dto/InstructionDto.java | 5 + .../service/impl/InstructionServiceImpl.java | 299 +++++++++++++++--- .../org/nl/acs/task/rest/TaskController.java | 8 +- .../task/service/impl/TaskServiceImpl.java | 108 ++++++- .../org/nl/quartz/task/AutoCreateInst.java | 6 +- .../nl/quartz/task/QueryZDAgvTaskStatus.java | 17 +- .../org/nl/quartz/task/SyncDeviceStatus.java | 1 + .../main/resources/config/application-dev.yml | 4 +- .../views/acs/history/instRecord/index.vue | 1 + .../src/views/acs/instruction/index.vue | 2 + nladmin-ui/src/views/acs/task/index.vue | 32 +- 19 files changed, 533 insertions(+), 96 deletions(-) diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java index 1fc9b77..6bc11cb 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java @@ -121,7 +121,10 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic if (!ObjectUtil.isEmpty(link_inst)) { link_flag = true; } - + if (error != 0) { + //todo 反馈立库AGV故障信息 + sendAgvErrorStatus(inst, device_code, Integer.parseInt(AgvActionEnum.ACTION_STATUS.code("请求取货"))); + } Device device = null; String old_device_code = null; String emptyNum = null; @@ -814,6 +817,38 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic } + + private void sendAgvErrorStatus(Instruction inst, String device_code, Integer status) { + if (inst == null) { + return; + } + JSONArray ja = new JSONArray(); + JSONObject jo = new JSONObject(); + jo.put("vehicle_code", inst.getVehicle_code()); + jo.put("status", status); + jo.put("device_code", this.device_code); + jo.put("task_code", inst.getTask_code()); + ja.add(jo); + LuceneLogDto reqlogDto = LuceneLogDto.builder() + .device_code(device_code) + .content("请求参数:" + jo) + .requestparam("请求参数:" + jo) + .method("1111111111111111111111111111111feedAgvTaskStatus") + .build(); + luceneExecuteLogService.deviceExecuteLog(reqlogDto); + HttpResponse resp = acsToWmsService.feedAgvErrorStatus(ja); + LuceneLogDto resplogDto = LuceneLogDto.builder() + .device_code(device_code) + .content("返回参数:" + resp.body()) + .responseparam("返回参数:" + resp.body()) + .method("feedAgvTaskStatus") + .status_code(String.valueOf(resp.getStatus())) + .build(); + luceneExecuteLogService.deviceExecuteLog(resplogDto); + } + + + private void sendAgvTaskStatus(Instruction inst, String device_code, Integer status) { if (inst == null) { return; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java index fc22829..5b54028 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java @@ -43,6 +43,19 @@ public class WmsToAcsController { return new ResponseEntity<>(wmstoacsService.crateTask(reqs), HttpStatus.OK); } + + + @PostMapping("/getAgvInfo") + @Log("agv信息") + @ApiOperation("agv信息") + public ResponseEntity allDeviceStatus() { + return new ResponseEntity<>(wmstoacsService.allDeviceStatus(), HttpStatus.OK); + } + + + + + @PostMapping("/cancelTask") @Log(value = "WMS取消任务") @ApiOperation("WMS取消任务") diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java index afa76bb..2196fa4 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java @@ -113,7 +113,13 @@ public interface AcsToWmsService { */ HttpResponse feedAgvTaskStatus(JSONArray from); - + /** + * 反馈AGV故障信息 + * + * @param from + * @return + */ + HttpResponse feedAgvErrorStatus(JSONArray from); /** diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java index ed69e38..6cbdaed 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java @@ -19,6 +19,10 @@ public interface WmsToAcsService { CreateTaskResponse crateTask(List reqs); + + JSONObject allDeviceStatus(); + + /** * 取消任务 * diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java index fc35ace..2d25f8c 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java @@ -552,6 +552,30 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return result; } + @Override + public HttpResponse feedAgvErrorStatus(JSONArray from) { + String wmsUrl = paramService.findByCode(AcsConfig.WMSURL).getValue(); + + AddressDto addressDto = addressService.findByCode("feedAgvErrorStatus"); + String methods_url = addressDto.getMethods_url(); + String url = wmsUrl + methods_url; + HttpResponse result = null; + log.info("feedAgvErrorStatus----请求参数{}", from); + + try { + result = HttpRequest.post(url) + .body(String.valueOf(from)) + .execute(); + System.out.println(result); + log.info("feedAgvErrorStatus----返回参数{}", result); + } catch (Exception e) { + String msg = e.getMessage(); + //网络不通 + //System.out.println(msg); + } + return result; + } + @Override public String applyTask(BaseRequest requestParam) { try { diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index 229ebe0..b73894d 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -31,11 +31,13 @@ import org.nl.acs.storage_cell.service.mapper.StorageCellMapper; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.RedisUtils; import org.nl.config.SpringContextHolder; import org.nl.system.service.param.ISysParamService; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -67,6 +69,9 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { @Resource private RedissonClient redissonClient; + @Resource + private RedisUtils redisUtils; + @Override public CancelTaskResponse cancelFromWms(List reqs) throws Exception { ISysParamService paramService = SpringContextHolder.getBean(ISysParamService.class); @@ -109,6 +114,22 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { return response; } + /** + * agv信息查询 + */ + @Override + public JSONObject allDeviceStatus() { + JSONObject jsonObject = new JSONObject(); + JSONArray agv = (JSONArray) redisUtils.get("AGV"); + if (ObjectUtil.isNotEmpty(agv)) { + jsonObject.put("agv", agv); + } else { + jsonObject.put("agv", new JSONArray()); + } + return jsonObject; + } + + @Override public Map updateDeviceGoodsFromWms(String param) { JSONArray datas = JSONArray.parseArray(param); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/domain/InstructionMybatis.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/domain/InstructionMybatis.java index 9ac36e8..1dbd6fd 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/domain/InstructionMybatis.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/domain/InstructionMybatis.java @@ -1,23 +1,17 @@ package org.nl.acs.instruction.domain; -import org.nl.acs.common.base.CommonModel; -import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.IdType; -import io.swagger.annotations.ApiModelProperty; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; -import javax.validation.constraints.*; -import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import lombok.experimental.Accessors; +import org.nl.acs.common.base.CommonModel; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.math.BigDecimal; /** * @author jiaolm @@ -238,7 +232,12 @@ public class InstructionMybatis extends CommonModel implemen @ApiModelProperty(value = "AGV系统类型") private String agv_system_type; - public void copyFrom(Instruction source){ - BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); + /** + * lms任务id + */ + private String ext_task_id; + + public void copyFrom(Instruction source) { + BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true)); } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/rest/InstructionController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/rest/InstructionController.java index a121c85..95dacaa 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/rest/InstructionController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/rest/InstructionController.java @@ -37,9 +37,9 @@ public class InstructionController { @ApiOperation("查询指令") //@PreAuthorize("@el.check('instruction:list')") public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { - if(ObjectUtil.isEmpty(whereJson.get("status"))) { - whereJson.put("status", "1"); - } + // if(ObjectUtil.isEmpty(whereJson.get("status"))) { + // whereJson.put("status", "1"); + // } return new ResponseEntity<>(instructionService.queryAll(whereJson, page), HttpStatus.OK); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/dto/InstructionDto.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/dto/InstructionDto.java index 8a53e61..0346367 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/dto/InstructionDto.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/dto/InstructionDto.java @@ -348,4 +348,9 @@ public class InstructionDto implements Serializable { */ private String agv_system_type; + + /** + * lms任务id + */ + private String ext_task_id; } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 7f5adab..b9a8c66 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -20,6 +20,9 @@ import org.nl.acs.agv.server.MagicAgvService; import org.nl.acs.agv.server.NDCAgvService; import org.nl.acs.agv.server.ZheDaAgvService; import org.nl.acs.auto.initial.ApplicationAutoInitial; +import org.nl.acs.common.base.PageInfo; +import org.nl.acs.common.base.QueryHelpMybatisPlus; +import org.nl.acs.common.base.impl.CommonServiceImpl; import org.nl.acs.device.domain.Device; import org.nl.acs.device.service.DeviceService; import org.nl.acs.device.service.impl.DeviceServiceImpl; @@ -30,9 +33,12 @@ 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.instruction.domain.Instruction; import org.nl.acs.instruction.domain.InstructionMybatis; +import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.dto.InstructionDto; import org.nl.acs.instruction.service.dto.InstructionQueryParam; +import org.nl.acs.instruction.service.mapper.InstructionMapper; import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.acs.route.service.RouteLineService; @@ -42,31 +48,20 @@ import org.nl.acs.task.TaskInstructionLock; import org.nl.acs.task.domain.Task; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; -import org.nl.acs.common.base.PageInfo; -import org.nl.acs.common.base.QueryHelpMybatisPlus; -import org.nl.acs.common.base.impl.CommonServiceImpl; import org.nl.acs.task.service.mapper.TaskMapper; -import org.nl.common.exception.BadRequestException; import org.nl.acs.utils.ConvertUtil; -import org.nl.common.utils.FileUtil; import org.nl.acs.utils.PageUtil; -import org.nl.acs.instruction.domain.Instruction; -import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.instruction.service.mapper.InstructionMapper; -import org.nl.common.utils.SecurityUtils; -import org.nl.system.service.dict.dao.Dict; -import org.nl.system.service.param.ISysParamService; +import org.nl.common.exception.BadRequestException; import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.FileUtil; +import org.nl.common.utils.SecurityUtils; import org.nl.config.SpringContextHolder; +import org.nl.system.service.param.ISysParamService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -// 默认不使用缓存 -//import org.springframework.cache.annotation.CacheConfig; -//import org.springframework.cache.annotation.CacheEvict; -//import org.springframework.cache.annotation.Cacheable; -import org.springframework.data.domain.Pageable; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -192,11 +187,10 @@ public class InstructionServiceImpl extends CommonServiceImpl queryPage = PageUtil.toMybatisPage(page); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); -// wrapper.eq(InstructionMybatis::getIs_delete,0); + // wrapper.eq(InstructionMybatis::getIs_delete,0); wrapper.and(StringUtils.isNotBlank(code), instructionMybatis -> instructionMybatis.like(InstructionMybatis::getInstruction_code, code).or().like(InstructionMybatis::getTask_code, code)); wrapper.like(StringUtils.isNotBlank(vehicle_code), InstructionMybatis::getVehicle_code, vehicle_code); wrapper.eq(StringUtils.isNotBlank(material_type), InstructionMybatis::getMaterial, material_type); - wrapper.eq(StringUtils.isNotBlank(status), InstructionMybatis::getInstruction_status, status); wrapper.and(StringUtils.isNotBlank(point_code), instructionMybatis -> instructionMybatis.like(InstructionMybatis::getStart_point_code, point_code).or().like(InstructionMybatis::getNext_point_code, point_code)); wrapper.eq(StringUtils.isNotBlank(instruction_type), InstructionMybatis::getInstruction_type, instruction_type); if (!StrUtil.isEmpty(is_over)) { @@ -206,6 +200,11 @@ public class InstructionServiceImpl extends CommonServiceImpl insPage = instructionMapper.selectPage(queryPage, wrapper); final JSONObject json = (JSONObject) JSON.toJSON(ConvertUtil.convertPage(insPage, InstructionDto.class)); return json; @@ -337,22 +336,12 @@ public class InstructionServiceImpl extends CommonServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.eq(InstructionMybatis::getTask_id, id); wrapper.apply(StringUtils.isNotBlank(wherecaluse), wherecaluse); - InstructionMybatis ins = instructionMapper.selectOne(wrapper); - if (ObjectUtil.isNotEmpty(ins)) { - return ConvertUtil.convert(ins, Instruction.class); + List insList = instructionMapper.selectList(wrapper); + if (ObjectUtil.isNotEmpty(insList)) { + return ConvertUtil.convert(insList.get(0), Instruction.class); } return null; } @@ -362,6 +351,128 @@ public class InstructionServiceImpl extends CommonServiceImpl shortPathsList = + routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); + RouteLineDto route = null; + for (int i = 0; i < shortPathsList.size(); i++) { + RouteLineDto routeLineDto = shortPathsList.get(i); + String route_device = routeLineDto.getDevice_code(); + String route_next_device = routeLineDto.getNext_device_code(); + if (route_device.equals(dto.getStart_device_code()) + && route_next_device.equals(dto.getNext_device_code())) { + route = routeLineDto; + break; + } + } + if (ObjectUtil.isEmpty(route)) { + throw new BadRequestException("未查询到相关路由!"); + } + if (StrUtil.equals(shortPathsList.get(0).getType(), "1")) { + NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvService.class); + ndcAgvService.sendAgvInstToNDC(task.getAgv_system_type(), dto); + } else if (StrUtil.equals(shortPathsList.get(0).getType(), "2")) { + ZheDaAgvService zheDaAgvService = SpringContextHolder.getBean(ZheDaAgvService.class); + HttpResponse result = zheDaAgvService.sendAgvInstToAgv(dto); + if (!ObjectUtils.isEmpty(result)) { + JSONObject jo = JSON.parseObject(result.body()); + if (jo.getInteger("status") != 200) { + dto.setSend_status("2"); + dto.setRemark("失败原因:" + jo.getString("message")); + log.error("创建指令,下发AGV/RGV任务失败!任务id为:{},指令号为:{},失败原因{}", task.getTask_id(), dto.getInstruction_code(), jo.getString("message")); + if (task != null) { + task.setRemark("创建指令,下发AGV/RGV任务失败!失败原因{}" + jo.getString("message")); + taskService.update(task); + } + } else { + dto.setSend_status("1"); + } + } else { + dto.setSend_status("2"); + dto.setRemark("失败原因:AGV/RGV未响应!"); + log.error("创建指令,下发AGV/RGV任务失败!任务id为:{},指令号为:{},失败原因{}", task.getTask_id(), dto.getInstruction_code(), "AGV/RGV未响应!"); + if (task != null) { + task.setRemark("创建指令,下发AGV/RGV任务失败!失败原因: AGV/RGV未响应!"); + taskService.update(task); + } + } + } + } catch (Exception e) { + String msg = e.getMessage()==null?"连接失败!":e.getMessage(); + dto.setSend_status("2"); + dto.setRemark("失败原因:" + msg); + log.error("创建指令失败,任务id为:" + task.getTask_id(), "失败原因:" + msg); + if (task != null) { + task.setRemark("自动创建指令失败,失败原因:"+msg); + taskService.update(task); + } + } + InstructionMybatis entity = ConvertUtil.convert(dto, InstructionMybatis.class); + instructionMapper.insert(entity); + instructions.add(dto); + } + + public void create1(Instruction dto) { + dto = foramte(dto); + String task_code = dto.getTask_code(); + TaskDto task = taskService.findByCodeFromCache(task_code); String currentUsername = SecurityUtils.getCurrentUsername(); String now = DateUtil.now(); @@ -467,9 +578,6 @@ public class InstructionServiceImpl extends CommonServiceImpl shortPathsList = + routeLineService.getShortPathLines(start_device_code, next_device_code, route_plan_code); + RouteLineDto route = null; + for (int i = 0; i < shortPathsList.size(); i++) { + RouteLineDto routeLineDto = shortPathsList.get(i); + String route_device = routeLineDto.getDevice_code(); + String route_next_device = routeLineDto.getNext_device_code(); + if (route_device.equals(dto.getStart_device_code()) + && route_next_device.equals(dto.getNext_device_code())) { + route = routeLineDto; + break; + } + } + if (ObjectUtil.isEmpty(route)) { + throw new BadRequestException("未查询到相关路由!"); + } + if (StrUtil.equals(shortPathsList.get(0).getType(), "1")) { + NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvService.class); + ndcAgvService.sendAgvInstToNDC(task.getAgv_system_type(), dto); + } else if (StrUtil.equals(shortPathsList.get(0).getType(), "2")) { + ZheDaAgvService zheDaAgvService = SpringContextHolder.getBean(ZheDaAgvService.class); + HttpResponse result = zheDaAgvService.sendAgvInstToAgv(dto); + if (!ObjectUtils.isEmpty(result)) { + JSONObject jo = JSON.parseObject(result.body()); + if (jo.getInteger("status") != 200) { + dto.setSend_status("2"); + dto.setRemark("失败原因:" + jo.getString("message")); + log.error("创建指令,下发AGV/RGV任务失败!任务id为:{},指令号为:{},失败原因{}", task.getTask_id(), dto.getInstruction_code(), jo.getString("message")); + task.setRemark("创建指令,下发AGV/RGV任务失败!失败原因{}" + jo.getString("message")); + } else { + dto.setSend_status("1"); + task.setRemark(""); + } + } else { + dto.setSend_status("2"); + dto.setRemark("失败原因:AGV/RGV未响应!"); + log.error("创建指令,下发AGV/RGV任务失败!任务id为:{},指令号为:{},失败原因{}", task.getTask_id(), dto.getInstruction_code(), "AGV/RGV未响应!"); + task.setRemark("创建指令,下发AGV/RGV任务失败!失败原因: AGV/RGV未响应!"); + } + taskService.update(task); + } + } catch (Exception e) { + if (e.getMessage() == null) { + dto.setRemark("失败原因:连接异常!"); + } else { + dto.setRemark("失败原因:" + e.getMessage()); + } + dto.setSend_status("2"); + log.error("创建指令失败,下发AGV/RGV任务失败!任务id为:{},指令号为:{},失败原因{}", task.getTask_id(), dto.getInstruction_code(), e.getMessage()); + } + InstructionMybatis entity = ConvertUtil.convert(dto, InstructionMybatis.class); + instructionMapper.insert(entity); + instructions.add(dto); + } + + public void create3(Instruction dto) throws Exception { + dto = foramte(dto); + String task_code = dto.getTask_code(); + TaskDto task = taskService.findByCodeFromCache(task_code); + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + if (StrUtil.isEmpty(dto.getRoute_plan_code())) { + dto.setRoute_plan_code(task.getRoute_plan_code()); + } + if (StrUtil.isEmpty(dto.getPriority())) { + dto.setPriority(task.getPriority()); + } + if (StrUtil.isEmpty(dto.getInstruction_code())) { + dto.setInstruction_code(CodeUtil.getNewCode("INSTRUCT_NO")); + } + if (StrUtil.isEmpty(dto.getInstruction_id())) { + dto.setInstruction_id(IdUtil.simpleUUID()); + } + if (StrUtil.isEmpty(dto.getIs_send())) { + dto.setIs_send(task.getIs_send()); + } + if (StrUtil.isEmpty(dto.getLink_num())) { + dto.setIs_send(task.getLink_num()); + } + if (task.getTask_type().equals("1") || task.getTask_type().equals("2")) { + dto.setInstruction_type(task.getTask_type()); + } else if (false) { + + } else { + dto.setInstruction_type("3"); + } + // 起点设备与终点设备相同则为初始指令 + if (StrUtil.equals(task.getStart_device_code(), dto.getStart_device_code())) { + if (!StrUtil.equals(dto.getCompound_inst(), "0") + && StrUtil.equals(task.getCompound_task(), "1")) { + dto.setCompound_inst("1"); + dto.setCompound_inst_data(task.getCompound_task_data()); + } + } + dto.setCreate_by(currentUsername); + dto.setUpdate_by(currentUsername); + dto.setUpdate_time(now); + dto.setCreate_time(now); + dto.setStart_parent_code(task.getStart_parent_code()); + dto.setNext_parent_code(task.getNext_parent_code()); + + if (ObjectUtil.isNotEmpty(task.getTask_type())) { + dto.setInstruction_type(task.getTask_type()); + } + + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + Device startdevice = appService.findDeviceByCode(dto.getStart_device_code()); + Device nextdevice = appService.findDeviceByCode(dto.getNext_device_code()); + + HongXiangConveyorDeviceDriver hongXiangConveyorDeviceDriver; + StandardCoveyorControlWithScannerDeviceDriver standardCoveyorControlWithScannerDeviceDriver; + + if (startdevice.getDeviceDriver() instanceof HongXiangConveyorDeviceDriver) { + hongXiangConveyorDeviceDriver = (HongXiangConveyorDeviceDriver) startdevice.getDeviceDriver(); + hongXiangConveyorDeviceDriver.writing(3, Integer.valueOf(dto.getInstruction_code())); + } + try { String start_device_code = dto.getStart_device_code(); String next_device_code = dto.getNext_device_code(); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/rest/TaskController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/rest/TaskController.java index 6377e6e..5f98235 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/rest/TaskController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/rest/TaskController.java @@ -38,10 +38,10 @@ public class TaskController { @ApiOperation("查询任务") //@PreAuthorize("@el.check('task:list')") public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { -// return new ResponseEntity<>(taskService.queryAllByCache(whereJson, page), HttpStatus.OK); -// if(ObjectUtil.isEmpty(whereJson.get("status"))) { -// whereJson.put("status", "1"); -// } + // return new ResponseEntity<>(taskService.queryAllByCache(whereJson, page), HttpStatus.OK); + // if(ObjectUtil.isEmpty(whereJson.get("status"))) { + // whereJson.put("status", "1"); + // } return new ResponseEntity<>(taskService.queryAll(whereJson, page), HttpStatus.OK); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index 186800f..a113236 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -993,11 +993,15 @@ public class TaskServiceImpl extends CommonServiceImpl impleme String resp = null; try { resp = acstowmsService.feedTaskStatus(request); - log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp); + JSONObject jo = JSON.parseObject(resp); + if ("200".equals(jo.getString("code"))) { + log.info("任务号:{},反馈wms任务状态完成成功,响应信息:{}!", entity.getTask_code(), resp); + + } else { + log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), jo.getString("message")); + } } catch (Exception e) { log.error("任务号:{},反馈wms任务状态失败,原因:{}!", entity.getTask_code(), e.getMessage()); - } finally { - } } List shortPathsList = @@ -1181,6 +1185,101 @@ public class TaskServiceImpl extends CommonServiceImpl impleme @Override public Instruction createInst(String ids) throws Exception { + TaskDto acsTask = this.findById(ids); + if (acsTask == null) { + throw new BadRequestException("被删除或无权限,操作失败!"); + } + //只有执行中的任务才能创建指令 + if (!"1".equals(acsTask.getTask_status())) { + throw new BadRequestException("任务未执行,不能创建指令!"); + } + DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); + InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); + InstructionDto inst = instructionservice.findByTaskid(ids, "instruction_status < 2 "); + if (inst != null) { + throw new BadRequestException("有指令未完成!"); + } + String taskid = acsTask.getTask_id(); + String taskcode = acsTask.getTask_code(); + String vehiclecode = acsTask.getVehicle_code(); + String priority = acsTask.getPriority(); + String start_point_code = acsTask.getStart_point_code(); + String start_device_code = acsTask.getStart_device_code(); + String route_plan_code = acsTask.getRoute_plan_code(); + String vehicleType = acsTask.getVehicle_type(); + // 是否复合任务 =0非复合任务 + String compound_task = acsTask.getCompound_task(); + String next_point_code = acsTask.getNext_point_code(); + String next_device_code = acsTask.getNext_device_code(); + String start_point_code2 = acsTask.getStart_point_code2(); + String next_point_code2 = acsTask.getNext_point_code2(); + String agv_system_type = acsTask.getAgv_system_type(); + String task_type = acsTask.getTask_type(); + /** 开始平均分解校验 */ + String this_device_code = + this.queryAssignedByDevice(acsTask.getStart_device_code(), acsTask.getNext_device_code()); + if (StrUtil.isEmpty(this_device_code)) { + List shortPathsList = + routeLineService.getShortPathLines( + start_device_code, acsTask.getNext_device_code(), route_plan_code); + RouteLineDto routeLineDto = shortPathsList.get(0); + String path = routeLineDto.getPath(); + String type = routeLineDto.getType(); + String[] str = path.split("->"); + List pathlist = Arrays.asList(str); + int index = 0; + for (int m = 0; m < pathlist.size(); m++) { + if (pathlist.get(m).equals(start_device_code)) { + index = m + 1; + break; + } + } + next_device_code = pathlist.get(index); + } else { + next_device_code = this_device_code; + } + + if (StrUtil.equals(appService.findDeviceTypeByCode(next_device_code), "storage")) { + next_point_code = next_device_code + "-" + acsTask.getTo_y() + "-" + acsTask.getTo_z(); + } else { + next_point_code = next_device_code; + } + Instruction instdto = new Instruction(); + instdto.setInstruction_type(task_type); + instdto.setInstruction_id(IdUtil.simpleUUID()); + instdto.setRoute_plan_code(route_plan_code); + instdto.setMaterial(acsTask.getMaterial()); + instdto.setQuantity(acsTask.getQuantity()); + instdto.setTask_id(taskid); + instdto.setTask_code(taskcode); + instdto.setVehicle_code(vehiclecode); + String now = DateUtil.now(); + instdto.setCreate_time(now); + instdto.setCreate_by("auto"); + instdto.setStart_device_code(start_device_code); + instdto.setNext_device_code(next_device_code); + instdto.setStart_point_code(start_point_code); + instdto.setNext_point_code(next_point_code); + instdto.setPriority(priority); + instdto.setInstruction_status("0"); + instdto.setExecute_device_code(start_point_code); + instdto.setVehicle_type(vehicleType); + instdto.setStart_point_code2(start_point_code2); + instdto.setStart_device_code2(start_point_code2); + instdto.setNext_device_code2(next_point_code2); + instdto.setNext_point_code2(next_point_code2); + instdto.setAgv_system_type(agv_system_type); + instdto.setAgv_inst_type("1"); + instdto.setExt_task_id(acsTask.getExt_task_id()); + try { + instructionservice.create2(instdto); + } catch (Exception e) { + log.error("手动创建指令失败!任务id为:{},指令号为:{},失败原因{}", acsTask.getTask_id(), instdto.getInstruction_code(), e.getMessage()); + } + return instdto; + } + + public Instruction createInst1(String ids) throws Exception { TaskDto acsTask = this.findById(ids); if (acsTask == null) { throw new BadRequestException("被删除或无权限,操作失败!"); @@ -1274,10 +1373,7 @@ public class TaskServiceImpl extends CommonServiceImpl impleme @Override public Instruction createInst(Instruction inst) throws Exception { - - DeviceAppService appService = SpringContextHolder.getBean(DeviceAppServiceImpl.class); InstructionService instructionservice = SpringContextHolder.getBean("instructionServiceImpl"); - instructionservice.create2(inst); return inst; } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java b/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java index 921e2d1..ffc1af4 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/AutoCreateInst.java @@ -199,7 +199,11 @@ public class AutoCreateInst { try { instructionService.create(instdto); } catch (Exception e) { - acsTask.setRemark(e.getMessage()); + if (e.getMessage() == null) { + acsTask.setRemark("自动创建指令失败,失败原因:连接失败!"); + } else { + acsTask.setRemark("自动创建指令失败,失败原因:" + e.getMessage()); + } taskserver.updateByCodeFromCache(acsTask); continue; } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/QueryZDAgvTaskStatus.java b/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/QueryZDAgvTaskStatus.java index b9150e4..6fa62e2 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/QueryZDAgvTaskStatus.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/QueryZDAgvTaskStatus.java @@ -59,15 +59,14 @@ public class QueryZDAgvTaskStatus { vehicle = inst_jo.getString("vehicle"); inst.setCarno(vehicle); } -// RAW:初始状态 -// ACTIVE:业务订单已激活 -// DISPATCHABLE:业务订单已通过系统验证,等待被调度执行 -// BEING_PROCESSED:业务订单正在被执行 -// WITHDRAWN:业务订单已被撤销 -// FINISHED:业务订单已完成 -// FAILED:业务订单已失败 -// UNROUTABLE:无法规划该业务订单的执行路线 - + // RAW:初始状态 + // ACTIVE:业务订单已激活 + // DISPATCHABLE:业务订单已通过系统验证,等待被调度执行 + // BEING_PROCESSED:业务订单正在被执行 + // WITHDRAWN:业务订单已被撤销 + // FINISHED:业务订单已完成 + // FAILED:业务订单已失败 + // UNROUTABLE:无法规划该业务订单的执行路线 //执行中 if ("BEING_PdROCESSED".equals(status) || "ACTIVE".equals(status)) { if (inst != null) { diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/SyncDeviceStatus.java b/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/SyncDeviceStatus.java index 9308412..378d346 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/SyncDeviceStatus.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/quartz/task/SyncDeviceStatus.java @@ -82,6 +82,7 @@ public class SyncDeviceStatus { //agv状态信息反馈 JSONObject param = new JSONObject(); param.put("AGV", AGV); + redisUtils.set("AGV", AGV); HttpResponse response = acsToWmsService.shipDeviceUpdate(param); if (response == null || response.getStatus() == 200) { log.info("自动上报agv状态,接口返回:" + response.body()); diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index 91c92c1..6358757 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -7,10 +7,10 @@ spring: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy # url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:stand_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:qzyf_acs_bak}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:qzyf_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true username: ${DB_USER:root} # password: ${DB_PWD:Root.123456} - password: ${DB_PWD:123456789} + password: ${DB_PWD:123456} # 初始连接数 initial-size: 5 # 最小连接数 diff --git a/nladmin-ui/src/views/acs/history/instRecord/index.vue b/nladmin-ui/src/views/acs/history/instRecord/index.vue index 2aac4bd..fc53e21 100644 --- a/nladmin-ui/src/views/acs/history/instRecord/index.vue +++ b/nladmin-ui/src/views/acs/history/instRecord/index.vue @@ -104,6 +104,7 @@ 就绪 执行中 完成 + 取消 diff --git a/nladmin-ui/src/views/acs/instruction/index.vue b/nladmin-ui/src/views/acs/instruction/index.vue index 5bd1312..914257b 100644 --- a/nladmin-ui/src/views/acs/instruction/index.vue +++ b/nladmin-ui/src/views/acs/instruction/index.vue @@ -134,10 +134,12 @@ 就绪 执行中 完成 + 取消