From 8f329481c1122ae2d2fe37f76898654a487c9b88 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期一, 25 十一月 2024 15:37:41 +0800
Subject: [PATCH] 修改bug

---
 DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |  159 +++++++++++++++++++++++++++--------------------------
 1 files changed, 81 insertions(+), 78 deletions(-)

diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 3f162df..c26438b 100644
--- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -323,101 +323,104 @@
 
                 // 结束服务时查询轨迹,计算距离
                 Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
-                String tid = gdFalconUtil.selectTerminal(driver.getPhone());
-                String result = gdFalconUtil.selectTrack(tid, orderPrivateCar.getTrackId(),1);
-
-                JSONObject jsonObject = JSONObject.parseObject(result);
-                JSONArray tracks = jsonObject.getJSONArray("tracks");
-                Integer counts = jsonObject.getInteger("counts");
-                JSONArray points = new JSONArray();
-                // 如果一单轨迹点数大于999,需进行分页查询,将所有的点查询出
-                if(counts > 999){
-                    int i = counts%999;
-                    for (int j = 1; j < i + 1; j++) {
-                        String res = gdFalconUtil.selectTrack(tid, orderPrivateCar.getTrackId(),1);
-                        JSONObject jsonObject1 = JSONObject.parseObject(res);
-                        JSONArray tracks1 = jsonObject1.getJSONArray("tracks");
-                        Object ob = tracks1.get(0);
+                double sum = 0;
+                try {
+                    String tid = gdFalconUtil.selectTerminal(driver.getPhone());
+                    String result = gdFalconUtil.selectTrack(tid, orderPrivateCar.getTrackId(),1);
+    
+                    JSONObject jsonObject = JSONObject.parseObject(result);
+                    JSONArray tracks = jsonObject.getJSONArray("tracks");
+                    Integer counts = jsonObject.getInteger("counts");
+                    JSONArray points = new JSONArray();
+                    // 如果一单轨迹点数大于999,需进行分页查询,将所有的点查询出
+                    if(counts > 999){
+                        int i = counts%999;
+                        for (int j = 1; j < i + 1; j++) {
+                            String res = gdFalconUtil.selectTrack(tid, orderPrivateCar.getTrackId(),1);
+                            JSONObject jsonObject1 = JSONObject.parseObject(res);
+                            JSONArray tracks1 = jsonObject1.getJSONArray("tracks");
+                            Object ob = tracks1.get(0);
+                            String obs = JSONObject.toJSONString(ob);
+                            JSONObject object = JSONObject.parseObject(obs);
+                            JSONArray point = object.getJSONArray("points");
+                            points.addAll(point);
+                        }
+                    }
+                    // 轨迹点数小于999,一页查询出即可
+                    if(counts > 0 && counts < 999){
+                        Object ob = tracks.get(0);
                         String obs = JSONObject.toJSONString(ob);
                         JSONObject object = JSONObject.parseObject(obs);
                         JSONArray point = object.getJSONArray("points");
                         points.addAll(point);
                     }
-                }
-                // 轨迹点数小于999,一页查询出即可
-                if(counts > 0 && counts < 999){
-                    Object ob = tracks.get(0);
-                    String obs = JSONObject.toJSONString(ob);
-                    JSONObject object = JSONObject.parseObject(obs);
-                    JSONArray point = object.getJSONArray("points");
-                    points.addAll(point);
-                }
-
-                System.out.println("轨迹坐标点=====:"+points);
-                String toLonLat = "";
-                double sum = 0;
-                List<OrderPosition> orderPositions = new ArrayList<>();
-                for (Object o : points) {
-                    String s = JSONObject.toJSONString(o);
-                    JSONObject obj = JSONObject.parseObject(s);
-                    String fromLonLat = obj.getString("location");
-                    String[] split = fromLonLat.split(",");
-                    Long locatetime = obj.getLong("locatetime");
-                    Date date = new Date(locatetime);
-                    if(date.after(orderPrivateCar.getStartServiceTime()) && date.before(orderPrivateCar.getEndServiceTime())){
-                        // 封装定位文件里的单个定位对象
-                        OrderPosition orderPosition = new OrderPosition();
-                        orderPosition.setOrderId(orderId);
-                        orderPosition.setOrderType(1);
-                        orderPosition.setDriverId(orderPrivateCar.getDriverId());
-                        orderPosition.setLat(split[1]);
-                        orderPosition.setLon(split[0]);
-                        orderPosition.setAltitude("0");
-                        orderPosition.setDirectionAngle("0");
-                        //先计算里程,在存储最新位置
-                        orderPosition.setInsertTime(new Date());
-                        orderPositions.add(orderPosition);
+    
+                    String toLonLat = "";
+                    List<OrderPosition> orderPositions = new ArrayList<>();
+                    for (Object o : points) {
+                        String s = JSONObject.toJSONString(o);
+                        JSONObject obj = JSONObject.parseObject(s);
+                        String fromLonLat = obj.getString("location");
+                        String[] split = fromLonLat.split(",");
+                        Long locatetime = obj.getLong("locatetime");
+                        Date date = new Date(locatetime);
+                        if(date.after(orderPrivateCar.getStartServiceTime()) && date.before(orderPrivateCar.getEndServiceTime())){
+                            // 封装定位文件里的单个定位对象
+                            OrderPosition orderPosition = new OrderPosition();
+                            orderPosition.setOrderId(orderId);
+                            orderPosition.setOrderType(1);
+                            orderPosition.setDriverId(orderPrivateCar.getDriverId());
+                            orderPosition.setLat(split[1]);
+                            orderPosition.setLon(split[0]);
+                            orderPosition.setAltitude("0");
+                            orderPosition.setDirectionAngle("0");
+                            //先计算里程,在存储最新位置
+                            orderPosition.setInsertTime(new Date());
+                            orderPositions.add(orderPosition);
+                            if(StringUtils.hasLength(fromLonLat) && StringUtils.hasLength(toLonLat)){
+                                String[] from = fromLonLat.split(",");
+                                String[] to = toLonLat.split(",");
+                                GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(from[1]), Double.valueOf(from[0]));
+                                GlobalCoordinates target = new GlobalCoordinates(Double.valueOf(to[1]), Double.valueOf(to[0]));
+                                double WGS84 = getDistanceMeter(source, target, Ellipsoid.WGS84);
+                                sum += WGS84;
+                            }
+                            toLonLat = fromLonLat;
+                        }
+                    }
+    
+                    //存储轨迹
+                    // 将数据存储到文件中
+                    File file = new File(filePath + orderId + "_" + 1 + ".txt");
+                    if(!file.exists()){
+                        file.getParentFile().mkdirs();
+                        file.createNewFile();
+                    }
+                    //写入相应的文件
+                    PrintWriter out = new PrintWriter(new FileWriter(file));
+                    out.write(JSON.toJSONString(orderPositions));
+                    out.flush();
+                    out.close();
+                }catch (Exception e){
+                    e.printStackTrace();
+                    System.err.println("查询高德轨迹出错,使用本地轨迹计算");
+                    List<OrderPosition> list = orderPositionService.queryPosition(orderId, 1);
+                    String fromLonLat = "";
+                    for (OrderPosition orderPosition : list) {
+                        String toLonLat = orderPosition.getLon() + "," + orderPosition.getLat();
                         if(StringUtils.hasLength(fromLonLat) && StringUtils.hasLength(toLonLat)){
                             String[] from = fromLonLat.split(",");
                             String[] to = toLonLat.split(",");
                             GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(from[1]), Double.valueOf(from[0]));
                             GlobalCoordinates target = new GlobalCoordinates(Double.valueOf(to[1]), Double.valueOf(to[0]));
                             double WGS84 = getDistanceMeter(source, target, Ellipsoid.WGS84);
-                            System.err.println("WGS84坐标系计算结果:"+WGS84 + "米");
                             sum += WGS84;
                         }
-                        toLonLat = fromLonLat;
+                        fromLonLat = toLonLat;
                     }
                 }
-                
-                //存储轨迹
-                // 将数据存储到文件中
-                File file = new File(filePath + orderId + "_" + 1 + ".txt");
-                if(!file.exists()){
-                    file.getParentFile().mkdirs();
-                    file.createNewFile();
-                }
-                //写入相应的文件
-                PrintWriter out = new PrintWriter(new FileWriter(file));
-                out.write(JSON.toJSONString(orderPositions));
-                out.flush();
-                out.close();
-    
                 orderPrivateCar.setMileage(sum);
                 orderPrivateCar.setIsAbnormal(0);
-    
-                //获取预估里程,使用预估里程作为行驶里程计算金额
-//                String origins = orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat();
-//                String destination = orderPrivateCar.getGetoffLon() + "," + orderPrivateCar.getGetoffLat();
-//                Map<String, String> distance = gdMapElectricFenceUtil.getDistance(origins, destination, 1);
-//                Double distance1 = Double.valueOf(distance.get("distance"));
-//                if(distance1 - sum > 1000){
-//                    orderPrivateCar.setMileage(distance1);
-//                    orderPrivateCar.setIsAbnormal(1);
-//                }else{
-//                    orderPrivateCar.setMileage(sum);
-//                    orderPrivateCar.setIsAbnormal(0);
-//                }
                 break;
         }
         this.updateById(orderPrivateCar);

--
Gitblit v1.7.1