| package com.zy.common.utils; | 
|   | 
| import com.alibaba.fastjson.JSON; | 
| import com.alibaba.fastjson.JSONObject; | 
| import com.zy.common.model.NavigateNode; | 
| import com.zy.core.model.command.NyShuttleHttpCommand; | 
| import com.zy.core.model.protocol.NyShuttleProtocol; | 
|   | 
| import java.util.*; | 
|   | 
| /** | 
|  * 牛眼四向穿梭车HTTP请求工具类 | 
|  */ | 
| public class NyHttpUtils { | 
|   | 
|     private static final String requestUrl = "localhost:9090/skwcs"; | 
|   | 
|     //获取HTTP请求标准结构体 | 
|     public static NyShuttleHttpCommand getHttpStandard(Integer shuttleNo) { | 
|         NyShuttleHttpCommand httpStandard = new NyShuttleHttpCommand(); | 
|         httpStandard.setMsgType("requestMsg");//请求消息 | 
|         httpStandard.setRobotId(shuttleNo);//车辆编号 | 
|   | 
|         //设置请求消息 | 
|         NyShuttleHttpCommand.NyRequest request = new NyShuttleHttpCommand.NyRequest(); | 
|         NyShuttleHttpCommand.NyRequest.NyHeader header = new NyShuttleHttpCommand.NyRequest.NyHeader(); | 
|         header.setVersion("1.0");//版本号 | 
|         header.setRequestId(getRequestId());//消息编号 | 
|   | 
|         //设置请求头 | 
|         request.setHeader(header); | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取FAS 手动/自动切换 | 
|     public static NyShuttleHttpCommand getFASSwitchCommand(Integer shuttleNo, boolean auto) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", auto ? "switchAuto" : "switchManual"); | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取移动请求 | 
|     public static NyShuttleHttpCommand getMoveCommand(Integer shuttleNo, Integer wrkNo, NavigateNode start, NavigateNode target) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", "move");//移动命令 | 
|         body.put("taskId", wrkNo);//任务号 | 
|         body.put("start", navigateNodeToNyPointNode(start));//起点 | 
|         body.put("target", navigateNodeToNyPointNode(target));//终点 | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取进出提升机请求 | 
|     public static NyShuttleHttpCommand getInOutLiftCommand(Integer shuttleNo, Integer wrkNo, NavigateNode start, NavigateNode target, boolean in) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", in ? "intoLift" : "outLift");//进出提升机 | 
|         body.put("taskId", wrkNo);//任务号 | 
|         body.put("start", navigateNodeToNyPointNode(start));//起点 | 
|         body.put("target", navigateNodeToNyPointNode(target));//终点 | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取顶升命令 | 
|     public static NyShuttleHttpCommand getPalletLiftCommand(Integer shuttleNo, Integer wrkNo, boolean lift) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", lift ? "liftUp" : "liftDown");//顶升或下降命令 | 
|         body.put("taskId", wrkNo);//任务号 | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取充电命令 | 
|     public static NyShuttleHttpCommand getChargeCommand(Integer shuttleNo, Integer wrkNo, boolean charge) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", charge ? "charge" : "stopCharge");//充电或停止充电 | 
|         body.put("taskId", wrkNo);//任务号 | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取管制命令 | 
|     public static NyShuttleHttpCommand getSuspendCommand(Integer shuttleNo, Integer wrkNo, boolean suspend) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", suspend ? "stop" : "resume");//管制或取消管制 | 
|         body.put("taskId", wrkNo);//任务号 | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取更新层坐标Z(楼层)命令 | 
|     public static NyShuttleHttpCommand getUpdateZCommand(Integer shuttleNo, Integer z) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", "updateFloor");//更新层Z | 
|         body.put("z", z);//坐标Z | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取读FAS状态信息命令 | 
|     public static NyShuttleHttpCommand getReadStatusCommand(Integer shuttleNo) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", "readState");//读FAS状态信息 | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取更新FAS基准地图命令 | 
|     public static NyShuttleHttpCommand getUpdateFASBaseMapCommand(Integer shuttleNo, Integer xBase, Integer yBase, Integer zBase, Integer xEnd, Integer yEnd, Integer zEnd, Integer xBaseCoord, Integer yBaseCoord, Integer xDefaultSpace, Integer yDefaultSpace) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", "updateMapStandard");//更新FAS基准地图 | 
|   | 
|         HashMap<String, Object> standard = new HashMap<>(); | 
|         standard.put("xBase", xBase);//库位X向基点 | 
|         standard.put("yBase", yBase);//库位Y向基点 | 
|         standard.put("zBase", zBase);//库位Z向基点 | 
|         standard.put("xEnd", xEnd);//库位X向终点 | 
|         standard.put("yEnd", yEnd);//库位Y向终点 | 
|         standard.put("zEnd", zEnd);//库位Z向终点 | 
|         standard.put("xBaseCoord", xBaseCoord);//库位X向基点坐标 单位mm | 
|         standard.put("yBaseCoord", yBaseCoord);//库位Y向基点坐标 单位mm | 
|         standard.put("xDefaultSpace", xDefaultSpace);//库位X向标准间距 单位mm | 
|         standard.put("yDefaultSpace", yDefaultSpace);//库位Y向标准间距 单位mm | 
|         body.put("standard", standard); | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取更新FAS特殊X轴地图命令 | 
|     public static NyShuttleHttpCommand getUpdateMapSpecialXAxisCommand(Integer shuttleNo, List<Map<String, Object>> list) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", "updateMapSpecialXAxis");//更新FAS特殊X轴地图 | 
|         body.put("specialXAxis", list); | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取更新FAS特殊Y轴地图命令 | 
|     public static NyShuttleHttpCommand getUpdateMapSpecialYAxisCommand(Integer shuttleNo, List<Map<String, Object>> list) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", "updateMapSpecialYAxis");//更新FAS特殊Y轴地图 | 
|         body.put("specialYAxis", list); | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取更新FAS特殊库位点地图命令 | 
|     public static NyShuttleHttpCommand getUpdateMapSpecialPointCommand(Integer shuttleNo, List<Map<String, Object>> list) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", "updateMapSpecialPoint");//更新FAS特殊库位点地图 | 
|         body.put("specialPoint", list); | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取更新FAS提升机点位地图命令 | 
|     public static NyShuttleHttpCommand getUpdateMapDevicePointCommand(Integer shuttleNo, List<Map<String, Object>> list) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", "updateMapDevicePoint");//更新FAS提升机点位地图 | 
|         body.put("devicePoint", list); | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取单个RFID录写命令 | 
|     public static NyShuttleHttpCommand getWriteSingleRFIDCommand(Integer shuttleNo, Integer xPoint, Integer yPoint, Integer zPoint) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", "WriteSingleRFID");//单个RFID录写 | 
|         body.put("xPoint", xPoint);//X 点位 | 
|         body.put("yPoint", yPoint);//Y 点位 | 
|         body.put("zPoint", zPoint);//Z 点位 | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取自动录写RFID命令 | 
|     public static NyShuttleHttpCommand getAutoWriteRFIDCommand(Integer shuttleNo, Integer dir, Integer xBase, Integer yBase, Integer zBase, Integer pointEnd, List<Integer> specialPoint) { | 
|         NyShuttleHttpCommand httpStandard = getHttpStandard(shuttleNo); | 
|         NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest(); | 
|   | 
|         HashMap<String, Object> body = new HashMap<>(); | 
|         body.put("requestType", "AutoWriteRFID");//自动录写RFID | 
|         body.put("requestCode", dir);//方向xDir/yDir | 
|         body.put("xBase", xBase);//X 起始点位 | 
|         body.put("yBase", yBase);//Y 起始点位 | 
|         body.put("zBase", zBase);//Z 起始点位 | 
|         body.put("pointEnd", pointEnd);//终点坐标 根据requestCode来决定终点坐标的方向 | 
|         body.put("specialPoint", specialPoint);//特殊点位过程中不需要录制的RFID点位 | 
|         request.setBody(body); | 
|   | 
|         httpStandard.setRequest(request); | 
|         return httpStandard; | 
|     } | 
|   | 
|     //获取请求编号 | 
|     public static Integer getRequestId() { | 
|         Random random = new Random(); | 
|         return random.nextInt(9999999); | 
|     } | 
|   | 
|     //发出请求 | 
|     public static JSONObject requestCommand(NyShuttleHttpCommand httpCommand) { | 
|         try { | 
|             String response = new HttpHandler.Builder() | 
|                     .setUri(requestUrl) | 
|                     .setPath("/static/readStatus.json") | 
|                     .setJson(JSON.toJSONString(httpCommand)) | 
|                     .build() | 
|                     .doGet(); | 
|             JSONObject jsonObject = JSON.parseObject(response); | 
|             JSONObject response2 = jsonObject.getJSONObject("response"); | 
|             JSONObject body = response2.getJSONObject("body"); | 
|   | 
|             if (body.get("responseType").equals("state")) {//读取状态,不需要判断success | 
|                 return body; | 
|             } | 
|   | 
|             if (body.get("result").equals("success")) { | 
|                 return body; | 
|             } | 
|         } catch (Exception e) { | 
| //            e.printStackTrace(); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     //地图节点转换牛眼节点 | 
|     public static NyShuttleProtocol.NyShuttlePointClass navigateNodeToNyPointNode(NavigateNode node) { | 
|         int[] NyPosition = NavigatePositionConvert.WCSXyzToNyXyz(node.getX(), node.getY(), node.getZ());//WCS系统坐标转牛眼坐标 | 
|         NyShuttleProtocol.NyShuttlePointClass point = new NyShuttleProtocol.NyShuttlePointClass(); | 
|         point.setX(NyPosition[0]); | 
|         point.setY(NyPosition[1]); | 
|         point.setZ(NyPosition[2]); | 
|         return point; | 
|     } | 
|   | 
| } |