From 0cc73a9ffcdd356e0b797e458b400acfb660da94 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期日, 15 六月 2025 02:26:06 +0800
Subject: [PATCH] 更新用户端功能

---
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |  487 ++++++++++++++++++++++++++---------------------------
 1 files changed, 240 insertions(+), 247 deletions(-)

diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index e4cff59..193db93 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -3,7 +3,6 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.aliyun.oss.ServiceException;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.stylefeng.guns.core.util.ToolUtil;
@@ -12,7 +11,6 @@
 import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity;
 import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
 import com.stylefeng.guns.modular.crossCity.server.impl.OrderCrossCityServiceImpl;
-import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics;
 import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService;
 import com.stylefeng.guns.modular.specialTrain.dao.OrderPrivateCarMapper;
 import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
@@ -28,9 +26,9 @@
 import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
 import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService;
 import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService;
-import javafx.concurrent.Task;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
@@ -135,9 +133,9 @@
 
     @Autowired
     private IUserActivityRedenvelopeService userActivityRedenvelopeService;
-
+    
     @Autowired
-    private RedisUtil redisUtil;
+    private RedisTemplate redisTemplate;
 
     @Autowired
     private GDFalconUtil gdFalconUtil;
@@ -431,7 +429,7 @@
                                 JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
                                 //判断时间
                                 if(travelTime.getTime()>=order.getTravelTime().getTime()-jsonObject.getInteger("num5")*60000L && travelTime.getTime()<=order.getTravelTime().getTime()+jsonObject.getInteger("num6")*60000L){
-                                    String value = redisUtil.getValue("DRIVER" + String.valueOf(order.getDriverId()));
+                                    String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(order.getDriverId()));
     //                            Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString());
     //                            Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
 
@@ -683,7 +681,7 @@
                                 JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
                                 //判断时间
                                 if(travelTime.getTime()>=order.getTravelTime().getTime()-jsonObject.getInteger("num5")*60000L && travelTime.getTime()<=order.getTravelTime().getTime()+jsonObject.getInteger("num6")*60000L){
-                                    String value = redisUtil.getValue("DRIVER" + String.valueOf(order.getDriverId()));
+                                    String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(order.getDriverId()));
     //                            Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString());
     //                            Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
 
@@ -842,7 +840,7 @@
                             JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
                             //判断时间
                             if(orderPrivateCar.getTravelTime().getTime()>=order.getTravelTime().getTime()-jsonObject.getInteger("num5")*60000L && orderPrivateCar.getTravelTime().getTime()<=order.getTravelTime().getTime()+jsonObject.getInteger("num6")*60000L){
-                                String value = redisUtil.getValue("DRIVER" + String.valueOf(order.getDriverId()));
+                                String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(order.getDriverId()));
 //                                Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString());
 //                                Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
                                 // TODO: 2023/11/4 已改成计算直线距离
