From 1a334c1b3703586cd5f463960449d0283125831f Mon Sep 17 00:00:00 2001 From: zhibing.pu <393733352@qq.com> Date: 星期五, 12 四月 2024 15:00:36 +0800 Subject: [PATCH] 提交代码 --- DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 154 ++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 128 insertions(+), 26 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 b7ddc0c..7ddb337 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 @@ -1,6 +1,7 @@ package com.stylefeng.guns.modular.specialTrain.server.impl; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; @@ -15,9 +16,14 @@ import com.stylefeng.guns.modular.system.util.*; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; +import org.gavaghan.geodesy.Ellipsoid; +import org.gavaghan.geodesy.GeodeticCalculator; +import org.gavaghan.geodesy.GeodeticCurve; +import org.gavaghan.geodesy.GlobalCoordinates; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.io.File; @@ -179,9 +185,10 @@ orderPrivateCar.setSnatchOrderTime(new Date()); //调用高德创建轨迹 - String s = gdFalconUtil.selectTerminal(driver.getPhone()); - String track = gdFalconUtil.createTrack(s); - orderPrivateCar.setTrackId(track); +// String s = gdFalconUtil.selectTerminal(driver.getPhone()); +// String track = gdFalconUtil.createTrack(s); +// JSONObject jsonObject = JSONObject.parseObject(track); +// orderPrivateCar.setTrackId(String.valueOf(jsonObject.getInteger("trid"))); //调用移动的小号接口 /*Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); @@ -306,29 +313,29 @@ } } }).start(); - OrderPosition orderPosition = new OrderPosition(); - orderPosition.setOrderId(orderId); - orderPosition.setOrderType(1); - orderPosition.setDriverId(orderPrivateCar.getDriverId()); - orderPosition.setLat(lat.toString()); - orderPosition.setLon(lon.toString()); - orderPosition.setAltitude("0"); - orderPosition.setDirectionAngle("0"); - //先计算里程,在存储最新位置 - orderPosition.setInsertTime(new Date()); - //将数据存储到文件中 - List<OrderPosition> orderPositions = orderPositionService.queryPosition(orderPosition.getOrderId(), orderPosition.getOrderType()); - File file = new File(filePath + orderPosition.getOrderId() + "_" + orderPosition.getOrderType() + ".txt"); - if(!file.exists()){ - file.getParentFile().mkdirs(); - file.createNewFile(); - } - //写入相应的文件 - PrintWriter out = new PrintWriter(new FileWriter(file)); - orderPositions.add(orderPosition); - out.write(JSON.toJSONString(orderPositions)); - out.flush(); - out.close(); +// OrderPosition orderPosition = new OrderPosition(); +// orderPosition.setOrderId(orderId); +// orderPosition.setOrderType(1); +// orderPosition.setDriverId(orderPrivateCar.getDriverId()); +// orderPosition.setLat(lat.toString()); +// orderPosition.setLon(lon.toString()); +// orderPosition.setAltitude("0"); +// orderPosition.setDirectionAngle("0"); +// //先计算里程,在存储最新位置 +// orderPosition.setInsertTime(new Date()); +// //将数据存储到文件中 +// List<OrderPosition> orderPositions = orderPositionService.queryPosition(orderPosition.getOrderId(), orderPosition.getOrderType()); +// File file = new File(filePath + orderPosition.getOrderId() + "_" + orderPosition.getOrderType() + ".txt"); +// if(!file.exists()){ +// file.getParentFile().mkdirs(); +// file.createNewFile(); +// } +// //写入相应的文件 +// PrintWriter out = new PrintWriter(new FileWriter(file)); +// orderPositions.add(orderPosition); +// out.write(JSON.toJSONString(orderPositions)); +// out.flush(); +// out.close(); break; case 6://结束服务(专车可以返回继续服务)不修改状态 orderPrivateCar.setGetoffLon(lon); @@ -336,6 +343,89 @@ orderPrivateCar.setGetoffAddress(address); orderPrivateCar.setGetoffTime(new Date()); orderPrivateCar.setEndServiceTime(new Date()); + + // 结束服务时查询轨迹,计算距离 + 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); + 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; + } + toLonLat = fromLonLat; + } + } + System.err.println("======服务里程======"+sum); + orderPrivateCar.setMileage(sum); + // 将数据存储到文件中 + 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(); + break; } this.updateById(orderPrivateCar); @@ -352,6 +442,11 @@ return ResultUtil.success(); } + private double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo, Ellipsoid ellipsoid){ + //创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离 + GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo); + return geoCurve.getEllipsoidalDistance(); + } /** @@ -758,4 +853,11 @@ public List<OrderPrivateCar> getSmsOrderList() { return this.baseMapper.getSmsOrderList(); } + + @Override + public void getTrackId(Integer orderId, Integer trackId) { + OrderPrivateCar orderPrivateCar = this.selectById(orderId); + orderPrivateCar.setTrackId(String.valueOf(trackId)); + this.updateById(orderPrivateCar); + } } -- Gitblit v1.7.1