| | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.zy.asrs.common.utils.HttpHandler; |
| | | import com.zy.asrs.framework.common.DateUtils; |
| | | import com.zy.asrs.framework.common.SpringUtils; |
| | |
| | | import java.text.MessageFormat; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | @Slf4j |
| | | @SuppressWarnings("all") |
| | |
| | | ///读取四向穿梭车状态-end |
| | | |
| | | //小车处于忙碌状态,将标记置为true |
| | | if (!shuttleProtocol.getIdle()) { |
| | | if (deviceStatus == 1 || deviceStatus == 2 || deviceStatus == 5) { |
| | | shuttleProtocol.setPakMk(true); |
| | | } |
| | | |
| | |
| | | ArrayList<HashMap<String, Object>> modes = new ArrayList<>(); |
| | | //获取分段路径 |
| | | ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodes); |
| | | for (ArrayList<NavigateNode> sectionNodes : data) { |
| | | for (int idx = 0; idx < data.size(); idx++) { |
| | | ArrayList<NavigateNode> sectionNodes = data.get(idx); |
| | | boolean isRemoveFooterNode = false;//是否剔除尾节点 |
| | | if (idx != data.size() - 1) { |
| | | isRemoveFooterNode = true;//剔除尾节点 |
| | | } |
| | | |
| | | boolean flag = true; |
| | | int oper; |
| | | //开始路径 |
| | | NavigateNode startPath = nodes.get(0); |
| | | NavigateNode startPath = sectionNodes.get(0); |
| | | //结束路径 |
| | | NavigateNode targetPath = sectionNodes.get(sectionNodes.size() - 1); |
| | | if (ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT |
| | | || ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.RIGHT) { |
| | | //母轨方向 |
| | | oper = 5; |
| | | }else { |
| | | } else { |
| | | //子轨方向 |
| | | oper = 6; |
| | | } |
| | | |
| | | for (NavigateNode node : sectionNodes) { |
| | | for (int i = 0; i < sectionNodes.size(); i++) { |
| | | if (isRemoveFooterNode && i == sectionNodes.size() - 1) { |
| | | continue; |
| | | } |
| | | NavigateNode node = sectionNodes.get(i); |
| | | HashMap<String, Object> map = new HashMap<>(); |
| | | map.put("nodexX", node.getX()); |
| | | map.put("nodexY", node.getY()); |
| | | map.put("nodexZ", node.getZ()); |
| | | map.put("nodeX", node.getX()); |
| | | map.put("nodeY", node.getY()); |
| | | map.put("nodeZ", node.getZ()); |
| | | if (flag) { |
| | | map.put("oper", oper); |
| | | flag = false; |
| | |
| | | param.put("messageName", "runRoute"); |
| | | param.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); |
| | | param.put("deviceNo", device.getDeviceNo()); |
| | | param.put("taskId", taskNo); |
| | | param.put("taskId", generateDeviceTaskNo(taskNo)); |
| | | param.put("nodeNum", nodes.size()); |
| | | param.put("modes", modes); |
| | | String response = new HttpHandler.Builder() |
| | |
| | | .setPath("/RDS/runRoute") |
| | | .setHeaders(headers) |
| | | .setJson(JSON.toJSONString(param)) |
| | | .setTimeout(60, TimeUnit.SECONDS) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | |
| | | .setPath("/RDS/runOrder") |
| | | .setHeaders(headers) |
| | | .setJson(command.getBody()) |
| | | .setTimeout(60, TimeUnit.SECONDS) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | |
| | | .setPath("/RDS/actionOrder") |
| | | .setHeaders(headers) |
| | | .setJson(command.getBody()) |
| | | .setTimeout(60, TimeUnit.SECONDS) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | |
| | | .setPath("/RDS/actionOrder") |
| | | .setHeaders(headers) |
| | | .setJson(command.getBody()) |
| | | .setTimeout(60, TimeUnit.SECONDS) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | |
| | | return false; |
| | | } |
| | | } |
| | | if (this.shuttleProtocol.getIdle() == null |
| | | if (this.shuttleProtocol.getDeviceStatus() == null |
| | | || this.shuttleProtocol.getPakMk() == null |
| | | || this.shuttleProtocol.getErrorCode() == null |
| | | || this.shuttleProtocol.getProtocolStatus() == null |
| | |
| | | return false; |
| | | } |
| | | |
| | | boolean res = this.shuttleProtocol.getIdle() |
| | | boolean res = (this.shuttleProtocol.getDeviceStatus() == 3 || this.shuttleProtocol.getDeviceStatus() == 11) |
| | | && this.shuttleProtocol.getPakMk() |
| | | && this.shuttleProtocol.getErrorCode().equals("0") |
| | | && this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id |
| | | && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id) |
| | | ; |
| | | return res; |
| | | } |
| | | |
| | | @Override |
| | | public boolean isDeviceIdle() { |
| | | if (this.shuttleProtocol.getDeviceStatus() == null |
| | | || this.shuttleProtocol.getPakMk() == null |
| | | || this.shuttleProtocol.getErrorCode() == null |
| | | ) { |
| | | return false; |
| | | } |
| | | |
| | | boolean res = (this.shuttleProtocol.getDeviceStatus() == 3 || this.shuttleProtocol.getDeviceStatus() == 11) |
| | | && this.shuttleProtocol.getPakMk() |
| | | && this.shuttleProtocol.getErrorCode().equals("0") |
| | | ; |
| | | return res; |
| | | } |
| | | |
| | | @Override |
| | | public boolean isRequireCharge() { |
| | | if (this.shuttleProtocol.getIdle() == null |
| | | if (this.shuttleProtocol.getDeviceStatus() == null |
| | | || this.shuttleProtocol.getPakMk() == null |
| | | || this.shuttleProtocol.getErrorCode() == null |
| | | || this.shuttleProtocol.getProtocolStatus() == null |
| | |
| | | return false; |
| | | } |
| | | |
| | | boolean res = this.shuttleProtocol.getIdle() |
| | | boolean res = (this.shuttleProtocol.getDeviceStatus() == 3) |
| | | && this.shuttleProtocol.getPakMk() |
| | | && this.shuttleProtocol.getErrorCode().equals("0") |
| | | && this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id |
| | |
| | | |
| | | @Override |
| | | public List<NavigateNode> getMoveAdvancePath() { |
| | | ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class); |
| | | ArrayList<NavigateNode> path = new ArrayList<>(); |
| | | if (shuttleProtocol.getTaskNo() != 0) { |
| | | //存在任务,获取指令 |
| | | Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_FLAG + shuttleProtocol.getTaskNo()); |
| | | Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_WORK_FLAG + shuttleProtocol.getTaskNo()); |
| | | if (object != null) { |
| | | ShuttleRedisCommand redisCommand = JSON.parseObject(object.toString(), ShuttleRedisCommand.class); |
| | | ShuttleRedisCommand redisCommand = null; |
| | | try { |
| | | redisCommand = objectMapper.readValue(String.valueOf(object), ShuttleRedisCommand.class); |
| | | } catch (JsonProcessingException e) { |
| | | return path; |
| | | } |
| | | List<NavigateNode> nodes = redisCommand.getAssignCommand().getNodes();//穿梭车预计路径 |
| | | if (nodes == null) { |
| | | return path; |
| | | } |
| | | if (!nodes.isEmpty()) { |
| | | path.addAll(nodes); |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public int generateDeviceTaskNo(int taskNo) { |
| | | int no = taskNo % 255; |
| | | if (no <= 1) { |
| | | no = 2; |
| | | } |
| | | return no; |
| | | } |
| | | |
| | | @Override |
| | | public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) { |
| | | HashMap<String, Object> body = new HashMap<>(); |
| | | body.put("messageName", "runOrder"); |
| | | body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); |
| | | body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo())); |
| | | body.put("taskId", taskNo); |
| | | body.put("taskId", generateDeviceTaskNo(taskNo)); |
| | | |
| | | LocService locService = SpringUtils.getBean(LocService.class); |
| | | Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() |