@@ -1072,7 +1070,7 @@
         CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
         if(null != query){
             if(payType == 1){//微信支付
-                String value = redisUtil.getValue("appletOpenId");
+                String value = (String) redisTemplate.opsForValue().get("appletOpenId");
                 String appletsOpenId = null;
                 if(ToolUtil.isNotEmpty(value)){
                     JSONObject jsonObject = JSON.parseObject(value);
@@ -1138,151 +1136,107 @@
         return resultUtil;
     }
 
-
-    /**
-     * 推送抢单数据
-     * @param orderPrivateCar
-     * @throws Exception
-     */
-    public void pushOrder(OrderPrivateCar orderPrivateCar) throws Exception{
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    Integer id = orderPrivateCar.getId();
-                    Integer orderType = orderPrivateCar.getRideType()==1?1:orderPrivateCar.getRideType()==2?9:8;
-                    orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单
-                    String vehicle = redisUtil.getValue("VEHICLE");
-                    List<Integer> integers = new ArrayList<>();
-                    if(ToolUtil.isNotEmpty(vehicle)){
-                        integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
-                    }
-                    Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司
-                    List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数
-                    for(int i = 1; i <= querys.size(); i++){
-                        OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
-                        if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
-                            break;
-                        }
-                        PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0);
-                        System.out.println("pushOrder:"+pushOrder);
-                        int i2 = pushOrder.getPushTime() / 10;
-                        if(i2==0){
-                            i2=1;
-                        }
-                        for (int i1 = 0; i1 < i2 ; i1++) {
-                            if (orderPrivateCar.getState() > 1) {
-                                break;
-                            }
-                            //获取空闲司机
-                            List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
-                            if (list.size() > 0) {
-                                double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
-                                int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
-                                lastIndex = lastIndex == 0 ? list.size() : lastIndex;
-                                list = list.subList(0, lastIndex);//获取空闲司机中占比数据
-                                for (Driver driver : list) {//开始进行推送
-                                    boolean bo = false;
-                                    for (Integer integer : integers) {
-                                        if (integer.compareTo(driver.getId()) == 0) {
-                                            bo = true;
-                                            break;
-                                        }
-                                    }
-                                    if (bo) {
-                                        continue;
-                                    }
-                                    pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime());
-                                }
-                            }
-                            Thread.sleep(10000);//设置等待时间
-                            Integer state = orderPrivateCar.getState();
-                            if (state > 1) {
-                                orderIds.remove(orderPrivateCar.getId());
-                                return;
-                            }
-                            if (i == querys.size() && state == 1) {
-                                pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
-                                orderIds.remove(orderPrivateCar.getId());
-                            }
-                        }
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            }
-        }).start();
+    @Override
+    public Map<String, Object> queryOrderInfo(Integer uid, Integer orderId) throws Exception {
+        Map<String, Object> map = orderPrivateCarMapper.queryOrderInfo(orderId);
+        if(null == map){
+            OrderTaxi orderTaxi = orderTaxiService.selectOne(new EntityWrapper<OrderTaxi>()
+                    .eq("userId", uid)
+                    .eq("isDelete", 1)
+                    .in("state", Arrays.asList(2, 3, 4, 5, 6, 7))
+            );
+            return orderTaxiService.queryOrderInfo(orderTaxi.getId());
+        }
+        if(null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2){//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用
+            OrderPrivateCar orderPrivateCar = this.selectById(orderId);
+            orderPrivateCar.setReassignNotice(0);
+            this.updateById(orderPrivateCar);
+        }
+        if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){
+            map.put("state", map.get("oldState"));
+        }
+        if(Integer.valueOf(String.valueOf(map.get("state"))) != 8 && Integer.valueOf(String.valueOf(map.get("state"))) != 9){
+            map.put("redPacketMoney", null);
+            map.put("couponMoney", null);
+        }
+    
+        String driverId = (String) redisTemplate.opsForValue().get("DEVICE_" + map.get("driverId"));
+        map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1);
+        map.put("orderType", 1);
+        return map;
     }
 
