| | |
| | | import com.zy.asrs.domain.param.*; |
| | | import com.zy.asrs.entity.ApiLog; |
| | | import com.zy.asrs.entity.LocMast; |
| | | import com.zy.asrs.entity.WrkMast; |
| | | import com.zy.asrs.service.ApiLogService; |
| | | import com.zy.asrs.service.LocMastService; |
| | | import com.zy.asrs.service.WrkMastService; |
| | | import com.zy.asrs.utils.NotifyUtils; |
| | | import com.zy.common.annotations.OpenApiLog; |
| | | import com.zy.common.service.CommonService; |
| | | import com.zy.core.cache.SlaveConnection; |
| | | import com.zy.core.dispatcher.ShuttleDispatchUtils; |
| | | import com.zy.core.enums.SlaveType; |
| | | import com.zy.core.enums.WrkIoType; |
| | | import com.zy.core.model.ForkLiftSlave; |
| | | import com.zy.core.model.ShuttleSlave; |
| | | import com.zy.core.model.protocol.ForkLiftProtocol; |
| | |
| | | private ApiLogService apiLogService; |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | |
| | | @PostMapping("/createMoveTask") |
| | | @OpenApiLog(memo = "å°è½¦ç§»å¨ä»»å¡") |
| | |
| | | |
| | | apiLogService.insert(new ApiLog( |
| | | null |
| | | , "è·åæå®åºä½ä¿¡æ¯" |
| | | , "/getLocInformation" |
| | | , "è·åå
¨é¨åºä½ä¿¡æ¯" |
| | | , "/getAllLocInformation" |
| | | , null |
| | | , null |
| | | , null |
| | |
| | | |
| | | apiLogService.insert(new ApiLog( |
| | | null |
| | | , "è·åæå®åºä½ä¿¡æ¯" |
| | | , "/getLocInformation" |
| | | , "å°è½¦éå" |
| | | , "/shuttleGather" |
| | | , null |
| | | , null |
| | | , null |
| | |
| | | return R.ok().add(shuttleGather); |
| | | } |
| | | |
| | | @PostMapping("/queryTask") |
| | | @OpenApiLog(memo = "æ¥è¯¢ä»»å¡") |
| | | public R queryTask(@RequestBody QueryTaskParam param) { |
| | | EntityWrapper<WrkMast> wrapper = new EntityWrapper<>(); |
| | | if(param.getTaskNo() != null) { |
| | | wrapper.eq("wms_wrk_no", param.getTaskNo()); |
| | | } |
| | | |
| | | if(param.getTaskType() != null) { |
| | | WrkIoType ioType = WrkIoType.get(param.getTaskType()); |
| | | if(ioType == null) { |
| | | return R.error("ä»»å¡ç±»åä¸åå¨"); |
| | | } |
| | | wrapper.eq("io_type", ioType.id); |
| | | } |
| | | List<WrkMast> wrkMasts = wrkMastService.selectList(wrapper); |
| | | apiLogService.insert(new ApiLog( |
| | | null |
| | | , "æ¥è¯¢ä»»å¡" |
| | | , "/queryTask" |
| | | , null |
| | | , null |
| | | , null |
| | | , null |
| | | , JSON.toJSONString(wrkMasts) |
| | | , null |
| | | , null |
| | | , 1 |
| | | , new Date() |
| | | , null |
| | | , null |
| | | )); |
| | | |
| | | return R.ok().add(wrkMasts); |
| | | } |
| | | |
| | | @GetMapping("/test") |
| | | public R test() { |
| | | notifyUtils.notify("task", 1, "9999", "W9999", NotifyMsgType.SHUTTLE_MOVING, "data"); |
New file |
| | |
| | | package com.zy.asrs.domain.param; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class QueryTaskParam { |
| | | |
| | | //ä»»å¡ç±»å |
| | | private Integer taskType; |
| | | |
| | | //ä»»å¡å· |
| | | private String taskNo; |
| | | |
| | | } |
| | |
| | | return false; |
| | | } |
| | | |
| | | // //æ£æµéç¢ç©è½¦ |
| | | // boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ |
| | | // add(shuttleProtocol.getShuttleNo()); |
| | | // }}); |
| | | // if (checkObstacle) { |
| | | // News.info("{}ä»»å¡ï¼é¿éèå´æå°è½¦ï¼çå¾
éç¢å°è½¦è°ç¦»ä¸", wrkMast.getWrkNo()); |
| | | // return false; |
| | | // } |
| | | //æ£æµéç¢ç©è½¦ |
| | | boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ |
| | | add(shuttleProtocol.getShuttleNo()); |
| | | }}); |
| | | if (checkObstacle) { |
| | | News.info("{}ä»»å¡ï¼é¿éèå´æå°è½¦ï¼çå¾
éç¢å°è½¦è°ç¦»ä¸", wrkMast.getWrkNo()); |
| | | return false; |
| | | } |
| | | |
| | | ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); |
| | | assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // ååç©¿æ¢è½¦ç¼å· |
| | |
| | | |
| | | //夿å°è½¦æ¯å¦å°è¾¾è´§ç©åºä½ |
| | | if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { |
| | | //æ£æµéç¢ç©è½¦ |
| | | boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getSourceLocNo(), new ArrayList<Integer>() {{ |
| | | add(shuttleProtocol.getShuttleNo()); |
| | | }}); |
| | | if (checkObstacle) { |
| | | News.info("{}ä»»å¡ï¼é¿éèå´æå°è½¦ï¼çå¾
éç¢å°è½¦è°ç¦»ä¸", wrkMast.getWrkNo()); |
| | | return false; |
| | | } |
| | | |
| | | //å°è½¦ä¸å¨è¾éç«ç¹ä½ç½® |
| | | shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//è°åº¦å°è½¦å°è´§ç©æå¨åºä½è¿è¡åè´§ |
| | | News.taskInfo(wrkMast.getWrkNo(), "{}ä»»å¡ï¼{}å°è½¦ï¼æªå°è¾¾è¾éç«ç¹ï¼ç³»ç»çå¾
ä¸", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); |
| | | return false; |
| | | } |
| | | |
| | | // //æ£æµéç¢ç©è½¦ |
| | | // boolean checkObstacle = shuttleOperaUtils.checkObstacle(liftSta.getLocNo(), new ArrayList<Integer>() {{ |
| | | // add(shuttleProtocol.getShuttleNo()); |
| | | // }}); |
| | | // if (checkObstacle) { |
| | | // News.info("{}ä»»å¡ï¼é¿éèå´æå°è½¦ï¼çå¾
éç¢å°è½¦è°ç¦»ä¸", wrkMast.getWrkNo()); |
| | | // return false; |
| | | // } |
| | | |
| | | ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); |
| | | assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // ååç©¿æ¢è½¦ç¼å· |
| | |
| | | return false; |
| | | } |
| | | |
| | | // commands.add(0, liftCommand.get(0)); |
| | | // commands.add(liftCommand2.get(0)); |
| | | commands.add(0, liftCommand.get(0)); |
| | | commands.add(liftCommand2.get(0)); |
| | | assignCommand.setCommands(commands); |
| | | |
| | | wrkMast.setWrkSts(WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts);//å°è½¦æ¬è¿ä¸ 501.çæç§»åºä»»å¡ ==> 502.å°è½¦æ¬è¿ä¸ |
| | |
| | | return false; |
| | | } |
| | | |
| | | // //æ£æµéç¢ç©è½¦ |
| | | // boolean checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{ |
| | | // add(shuttleProtocol.getShuttleNo()); |
| | | // }}); |
| | | // if (checkObstacle) { |
| | | // News.info("{}ä»»å¡ï¼é¿éèå´æå°è½¦ï¼çå¾
éç¢å°è½¦è°ç¦»ä¸", wrkMast.getWrkNo()); |
| | | // return false; |
| | | // } |
| | | //æ£æµéç¢ç©è½¦ |
| | | boolean checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{ |
| | | add(shuttleProtocol.getShuttleNo()); |
| | | }}); |
| | | if (checkObstacle) { |
| | | News.info("{}ä»»å¡ï¼é¿éèå´æå°è½¦ï¼çå¾
éç¢å°è½¦è°ç¦»ä¸", wrkMast.getWrkNo()); |
| | | return false; |
| | | } |
| | | |
| | | //è°åº¦å°è½¦å»å¾
æºä½ |
| | | boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), basShuttleCharge.getWaitLocNo(), wrkMast.getShuttleNo()); |
| | |
| | | continue; |
| | | } |
| | | |
| | | HashMap<String, Integer> carMap = findCarMap(); |
| | | |
| | | String targetLocNo = null; |
| | | for (NavigateNode node : outerNodes) { |
| | | String dispatchLocNo = NavigatePositionConvert.nodeToLocNo(node); |
| | | if (carMap.containsKey(dispatchLocNo)) { |
| | | continue; |
| | | //è·åå
åèç¹ |
| | | List<NavigateNode> avoidInnerNodes = getInnerNodes(dispatchLocNo, innerCircle, new ArrayList<>()); |
| | | //计ç®å
忝妿å°è½¦ |
| | | List<Integer> avoidNodesCar = findNodesCar(avoidInnerNodes); |
| | | if(!avoidNodesCar.isEmpty()) { |
| | | continue; |
| | | } |
| | | targetLocNo = dispatchLocNo; |
| | | break; |
| | |
| | | |
| | | for (int i = 0; i < outerCircle; i++) { |
| | | int idx = i + 1; |
| | | List<NavigateNode> list = extend_nodes(map, currentNode, idx); |
| | | List<NavigateNode> list = extend_outer_nodes(map, currentNode, idx); |
| | | if (list.isEmpty()) { |
| | | continue; |
| | | } |
| | |
| | | |
| | | for (int i = 0; i < innerCircle; i++) { |
| | | int idx = i + 1; |
| | | List<NavigateNode> list = extend_nodes(map, currentNode, idx); |
| | | List<NavigateNode> list = extend_inner_nodes(map, currentNode, idx); |
| | | if (list.isEmpty()) { |
| | | continue; |
| | | } |
| | |
| | | return innerNodes; |
| | | } |
| | | |
| | | private List<NavigateNode> extend_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) { |
| | | private List<NavigateNode> extend_inner_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) { |
| | | //é»è®¤å°å¾æ¯è½¨æ¹åx |
| | | String mapDirection = "x"; |
| | | ConfigService configService = SpringUtils.getBean(ConfigService.class); |
| | |
| | | return nodes; |
| | | } |
| | | |
| | | private List<NavigateNode> extend_outer_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) { |
| | | ArrayList<NavigateNode> nodes = new ArrayList<>(); |
| | | int x = startNode.getX(); |
| | | int y = startNode.getY(); |
| | | int z = startNode.getZ(); |
| | | |
| | | if (is_valid(map, x + innerCircleIdx, y)) { |
| | | NavigateNode node = new NavigateNode(x + innerCircleIdx, y); |
| | | node.setNodeValue(map[x + innerCircleIdx][y]); |
| | | node.setZ(z); |
| | | if (node.getNodeValue().equals(startNode.getNodeValue())) { |
| | | nodes.add(node); |
| | | } |
| | | } |
| | | |
| | | if (is_valid(map, x - innerCircleIdx, y)) { |
| | | NavigateNode node = new NavigateNode(x - innerCircleIdx, y); |
| | | node.setNodeValue(map[x - innerCircleIdx][y]); |
| | | node.setZ(z); |
| | | if (node.getNodeValue().equals(startNode.getNodeValue())) { |
| | | nodes.add(node); |
| | | } |
| | | } |
| | | |
| | | if (is_valid(map, x, y + innerCircleIdx)) { |
| | | NavigateNode node = new NavigateNode(x, y + innerCircleIdx); |
| | | node.setNodeValue(map[x][y + innerCircleIdx]); |
| | | node.setZ(z); |
| | | if (node.getNodeValue().equals(startNode.getNodeValue())) { |
| | | nodes.add(node); |
| | | } |
| | | } |
| | | |
| | | if (is_valid(map, x, y - innerCircleIdx)) { |
| | | NavigateNode node = new NavigateNode(x, y - innerCircleIdx); |
| | | node.setNodeValue(map[x][y - innerCircleIdx]); |
| | | node.setZ(z); |
| | | if (node.getNodeValue().equals(startNode.getNodeValue())) { |
| | | nodes.add(node); |
| | | } |
| | | } |
| | | return nodes; |
| | | } |
| | | |
| | | private boolean is_valid(int[][] map, int x, int y) { |
| | | if (x < 0 || x >= map.length |
| | | || y < 0 || y >= map[0].length) { |
New file |
| | |
| | | INSERT INTO `sys_config` (`name`, `code`, `value`, `type`, `status`) VALUES ('é¿éå
ååå¾', 'avoidInnerCircle', '1', 1, 1); |
| | | INSERT INTO `sys_config` (`name`, `code`, `value`, `type`, `status`) VALUES ('é¿éå¤ååå¾', 'avoidOuterCircle', '3', 1, 1); |