Pu Zhibing
7 天以前 4c99ee7028c3fe58a2cd4b8273b22c75c45574fc
DriverIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GoogleMap/FleetEngineUtil.java
@@ -11,6 +11,8 @@
import com.google.fleetengine.auth.token.TripClaims;
import com.google.fleetengine.auth.token.VehicleClaims;
import com.google.fleetengine.auth.token.factory.signer.*;
import com.stylefeng.guns.modular.system.model.OrderTracks;
import com.stylefeng.guns.modular.system.service.IOrderTracksService;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import com.stylefeng.guns.modular.system.util.UUIDUtil;
import lombok.extern.slf4j.Slf4j;
@@ -78,6 +80,9 @@
   
   @Autowired
   private RedisUtil redisUtil;
   @Autowired
   private IOrderTracksService orderTracksService;
   
   
   
@@ -449,7 +454,7 @@
    * @param end_lng 终点经度
    * @return
    */
   public boolean createTrip(String vehicleId, Integer numberOfPassengers, String tripId, String start_lat, String start_lng, String end_lat, String end_lng) {
   public JSONObject createTrip(String vehicleId, Integer numberOfPassengers, String tripId, String start_lat, String start_lng, String end_lat, String end_lng) {
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/trips?tripId=" + tripId;
      HttpRequest post = HttpUtil.createPost(url);
      Map<String, String> headers = new HashMap<>();
@@ -478,7 +483,7 @@
      end_point.put("longitude", end_lng);
      dropoffPoint.put("point", end_point);
      body.put("dropoffPoint", dropoffPoint);
      logger.info("创建行程请求:{}", body.toJSONString());
      logger.info("创建行程请求:{}  {}", tripId, body.toJSONString());
      HttpRequest request = post.body(body.toJSONString());
      HttpResponse response = request.execute();
      logger.info("创建行程结果:{}", response.body());
@@ -499,7 +504,6 @@
            }
         }
         logger.error("创建行程异常:  tripId={}  body={}", tripId, response.body());
         return false;
      }
      /**
       * 返回结果
@@ -616,7 +620,7 @@
       *    "currentRouteSegmentTrafficVersion": "2024-05-27T02:05:37.941167Z"
       * }
       */
      return true;
      return jsonObject;
   }
   
   