+    /**
+     * 获取服务中的订单数据
+     * @param uid
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception {
+        OrderPrivateCar orderPrivateCar = this.selectById(orderId);
+        if(null == orderPrivateCar){
+            return orderTaxiService.queryOrderServer(orderId, uid);
+        }
+        //计算预计距离和剩余时间
+        String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
+        if(null == value || "".equals(value)){
+            System.err.println("司机没有上传位置信息");
 
-
-    public void pushOrder(Integer id, Integer rideType, Integer serverCarModelId, Double startLon, Double startLat) throws Exception{
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    Integer orderType = rideType==1?1:rideType==2?9:8;
-                    orderIds.add(id);//添加记录,防止调用接口重复提醒无人接单
-                    String vehicle = redisUtil.getValue("VEHICLE");
-                    List<Integer> integers = new ArrayList<>();
-                    if(ToolUtil.isNotEmpty(vehicle)){
-                        integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
-                    }
-                    Company query = companyCityService.query(startLon.toString(), startLat.toString());//获取起点所属分公司
-                    List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数
-                    for(int i = 1; i <= querys.size(); i++){
-                        OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
-                        if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
-                            break;
-                        }
-                        PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0);
-                        System.out.println("pushOrder:"+pushOrder);
-                        int i2 = pushOrder.getPushTime() / 10;
-                        if(i2==0){
-                            i2=1;
-                        }
-                        for (int i1 = 0; i1 < i2 ; i1++) {
-                            if (orderPrivateCar.getState() > 1) {
-                                break;
-                            }
-                            //获取空闲司机
-                            List<Driver> list = driverService.queryIdleDriver(orderType, serverCarModelId, startLon, startLat, pushOrder.getPushDistance(), null);//所有附近空闲司机
-                            if (list.size() > 0) {
-                                double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
-                                int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
-                                lastIndex = lastIndex == 0 ? list.size() : lastIndex;
-                                list = list.subList(0, lastIndex);//获取空闲司机中占比数据
-                                for (Driver driver : list) {//开始进行推送
-                                    boolean bo = false;
-                                    for (Integer integer : integers) {
-                                        if (integer.compareTo(driver.getId()) == 0) {
-                                            bo = true;
-                                            break;
-                                        }
-                                    }
-                                    if (bo) {
-                                        continue;
-                                    }
-                                    pushUtil.pushOrderState(2, driver.getId(), id, 1, 1, pushOrder.getPushTime());
-                                }
-                            }
-                            Thread.sleep(10000);//设置等待时间
-                            Integer state = orderPrivateCarMapper.selectById(orderPrivateCar.getId()).getState();
-                            if (state > 1) {
-                                orderIds.remove(orderPrivateCar.getId());
-                                break;
-                            }
-                            if (i == querys.size()) {
-                                pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
-                                orderIds.remove(orderPrivateCar.getId());
-                            }
-                        }
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
+            //调用获取轨迹中的数据
+            List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2);
+            if(list.size() > 0){
+                Map<String, Object> map = list.get(list.size() - 1);
+                value = map.get("lon") + "," + map.get("lat");
             }
-        }).start();
+
+        }
+
+        OrderServerWarpper orderServerWarpper = new OrderServerWarpper();
+        orderServerWarpper.setOrderId(orderPrivateCar.getId());
+        orderServerWarpper.setOrderType(1);
+        orderServerWarpper.setState(orderPrivateCar.getState());
+        orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0");
+        orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0");
+        orderServerWarpper.setReassignNotice(orderPrivateCar.getReassignNotice());
+        if(orderPrivateCar.getState() == 2 || orderPrivateCar.getState() == 3){//前往预约地
+            // TODO: 2023/11/4 无法修改
+            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1);
+            String d = "0";
+            String t = "0";
+            if(null == distance){
+                System.err.println("查询距离出错了");
+            }else{
+                d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
+                t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
+            }
+            orderServerWarpper.setReservationMileage(d);
+            orderServerWarpper.setReservationTime(t);
+            orderServerWarpper.setServedMileage("0");
+            orderServerWarpper.setServedTime("0");
+            orderServerWarpper.setLaveMileage("0");
+            orderServerWarpper.setLaveTime("0");
+        }
+        if(orderPrivateCar.getState() == 5 || orderPrivateCar.getState() == 6){//服务中
+            // TODO: 2023/11/4 无法修改
+            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
+            String d = "0";
+            String t = "0";
+            if(null == distance){
+                System.err.println("查询距离出错了");
+            }else{
+                d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
+                t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
+            }
+            orderServerWarpper.setReservationMileage("0");
+            orderServerWarpper.setReservationTime("0");
+            orderServerWarpper.setServedMileage(String.valueOf((null == orderPrivateCar.getMileage() ? 0 : orderPrivateCar.getMileage()) / 1000));
+            orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderPrivateCar.getStartServiceTime().getTime()) / 60000).intValue() + "");
+            orderServerWarpper.setLaveMileage(d);
+            orderServerWarpper.setLaveTime(t);
+        }
+
+        return orderServerWarpper;
     }
 
 
@@ -2448,34 +2402,73 @@
         return orderPrivateCarMapper.queryInvoiceOrder(type, startTime, endTime, startMoney, endMoney, uid);
     }
 
-    @Override
-    public Map<String, Object> queryOrderInfo(Integer uid, Integer orderId) throws Exception {
-        Map<String, Object> map = orderPrivateCarMapper.queryOrderInfo(orderId);
-        if(null == map){
-            OrderTaxi orderTaxi = orderTaxiService.selectOne(new EntityWrapper<OrderTaxi>()
-                    .eq("userId", uid)
-                    .eq("isDelete", 1)
-                    .in("state", Arrays.asList(2, 3, 4, 5, 6, 7))
-            );
-            return orderTaxiService.queryOrderInfo(orderTaxi.getId());
-        }
-        if(null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2){//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用
-            OrderPrivateCar orderPrivateCar = this.selectById(orderId);
-            orderPrivateCar.setReassignNotice(0);
-            this.updateById(orderPrivateCar);
-        }
-        if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){
-            map.put("state", map.get("oldState"));
-        }
-        if(Integer.valueOf(String.valueOf(map.get("state"))) != 8 && Integer.valueOf(String.valueOf(map.get("state"))) != 9){
-            map.put("redPacketMoney", null);
-            map.put("couponMoney", null);
-        }
-
-        String driverId = redisUtil.getValue("DEVICE_" + map.get("driverId"));
-        map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1);
-        map.put("orderType", 1);
-        return map;
+    public void pushOrder(Integer id, Integer rideType, Integer serverCarModelId, Double startLon, Double startLat) throws Exception{
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    Integer orderType = rideType==1?1:rideType==2?9:8;
+                    orderIds.add(id);//添加记录,防止调用接口重复提醒无人接单
+                    String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE");
+                    List<Integer> integers = new ArrayList<>();
+                    if(ToolUtil.isNotEmpty(vehicle)){
+                        integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
+                    }
+                    Company query = companyCityService.query(startLon.toString(), startLat.toString());//获取起点所属分公司
+                    List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数
+                    for(int i = 1; i <= querys.size(); i++){
+                        OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
+                        if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
+                            break;
+                        }
+                        PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0);
+                        System.out.println("pushOrder:"+pushOrder);
+                        int i2 = pushOrder.getPushTime() / 10;
+                        if(i2==0){
+                            i2=1;
+                        }
+                        for (int i1 = 0; i1 < i2 ; i1++) {
+                            if (orderPrivateCar.getState() > 1) {
+                                break;
+                            }
+                            //获取空闲司机
+                            List<Driver> list = driverService.queryIdleDriver(orderType, serverCarModelId, startLon, startLat, pushOrder.getPushDistance(), null);//所有附近空闲司机
+                            if (list.size() > 0) {
+                                double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
+                                int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
+                                lastIndex = lastIndex == 0 ? list.size() : lastIndex;
+                                list = list.subList(0, lastIndex);//获取空闲司机中占比数据
+                                for (Driver driver : list) {//开始进行推送
+                                    boolean bo = false;
+                                    for (Integer integer : integers) {
+                                        if (integer.compareTo(driver.getId()) == 0) {
+                                            bo = true;
+                                            break;
+                                        }
+                                    }
+                                    if (bo) {
+                                        continue;
+                                    }
+                                    pushUtil.pushOrderState(2, driver.getId(), id, 1, 1, pushOrder.getPushTime());
+                                }
+                            }
+                            Thread.sleep(10000);//设置等待时间
+                            Integer state = orderPrivateCarMapper.selectById(orderPrivateCar.getId()).getState();
+                            if (state > 1) {
+                                orderIds.remove(orderPrivateCar.getId());
+                                break;
+                            }
+                            if (i == querys.size()) {
+                                pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
+                                orderIds.remove(orderPrivateCar.getId());
+                            }
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }).start();
     }
 
     @Override
@@ -2483,79 +2476,79 @@
         return orderPrivateCarMapper.queryMyTravelRecord(uid);
     }
 
-
-
     /**
-     * 获取服务中的订单数据
-     * @param uid
-     * @return
+     * 推送抢单数据
+     * @param orderPrivateCar
      * @throws Exception
      */
