From 40b7f4a7f493cfa5d8b2531d99d7ef8f5a9d5f0a Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期三, 27 十一月 2024 14:41:05 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 141 ++++++++++++++++++++++++++-------------------- 1 files changed, 79 insertions(+), 62 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 e63703e..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,75 +323,73 @@ // 结束服务时查询轨迹,计算距离 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); - 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; + + 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; } - toLonLat = fromLonLat; } - } - System.err.println("======服务里程======"+sum); - if(counts < 5){ - orderPrivateCar.setMileage(sum); + + //存储轨迹 // 将数据存储到文件中 File file = new File(filePath + orderId + "_" + 1 + ".txt"); if(!file.exists()){ @@ -403,7 +401,26 @@ 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); + sum += WGS84; + } + fromLonLat = toLonLat; + } } + orderPrivateCar.setMileage(sum); + orderPrivateCar.setIsAbnormal(0); break; } this.updateById(orderPrivateCar); -- Gitblit v1.7.1