zhibing.pu
2024-06-24 d0bd61d3b3f637750bb21587dfa81503f2d4b6a8
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java
@@ -54,7 +54,7 @@
    * @param type 0=服务端,1=乘客,2=司机
    * @return
    */
   public String fleetEngineAuth(int type, Integer id){
   public Map<String, Object> fleetEngineAuth(int type, Integer id){
      try {
         //谷歌云服务器使用这部分代码
//         AuthTokenMinter minter = AuthTokenMinter.builder()
@@ -75,23 +75,53 @@
               .build();
         
         String jwt = "";
         Long expirationTimestamp = 0L;
         if(0 == type){
            FleetEngineToken serverToken = minter.getServerToken();
            jwt = serverToken.jwt();
            expirationTimestamp = serverToken.expirationTimestamp().getTime();
         }
         if(1 == type){
            FleetEngineToken consumerToken = minter.getConsumerToken(TripClaims.create("I-GO-USER" + id));
            jwt = consumerToken.jwt();
            expirationTimestamp = consumerToken.expirationTimestamp().getTime();
         }
         if(2 == type){
            FleetEngineToken driverToken = minter.getDriverToken(VehicleClaims.create("I-GO-CAR" + id));
            jwt = driverToken.jwt();
            expirationTimestamp = driverToken.expirationTimestamp().getTime();
         }
         return jwt;
         Map<String, Object> map = new HashMap<>();
         map.put("token", jwt);
         map.put("expirationTimestamp", expirationTimestamp);
         return map;
      } catch (SigningTokenException e) {
         throw new RuntimeException(e);
      }
   }
   public String getToken(){
      String token_json = redisUtil.getValue("google_token");
      String google_token = "";
      if(!StringUtils.hasLength(token_json)){
         Map<String, Object> map = fleetEngineAuth(0, null);
         redisUtil.setStrValue("google_token", JSON.toJSONString(map));
         google_token = map.get("token").toString();
      }else{
         JSONObject jsonObject1 = JSON.parseObject(token_json);
         Long expirationTimestamp = jsonObject1.getLong("expirationTimestamp");
         google_token = jsonObject1.getString("token");
         if((expirationTimestamp - 10000L) <= System.currentTimeMillis()){
            Map<String, Object> map = fleetEngineAuth(0, null);
            redisUtil.setStrValue("google_token", JSON.toJSONString(map));
            google_token = map.get("token").toString();
         }
      }
      return google_token;
   }
   
   
   
@@ -102,16 +132,11 @@
    * @param licensePlate 车牌号
    * @param id 车辆id
    */
   public String createVehicles(int maximumCapacity, String licensePlate, Integer id) throws Exception{
      String google_token = redisUtil.getValue("google_token");
      if(!StringUtils.hasLength(google_token)){
         google_token = fleetEngineAuth(0, null);
         redisUtil.setStrValue("google_token", google_token);
      }
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/vehicles?vehicleId=" + "I-GO-CAR" + id;
   public String createVehicles(int maximumCapacity, String licensePlate, String id) throws Exception{
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/vehicles?vehicleId=" + id;
      HttpRequest post = HttpUtil.createPost(url);
      Map<String, String> headers = new HashMap<>();
      headers.put("Authorization", "Bearer " + google_token);
      headers.put("Authorization", "Bearer " + getToken());
      headers.put("Content-Type", "application/json");
      post.addHeaders(headers);
      
@@ -131,7 +156,7 @@
      HttpRequest request = post.body(body.toJSONString());
      HttpResponse response = request.execute();
      logger.info("创建车辆结果:{}", response.body());
      JSONObject jsonObject = JSON.parseObject(response.body());
      JSONObject jsonObject = JSON.parseObject(response.body().replaceAll("@type", "type"));
      JSONObject error = jsonObject.getJSONObject("error");
      if(null != error){
         Integer code = error.getInteger("code");
@@ -142,7 +167,7 @@
               return createVehicles(maximumCapacity, licensePlate, id);
            }
         }
         throw new Exception(body.toJSONString());
         throw new Exception(response.body());
      }
      /**
       * 返回结果
@@ -176,21 +201,16 @@
    * @param id
    * @return
    */
   public String updateVehicles(String vehicleState, Integer maximumCapacity, String licensePlate, Integer id) throws Exception{
      String google_token = redisUtil.getValue("google_token");
      if(!StringUtils.hasLength(google_token)){
         google_token = fleetEngineAuth(0, null);
         redisUtil.setStrValue("google_token", google_token);
      }
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/vehicles/" + "I-GO-CAR" + id + "?updateMask=";
   public String updateVehicles(String vehicleState, Integer maximumCapacity, String licensePlate, String id) throws Exception{
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/vehicles/" + id + "?updateMask=";
      List<String> sb = new ArrayList<>();
      if(!StringUtils.hasLength(vehicleState)){
      if(StringUtils.hasLength(vehicleState)){
         sb.add("vehicleState");
      }
      if(null != maximumCapacity){
         sb.add("maximumCapacity");
      }
      if(!StringUtils.hasLength(licensePlate)){
      if(StringUtils.hasLength(licensePlate)){
         sb.add("licensePlate");
      }
      String collect = sb.stream().collect(Collectors.joining(","));
@@ -198,7 +218,7 @@
      
      HttpRequest put = HttpUtil.createRequest(Method.PUT, url);
      Map<String, String> headers = new HashMap<>();
      headers.put("Authorization", "Bearer " + google_token);
      headers.put("Authorization", "Bearer " + getToken());
      headers.put("Content-Type", "application/json");
      put.addHeaders(headers);
      
@@ -208,13 +228,13 @@
       * OFFLINE   车辆不接受新行程。注意:在完成分配给车辆的行程时,车辆仍可继续在此状态下运行。
       * ONLINE   车辆正在接受新行程。
       */
      if(!StringUtils.hasLength(vehicleState)){
      if(StringUtils.hasLength(vehicleState)){
         body.put("vehicleState", vehicleState);
      }
      if(null != maximumCapacity){
         body.put("maximumCapacity", maximumCapacity);
      }
      if(!StringUtils.hasLength(licensePlate)){
      if(StringUtils.hasLength(licensePlate)){
         JSONObject licensePlate1 = new JSONObject();
         licensePlate1.put("countryCode", "GH");
         licensePlate1.put("lastCharacter", getLastNumber(licensePlate));
@@ -229,7 +249,7 @@
      logger.info("修改车辆信息请求:{}", body.toJSONString());
      HttpResponse response = put.execute();
      logger.info("修改车辆信息结果:{}", response.body());
      JSONObject jsonObject = JSON.parseObject(response.body());
      JSONObject jsonObject = JSON.parseObject(response.body().replaceAll("@type", "type"));
      JSONObject error = jsonObject.getJSONObject("error");
      if(null != error){
         Integer code = error.getInteger("code");
@@ -240,7 +260,7 @@
               return updateVehicles(vehicleState, maximumCapacity, licensePlate, id);
            }
         }
         throw new Exception(body.toJSONString());
         throw new Exception(response.body());
      }
      /**
       * 返回结果
@@ -272,22 +292,17 @@
    * @param id 车辆id
    * @return
    */
   public String getVehicles(Integer id) throws Exception{
      String google_token = redisUtil.getValue("google_token");
      if(!StringUtils.hasLength(google_token)){
         google_token = fleetEngineAuth(0, null);
         redisUtil.setStrValue("google_token", google_token);
      }
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/vehicles" + (null != id ? "/I-GO-CAR" + id : "");
   public String getVehicles(String id) throws Exception{
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/vehicles/" + (null != id ? id : "");
      HttpRequest get = HttpUtil.createGet(url);
      Map<String, String> headers = new HashMap<>();
      headers.put("Authorization", "Bearer " + google_token);
      headers.put("Authorization", "Bearer " + getToken());
      headers.put("Content-Type", "application/json");
      get.addHeaders(headers);
      
      HttpResponse response = get.execute();
      logger.info("查询车辆结果:{}", response.body());
      JSONObject jsonObject = JSON.parseObject(response.body());
      JSONObject jsonObject = JSON.parseObject(response.body().replaceAll("@type", "type"));
      JSONObject error = jsonObject.getJSONObject("error");
      if(null != error){
         Integer code = error.getInteger("code");
@@ -374,29 +389,25 @@
    * 创建新的行程
    * @param vehicleId 车辆id
    * @param numberOfPassengers 人数
    * @param orderType 订单类型(1/4)
    * @param orderId 订单id
    * @param tripId 订单id
    * @param start_lat 起点纬度
    * @param start_lng 起点经度
    * @param end_lat 终点纬度
    * @param end_lng 终点经度
    * @return
    */
   public String createTrip(Integer vehicleId, Integer numberOfPassengers, Integer orderType, Integer orderId, String start_lat, String start_lng, String end_lat, String end_lng) throws Exception{
      String google_token = redisUtil.getValue("google_token");
      if(!StringUtils.hasLength(google_token)){
         google_token = fleetEngineAuth(0, null);
         redisUtil.setStrValue("google_token", google_token);
      }
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/trips?tripId=" + "I-GO-" + (orderType == 1 ? "RIDE" : "DELIVERY") + orderId;
   public String createTrip(String vehicleId, Integer numberOfPassengers, String tripId, String start_lat, String start_lng, String end_lat, String end_lng) throws Exception{
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/trips?tripId=" + tripId;
      HttpRequest post = HttpUtil.createPost(url);
      Map<String, String> headers = new HashMap<>();
      headers.put("Authorization", "Bearer " + google_token);
      headers.put("Authorization", "Bearer " + getToken());
      headers.put("Content-Type", "application/json");
      post.addHeaders(headers);
      
      JSONObject body = new JSONObject();
      body.put("vehicleId", "I-GO-CAR" + vehicleId);
      if(StringUtils.hasLength(vehicleId)){
         body.put("vehicleId", vehicleId);
      }
      body.put("tripStatus", "NEW");
      body.put("tripType", "SHARED");
      body.put("numberOfPassengers", numberOfPassengers);
@@ -418,7 +429,7 @@
      HttpRequest request = post.body(body.toJSONString());
      HttpResponse response = request.execute();
      logger.info("创建行程结果:{}", response.body());
      JSONObject jsonObject = JSON.parseObject(response.body());
      JSONObject jsonObject = JSON.parseObject(response.body().replaceAll("@type", "type"));
      JSONObject error = jsonObject.getJSONObject("error");
      if(null != error){
         Integer code = error.getInteger("code");
@@ -426,10 +437,10 @@
            String reason = error.getJSONArray("details").getJSONObject(0).getString("reason");
            if(reason.equals("ACCESS_TOKEN_EXPIRED")){
               redisUtil.remove("google_token");
               return createTrip(vehicleId, numberOfPassengers, orderType, orderId, start_lat, start_lng, end_lat, end_lng);
               return createTrip(vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng);
            }
         }
         throw new Exception(body.toJSONString());
         throw new Exception(response.body());
      }
      /**
       * 返回结果
@@ -555,36 +566,30 @@
    * @param tripStatus 行程状态
    * @param vehicleId 车辆id
    * @param numberOfPassengers 人数
    * @param orderType 订单类型(1/4)
    * @param orderId 订单id
    * @param tripId 订单id
    * @param start_lat 起点纬度
    * @param start_lng 起点经度
    * @param end_lat 终点纬度
    * @param end_lng 终点经度
    * @return
    */
   public String updateTrip(String tripStatus, Integer vehicleId, Integer numberOfPassengers, Integer orderType, Integer orderId, String start_lat, String start_lng, String end_lat, String end_lng) throws Exception {
      String google_token = redisUtil.getValue("google_token");
      if(!StringUtils.hasLength(google_token)){
         google_token = fleetEngineAuth(0, null);
         redisUtil.setStrValue("google_token", google_token);
      }
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/trips/" + "I-GO-" + (orderType == 1 ? "RIDE" : "DELIVERY") + orderId + "?updateMask=";
   public String updateTrip(String tripStatus, String vehicleId, Integer numberOfPassengers, String tripId, String start_lat, String start_lng, String end_lat, String end_lng) throws Exception {
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/trips/" + tripId + "?updateMask=";
      List<String> sb = new ArrayList<>();
      if(null != vehicleId){
      if(StringUtils.hasLength(vehicleId)){
         sb.add("vehicleId");
      }
      if(!StringUtils.hasLength(tripStatus)){
      if(StringUtils.hasLength(tripStatus)){
         sb.add("tripStatus");
      }
      if(null != numberOfPassengers){
         sb.add("numberOfPassengers");
      }
      if(!StringUtils.hasLength(start_lat) && !StringUtils.hasLength(start_lng)){
      if(StringUtils.hasLength(start_lat) && StringUtils.hasLength(start_lng)){
         sb.add("pickupPoint");
      }
      
      if(!StringUtils.hasLength(end_lat) && !StringUtils.hasLength(end_lng)){
      if(StringUtils.hasLength(end_lat) && StringUtils.hasLength(end_lng)){
         sb.add("dropoffPoint");
      }
      String collect = sb.stream().collect(Collectors.joining(","));
@@ -592,13 +597,13 @@
      
      HttpRequest put = HttpUtil.createRequest(Method.PUT, url);
      Map<String, String> headers = new HashMap<>();
      headers.put("Authorization", "Bearer " + google_token);
      headers.put("Authorization", "Bearer " + getToken());
      headers.put("Content-Type", "application/json");
      put.addHeaders(headers);
      
      JSONObject body = new JSONObject();
      if(null != vehicleId){
         body.put("vehicleId", "I-GO-CAR" + vehicleId);
      if(StringUtils.hasLength(vehicleId)){
         body.put("vehicleId", vehicleId);
      }
      /**
       * UNKNOWN_TRIP_STATUS   默认,用于未指定或无法识别的行程状态。
@@ -611,13 +616,13 @@
       * COMPLETE   乘客已下车,行程已完成。
       * CANCELED   在司机、乘客或拼车服务提供商取车之前,行程被取消。
       */
      if(!StringUtils.hasLength(tripStatus)){
      if(StringUtils.hasLength(tripStatus)){
         body.put("tripStatus", tripStatus);
      }
      if(null != numberOfPassengers){
         body.put("numberOfPassengers", numberOfPassengers);
      }
      if(!StringUtils.hasLength(start_lat) && !StringUtils.hasLength(start_lng)){
      if(StringUtils.hasLength(start_lat) && StringUtils.hasLength(start_lng)){
         JSONObject pickupPoint = new JSONObject();
         JSONObject point = new JSONObject();
         point.put("latitude", start_lat);
@@ -626,7 +631,7 @@
         body.put("pickupPoint", pickupPoint);
      }
      
      if(!StringUtils.hasLength(end_lat) && !StringUtils.hasLength(end_lng)){
      if(StringUtils.hasLength(end_lat) && StringUtils.hasLength(end_lng)){
         JSONObject dropoffPoint = new JSONObject();
         JSONObject end_point = new JSONObject();
         end_point.put("latitude", end_lat);
@@ -638,7 +643,7 @@
      HttpRequest request = put.body(body.toJSONString());
      HttpResponse response = request.execute();
      logger.info("修改行程结果:{}", response.body());
      JSONObject jsonObject = JSON.parseObject(response.body());
      JSONObject jsonObject = JSON.parseObject(response.body().replaceAll("@type", "type"));
      JSONObject error = jsonObject.getJSONObject("error");
      if(null != error){
         Integer code = error.getInteger("code");
@@ -646,7 +651,7 @@
            String reason = error.getJSONArray("details").getJSONObject(0).getString("reason");
            if(reason.equals("ACCESS_TOKEN_EXPIRED")){
               redisUtil.remove("google_token");
               return updateTrip(tripStatus, vehicleId, numberOfPassengers, orderType, orderId, start_lat, start_lng, end_lat, end_lng);
               return updateTrip(tripStatus, vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng);
            }
         }
         throw new Exception(response.body());
@@ -776,26 +781,20 @@
   
   /**
    * 获取行程信息
    * @param orderType 订单类型(1/4)
    * @param orderId 订单id
    * @param tripId 订单id
    * @return
    */
   public String getTrip(Integer orderType, Integer orderId) throws Exception {
      String google_token = redisUtil.getValue("google_token");
      if(!StringUtils.hasLength(google_token)){
         google_token = fleetEngineAuth(0, null);
         redisUtil.setStrValue("google_token", google_token);
      }
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/trips/I-GO-" + (orderType == 1 ? "RIDE" : "DELIVERY") + orderId;
   public String getTrip(String tripId) throws Exception {
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/trips/" + tripId;
      HttpRequest get = HttpUtil.createGet(url);
      Map<String, String> headers = new HashMap<>();
      headers.put("Authorization", "Bearer " + google_token);
      headers.put("Authorization", "Bearer " + getToken());
      headers.put("Content-Type", "application/json");
      get.addHeaders(headers);
      
      HttpResponse response = get.execute();
      logger.info("查询行程结果:{}", response.body());
      JSONObject jsonObject = JSON.parseObject(response.body());
      JSONObject jsonObject = JSON.parseObject(response.body().replaceAll("@type", "type"));
      JSONObject error = jsonObject.getJSONObject("error");
      if(null != error){
         Integer code = error.getInteger("code");
@@ -806,7 +805,7 @@
            String reason = error.getJSONArray("details").getJSONObject(0).getString("reason");
            if(reason.equals("ACCESS_TOKEN_EXPIRED")){
               redisUtil.remove("google_token");
               return getTrip(orderType, orderId);
               return getTrip(tripId);
            }
         }
         throw new Exception(response.body());