-    @Override
-    public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception {
-        OrderPrivateCar orderPrivateCar = this.selectById(orderId);
-        if(null == orderPrivateCar){
-            return orderTaxiService.queryOrderServer(orderId, uid);
-        }
-        //计算预计距离和剩余时间
-        String value = redisUtil.getValue("DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
-        if(null == value || "".equals(value)){
-            System.err.println("司机没有上传位置信息");
-
-            //调用获取轨迹中的数据
-            List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2);
-            if(list.size() > 0){
-                Map<String, Object> map = list.get(list.size() - 1);
-                value = map.get("lon") + "," + map.get("lat");
+    public void pushOrder(OrderPrivateCar orderPrivateCar) throws Exception{
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    Integer id = orderPrivateCar.getId();
+                    Integer orderType = orderPrivateCar.getRideType()==1?1:orderPrivateCar.getRideType()==2?9:8;
+                    orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单
+                    String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE");
+                    List<Integer> integers = new ArrayList<>();
+                    if(ToolUtil.isNotEmpty(vehicle)){
+                        integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
+                    }
+                    Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司
+                    List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数
+                    for(int i = 1; i <= querys.size(); i++){
+                        OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
+                        if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
+                            break;
+                        }
+                        PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0);
+                        System.out.println("pushOrder:"+pushOrder);
+                        int i2 = pushOrder.getPushTime() / 10;
+                        if(i2==0){
+                            i2=1;
+                        }
+                        for (int i1 = 0; i1 < i2 ; i1++) {
+                            if (orderPrivateCar.getState() > 1) {
+                                break;
+                            }
+                            //获取空闲司机
+                            List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
+                            if (list.size() > 0) {
+                                double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
+                                int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
+                                lastIndex = lastIndex == 0 ? list.size() : lastIndex;
+                                list = list.subList(0, lastIndex);//获取空闲司机中占比数据
+                                for (Driver driver : list) {//开始进行推送
+                                    boolean bo = false;
+                                    for (Integer integer : integers) {
+                                        if (integer.compareTo(driver.getId()) == 0) {
+                                            bo = true;
+                                            break;
+                                        }
+                                    }
+                                    if (bo) {
+                                        continue;
+                                    }
+                                    pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime());
+                                }
+                            }
+                            Thread.sleep(10000);//设置等待时间
+                            Integer state = orderPrivateCar.getState();
+                            if (state > 1) {
+                                orderIds.remove(orderPrivateCar.getId());
+                                return;
+                            }
+                            if (i == querys.size() && state == 1) {
+                                pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
+                                orderIds.remove(orderPrivateCar.getId());
+                            }
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
             }
-
-        }
-
-        OrderServerWarpper orderServerWarpper = new OrderServerWarpper();
-        orderServerWarpper.setOrderId(orderPrivateCar.getId());
-        orderServerWarpper.setOrderType(1);
-        orderServerWarpper.setState(orderPrivateCar.getState());
-        orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0");
-        orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0");
-        orderServerWarpper.setReassignNotice(orderPrivateCar.getReassignNotice());
-        if(orderPrivateCar.getState() == 2 || orderPrivateCar.getState() == 3){//前往预约地
-            // TODO: 2023/11/4 无法修改
-            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1);
-            String d = "0";
-            String t = "0";
-            if(null == distance){
-                System.err.println("查询距离出错了");
-            }else{
-                d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
-                t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
-            }
-            orderServerWarpper.setReservationMileage(d);
-            orderServerWarpper.setReservationTime(t);
-            orderServerWarpper.setServedMileage("0");
-            orderServerWarpper.setServedTime("0");
-            orderServerWarpper.setLaveMileage("0");
-            orderServerWarpper.setLaveTime("0");
-        }
-        if(orderPrivateCar.getState() == 5 || orderPrivateCar.getState() == 6){//服务中
-            // TODO: 2023/11/4 无法修改
-            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
-            String d = "0";
-            String t = "0";
-            if(null == distance){
-                System.err.println("查询距离出错了");
-            }else{
-                d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
-                t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
-            }
-            orderServerWarpper.setReservationMileage("0");
-            orderServerWarpper.setReservationTime("0");
-            orderServerWarpper.setServedMileage(String.valueOf((null == orderPrivateCar.getMileage() ? 0 : orderPrivateCar.getMileage()) / 1000));
-            orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderPrivateCar.getStartServiceTime().getTime()) / 60000).intValue() + "");
-            orderServerWarpper.setLaveMileage(d);
-            orderServerWarpper.setLaveTime(t);
-        }
-
-        return orderServerWarpper;
+        }).start();
     }
 
 

--
Gitblit v1.7.1