@@ -632,7 +636,7 @@
    * @param end_lng 终点经度
    * @return
    */
   public boolean updateTrip(String tripStatus, String vehicleId, Integer numberOfPassengers, String tripId, String start_lat, String start_lng, String end_lat, String end_lng) {
   public boolean updateTrip(String tripStatus, String vehicleId, Integer numberOfPassengers, String tripId, String start_lat, String start_lng, String end_lat, String end_lng, Integer orderId, Integer orderType) {
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/trips/" + tripId + "?updateMask=";
      List<String> sb = new ArrayList<>();
      if(StringUtils.hasLength(vehicleId)){
@@ -698,7 +702,7 @@
         dropoffPoint.put("point", end_point);
         body.put("dropoffPoint", dropoffPoint);
      }
      logger.info("修改行程请求:{}", body.toJSONString());
      logger.info("修改行程请求:{}  {}", tripId, body.toJSONString());
      HttpRequest request = put.body(body.toJSONString());
      HttpResponse response = request.execute();
      logger.info("修改行程结果:{}", response.body());
@@ -710,16 +714,27 @@
            String status = error.getString("status");
            if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){
               redisUtil.remove("google_token");
               return updateTrip(tripStatus, vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng);
               return updateTrip(tripStatus, vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng, orderId, orderType);
            }
            String reason = error.getJSONArray("details").getJSONObject(0).getString("reason");
            if(reason.equals("ACCESS_TOKEN_EXPIRED")){
               redisUtil.remove("google_token");
               return updateTrip(tripStatus, vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng);
               return updateTrip(tripStatus, vehicleId, numberOfPassengers, tripId, start_lat, start_lng, end_lat, end_lng, orderId, orderType);
            }
         }
         if(code == 404){
            return true;
         }
         logger.error("修改行程异常:  tripId={}  body={}", tripId, response.body());
         return false;
      }else{
         if("ENROUTE_TO_DROPOFF".equals(tripStatus)){
            OrderTracks orderTracks = new OrderTracks();
            orderTracks.setOrderId(orderId);
            orderTracks.setOrderType(orderType);
            orderTracks.setGoogleTracks(jsonObject.getString("route"));
            orderTracksService.insert(orderTracks);
         }
      }
      /**
       * 返回结果
@@ -857,6 +872,7 @@
      headers.put("Content-Type", "application/json");
      get.addHeaders(headers);
      
      logger.info("查询行程请求:{}  {}", tripId, url);
      HttpResponse response = get.execute();
      logger.info("查询行程结果:{}", response.body());
      JSONObject jsonObject = JSON.parseObject(response.body().replaceAll("@type", "type"));
@@ -965,11 +981,147 @@
   
   
   /**
    * 批量获取行程
    * @param vehicleId
    * @param pageSize
    * @param pageToken
    * @return
    */
   public String getTrips(String vehicleId, Integer pageSize, String pageToken) {
      String url = "https://fleetengine.googleapis.com/v1/providers/" + provider + "/trips:search";
      HttpRequest post = HttpUtil.createPost(url);
      Map<String, String> headers = new HashMap<>();
      headers.put("Authorization", "Bearer " + getToken());
      headers.put("Content-Type", "application/json");
      post.addHeaders(headers);
      JSONObject body = new JSONObject();
      if(StringUtils.hasLength(vehicleId)){
         body.put("vehicleId", vehicleId);
      }
      body.put("activeTripsOnly", false);
      if(null != pageSize){
         body.put("pageSize", pageSize);
      }
      if(null != pageToken){
         body.put("pageToken", pageToken);
      }
      logger.info("查询行程请求:{}", body);
      post.body(body.toJSONString());
      HttpResponse response = post.execute();
      logger.info("查询行程结果:{}", response.body());
      JSONObject jsonObject = JSON.parseObject(response.body().replaceAll("@type", "type"));
      JSONObject error = jsonObject.getJSONObject("error");
      if(null != error){
         Integer code = error.getInteger("code");
         if(code == 404){
            return null;
         }
         if(code == 401){
            String status = error.getString("status");
            if(StringUtils.hasLength(status) && status.equals("UNAUTHENTICATED")){
               redisUtil.remove("google_token");
               return getTrips(vehicleId, pageSize, pageToken);
            }
            String reason = error.getJSONArray("details").getJSONObject(0).getString("reason");
            if(reason.equals("ACCESS_TOKEN_EXPIRED")){
               redisUtil.remove("google_token");
               return getTrips(vehicleId, pageSize, pageToken);
            }
         }
         logger.error("获取行程异常:body={}", response.body());
         return null;
      }
      /**
       * 返回结果
       * {
       *    "name": "providers/i-go-odrd-testing/trips/I-GO-RIDE1",
       *    "vehicleId": "I-GO-CAR1",
       *    "tripStatus": "ENROUTE_TO_PICKUP",
       *    "tripType": "SHARED",
       *    "pickupPoint": {
       *       "point": {
       *          "latitude": 30.604131,
       *          "longitude": 104.151957
       *                }*    },
       *    "pickupTime": "2024-05-27T02:10:39.763347Z",
       *    "dropoffPoint": {
       *       "point": {
       *          "latitude": 30.636319,
       *          "longitude": 104.129219
       *        }
       *    },
       *    "dropoffTime": "2024-05-27T02:23:37.762549Z",
       *    "numberOfPassengers": 1,
       *    "remainingDistanceMeters": 0,
       *    "etaToFirstWaypoint": "2024-05-27T02:10:39.763347Z",
       *    "remainingWaypoints": [
       *        {
       *          "location": {
       *             "point": {
       *                "latitude": 30.604131,
       *                "longitude": 104.151957
       *                }
       *            },
       *          "tripId": "I-GO-RIDE1",
       *          "waypointType": "PICKUP_WAYPOINT_TYPE",
       *          "distanceMeters": 0,
       *          "eta": "2024-05-27T02:10:39.763347Z",
       *          "duration": "0s"
       *        },
       *        {
       *          "location": {
       *             "point": {
       *                "latitude": 30.636319,
       *                "longitude": 104.129219
       *                }
       *            },
       *          "tripId": "I-GO-RIDE1",
       *          "waypointType": "DROP_OFF_WAYPOINT_TYPE",
       *          "encodedPathToWaypoint": "AhqdAq8NM2ZcYrZmDgDo4Z0B7887ka5C0v0Y8aUejs8f7gL98gGstAWPpQLU5gvsfcf3JPiXJ8vEDosr0coVsuEEwtYElQ2h6QGXHron0ALV4gTRlQHdiqEC5rWzAq6zBVPRrAX0rQS9mAGazgTx5ASmZ7EknJ4B2ALyGPAC8QO9DKY58RGtGoYGtASJEYAGxkzyFulZ0BbAEpOQAuQR2FfPlgKolAveP7u0CdC_JIy7Aojb6QHL2_EElKUCpgGgsiTbqQHHlgKPqAjHR8SIgQHnhinsjwqhFfZGk-cKlLUIy8cC498CxF28pwLcrginpiGQm5sB36aFAcuTJPCWCdiUCeh1w94JR7PiAsCKC-cTo-MLrLAm3JQJp7ML07sh4KEC0xLMhZAB65U6oO4m_7gh6IkLz-oh2-MCwLAC5OwC-wGbsQuouwiD9gKQsQLPQ_BN0-ICxwWo2QS3zwG_DewHyiTaBbcdzwimVL0jnYMC-5IC8VH3BcBDr2mVFLMKqQX0kQG54QH-Pqm3AdIHirsB8YEBooEBvSDF7QWK4wWhkUbymkPLCNEG_gi1nwTqnATlvgSupwEo5pwExgONJhj9CKEspblC2sVHwaYX8qYXheQF3rsBkrIBgcYRqoMBlpQBx4IB6owBhiq3jgGYpwGfuQHwuQWfKfUBmw70I5-5BeiREFPAC-cI8AgACFvHAgGIAq-HBcyYBefJFMjkFK-fFMyyBbOhAYCREIe_EbeFAcSSAY-wAegI_LwQ6I4BjW3r-hL8gRb_5gXkuAH7AcwMq8IE1C2ckgGHJ_wv--oEkLkBjC3ng17sxooCw5gBwAvz5hCM9BHzsxHomAHcqwW1jQX6gQWpvwGOuwGl-wWSgBPVxATZAa31BP7KEqnFE8LBBL0aiqsOnHBf-pIF6Q6ABNIHxTzezhLl3gSMDcXUBQzCiQG5pAHKiQTdsgGStAGQigGhkgXAuwWXhBD4lhSXlxScMtjEBfubAb-fBOAOgOsEiLETAA==",
       *          "distanceMeters": 8260,
       *          "eta": "2024-05-27T02:23:37.762549Z",
       *          "duration": "777.999202s",
       *          "trafficToWaypoint": {
       *             "speedReadingInterval": [
       *                    {
       *                   "endPolylinePointIndex": 284,
       *                   "speed": "NORMAL"
       *                    }
       *             ],
       *             "encodedPathToWaypoint": "AhqdAq8NM2ZcYrZmDgDo4Z0B7887ka5C0v0Y8aUejs8f7gL98gGstAWPpQLU5gvsfcf3JPiXJ8vEDosr0coVsuEEwtYElQ2h6QGXHron0ALV4gTRlQHdiqEC5rWzAq6zBVPRrAX0rQS9mAGazgTx5ASmZ7EknJ4B2ALyGPAC8QO9DKY58RGtGoYGtASJEYAGxkzyFulZ0BbAEpOQAuQR2FfPlgKolAveP7u0CdC_JIy7Aojb6QHL2_EElKUCpgGgsiTbqQHHlgKPqAjHR8SIgQHnhinsjwqhFfZGk-cKlLUIy8cC498CxF28pwLcrginpiGQm5sB36aFAcuTJPCWCdiUCeh1w94JR7PiAsCKC-cTo-MLrLAm3JQJp7ML07sh4KEC0xLMhZAB65U6oO4m_7gh6IkLz-oh2-MCwLAC5OwC-wGbsQuouwiD9gKQsQLPQ_BN0-ICxwWo2QS3zwG_DewHyiTaBbcdzwimVL0jnYMC-5IC8VH3BcBDr2mVFLMKqQX0kQG54QH-Pqm3AdIHirsB8YEBooEBvSDF7QWK4wWhkUbymkPLCNEG_gi1nwTqnATlvgSupwEo5pwExgONJhj9CKEspblC2sVHwaYX8qYXheQF3rsBkrIBgcYRqoMBlpQBx4IB6owBhiq3jgGYpwGfuQHwuQWfKfUBmw70I5-5BeiREFPAC-cI8AgACFvHAgGIAq-HBcyYBefJFMjkFK-fFMyyBbOhAYCREIe_EbeFAcSSAY-wAegI_LwQ6I4BjW3r-hL8gRb_5gXkuAH7AcwMq8IE1C2ckgGHJ_wv--oEkLkBjC3ng17sxooCw5gBwAvz5hCM9BHzsxHomAHcqwW1jQX6gQWpvwGOuwGl-wWSgBPVxATZAa31BP7KEqnFE8LBBL0aiqsOnHBf-pIF6Q6ABNIHxTzezhLl3gSMDcXUBQzCiQG5pAHKiQTdsgGStAGQigGhkgXAuwWXhBD4lhSXlxScMtjEBfubAb-fBOAOgOsEiLETAA=="
       *            }
       *        }
       *    ],
       *    "currentRouteSegmentVersion": "2024-05-27T02:10:39.773373Z",
       *    "remainingWaypointsVersion": "2024-05-27T02:05:37.941167Z",
       *    "currentRouteSegmentEndPoint": {
       *       "location": {
       *          "point": {
       *             "latitude": 30.604131,
       *             "longitude": 104.151957
       *            }
       *        },
       *       "tripId": "I-GO-RIDE1",
       *       "waypointType": "PICKUP_WAYPOINT_TYPE"
       *    },
       *    "remainingWaypointsRouteVersion": "2024-05-27T02:10:39.773373Z",
       *    "currentRouteSegmentTrafficVersion": "2024-05-27T02:10:39.773373Z",
       *    "view": "SDK"
       * }
       */
      return response.body();
   }
   /**
    * 上报google可结算订单
    * @param tripId 行程id
    * @return
    */
   public boolean reportBillableEvent(String tripId) {
      log.info("行程上报:{}", tripId);
      String billableEventId = UUIDUtil.getRandomCode();
      String url = "https://mobilitybilling.googleapis.com/v1:reportBillableEvent?regionCode=GH&key=" + key + "&billableEventId=" + billableEventId;
      HttpRequest post = HttpUtil.createPost(url);
@@ -989,5 +1141,4 @@
//      }
      return true;
   }
}