From db7fa6a91b9534ac90e219b6f554c54c43c83a5a Mon Sep 17 00:00:00 2001 From: liujie <liujie> Date: 星期三, 16 八月 2023 09:28:15 +0800 Subject: [PATCH] update --- driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java | 141 +++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 125 insertions(+), 16 deletions(-) diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java index 2602b9f..00b1cd2 100644 --- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java +++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java @@ -2,24 +2,22 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.mapper.EntityWrapper; -import com.supersavedriving.driver.core.util.ToolUtil; -import com.supersavedriving.driver.modular.system.model.DriverWork; -import com.supersavedriving.driver.modular.system.service.IDriverWorkService; import com.supersavedriving.driver.modular.system.service.IOrderPositionService; -import com.supersavedriving.driver.modular.system.util.ResultUtil; +import com.supersavedriving.driver.core.util.ToolUtil; +import com.supersavedriving.driver.modular.system.model.Order; +import com.supersavedriving.driver.modular.system.service.IOrderService; +import com.supersavedriving.driver.modular.system.util.GeodesyUtil; +import com.supersavedriving.driver.modular.system.util.RedisUtil; import com.supersavedriving.driver.modular.system.warpper.DriverPositionWarpper; import com.supersavedriving.driver.modular.system.warpper.OrderPositionWarpper; +import com.supersavedriving.driver.modular.system.warpper.ProcessOperationsWarpper; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.*; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; /** * 订单轨迹逻辑类 @@ -29,6 +27,14 @@ @Value("${filePath}") private String filePath; + + @Autowired + private RedisUtil redisUtil; + + @Autowired + private IOrderService orderService; + + private Map<String, Integer> map = new HashMap<>(); @@ -42,24 +48,121 @@ @Override public void saveOrderPosition(DriverPositionWarpper driverPositionWarpper) throws Exception { Integer orderId = driverPositionWarpper.getOrderId(); + Integer driverId = driverPositionWarpper.getDriverId(); + Order order = orderService.selectById(orderId); + if(null == order.getDriverId() || order.getDriverId().compareTo(driverId) != 0){ + return; + } + if(order.getState() != 105 && order.getState() != 401){ + return; + } Integer orderType = driverPositionWarpper.getOrderType(); - File file = new File(filePath + orderId + "_" + orderType + ".json"); + File file = new File(filePath + orderId + ".json"); if(!file.exists()){ file.getParentFile().mkdirs(); file.createNewFile(); } List<OrderPositionWarpper> orderPositionWarppers = queryPosition(orderId, orderType); - OrderPositionWarpper orderPositionWarpper = new OrderPositionWarpper(); - BeanUtils.copyProperties(driverPositionWarpper, orderPositionWarpper); - orderPositionWarpper.setInsertTime(new Date()); - orderPositionWarppers.add(orderPositionWarpper); + if(orderPositionWarppers.size() > 0){ + OrderPositionWarpper orderPositionWarpper = orderPositionWarppers.get(orderPositionWarppers.size() - 1); + saveOrderMileage(driverPositionWarpper, orderPositionWarpper); + } + //大于100米才存储有效定位数据 + if(orderPositionWarppers.size() > 0){ + OrderPositionWarpper orderPositionWarpper1 = orderPositionWarppers.get(orderPositionWarppers.size() - 1); + String fromLonLat = driverPositionWarpper.getLon() + "," + driverPositionWarpper.getLat(); + String toLonLat = orderPositionWarpper1.getLon() + "," + orderPositionWarpper1.getLat(); + Map<String, Double> distance = GeodesyUtil.getDistance(fromLonLat, toLonLat); + Double wgs84 = distance.get("WGS84"); + +// long timeMillis = System.currentTimeMillis(); +// long time = orderPositionWarpper1.getInsertTime().getTime(); +// long t = timeMillis - time; +// if(wgs84 >= 200 && t <= 8){//排除位置漂移 +// return; +// } + + if(wgs84 >= 50){//5秒165米 + OrderPositionWarpper orderPositionWarpper = new OrderPositionWarpper(); + BeanUtils.copyProperties(driverPositionWarpper, orderPositionWarpper); + orderPositionWarpper.setInsertTime(new Date()); + orderPositionWarppers.add(orderPositionWarpper); + } + }else{ + OrderPositionWarpper orderPositionWarpper = new OrderPositionWarpper(); + BeanUtils.copyProperties(driverPositionWarpper, orderPositionWarpper); + orderPositionWarpper.setInsertTime(new Date()); + orderPositionWarppers.add(orderPositionWarpper); + } //写入相应的文件 PrintWriter out = new PrintWriter(new FileWriter(file)); - out.write(JSON.toJSONString(driverPositionWarpper)); + out.write(JSON.toJSONString(orderPositionWarppers)); out.flush(); out.close(); } + + + /** + * 保存行驶里程 + * @param driverPositionWarpper + * @param orderPositionWarpper + */ + public void saveOrderMileage(DriverPositionWarpper driverPositionWarpper, OrderPositionWarpper orderPositionWarpper){ + String fromLonLat = driverPositionWarpper.getLon() + "," + driverPositionWarpper.getLat(); + String toLonLat = orderPositionWarpper.getLon() + "," + orderPositionWarpper.getLat(); + Map<String, Double> distance = GeodesyUtil.getDistance(fromLonLat, toLonLat); + Order order = orderService.selectById(driverPositionWarpper.getOrderId()); + Double wgs84 = distance.get("WGS84"); + Integer num = map.get(order.getId().toString()); + +// long timeMillis = System.currentTimeMillis(); +// long time = orderPositionWarpper.getInsertTime().getTime(); +// long t = timeMillis - time; +// if(wgs84 >= 200 && t <= 8){//排除位置漂移 +// return; +// } + + if(50 < wgs84){//5秒165米 + order.setActualMileage(order.getActualMileage() + wgs84.intValue()); + orderService.updateById(order); + map.put(order.getId().toString(), 0); + + if(order.getState() == 401){//定位变动,自动开始服务 + ProcessOperationsWarpper processOperationsWarpper = new ProcessOperationsWarpper(); + processOperationsWarpper.setOrderId(order.getId()); + processOperationsWarpper.setState(105); + try { + orderService.driverProcessOperations(order.getDriverId(), processOperationsWarpper); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + if(50 >= wgs84 && 6 <= (null == num ? 0 : num)){//30秒(5秒上传一次数据) + Integer integer = map.get(order.getId().toString()); + map.put(order.getId().toString(), null == integer ? 0 : integer + 1); + //进入等待状态 + if(order.getState() == 401){ + return; + } + ProcessOperationsWarpper processOperationsWarpper = new ProcessOperationsWarpper(); + processOperationsWarpper.setOrderId(order.getId()); + processOperationsWarpper.setState(401); + try { + orderService.driverProcessOperations(order.getDriverId(), processOperationsWarpper); + } catch (Exception e) { + e.printStackTrace(); + } + } + if(50 >= wgs84 && 6 > (null == num ? 0 : num)){ + Integer integer = map.get(order.getId().toString()); + map.put(order.getId().toString(), null == integer ? 0 : integer + 1); + } + } + + /** @@ -72,8 +175,9 @@ @Override public List<OrderPositionWarpper> queryPosition(Integer orderId, Integer orderType) throws Exception { //将数据存储到文件中 - File file = new File(filePath + orderId + "_" + orderType + ".txt"); + File file = new File(filePath + orderId + ".json"); if(!file.exists()){ + System.err.println("不存在"); return new ArrayList<>(); } //读取文件(字符流) @@ -92,4 +196,9 @@ } + @Override + public void initMap(Long orderId) throws Exception { + map.put(orderId.toString(), 0); + } + } -- Gitblit v1.7.1