From 70211b41954df4ac1232f48420b89c13fb5fb451 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 25 六月 2025 15:06:58 +0800
Subject: [PATCH] 更新用户端功能

---
 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java |  699 +++++++++++++++++++++++++++++----------------------------
 1 files changed, 354 insertions(+), 345 deletions(-)

diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
index d12b3f9..372be92 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
@@ -1,5 +1,8 @@
 package com.stylefeng.guns.modular.system.util;
 
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.stylefeng.guns.core.util.ToolUtil;
@@ -11,14 +14,10 @@
 import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.stereotype.Component;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.client.RestTemplate;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.MathContext;
 import java.math.RoundingMode;
@@ -29,178 +28,177 @@
  */
 @Component
 public class PushUtil {
-
-    @Autowired
-    private RestTemplate internalRestTemplate;
-    
-    @Autowired
-    private RedisTemplate redisTemplate;
-
-    @Autowired
-    private IOrderTaxiService orderTaxiService;
-
-    @Autowired
-    private GDMapElectricFenceUtil gdMapElectricFenceUtil;
-
-    @Autowired
-    private IOrderPrivateCarService orderPrivateCarService;
-
-    @Autowired
-    private IOrderCrossCityService orderCrossCityService;
-
-    private Map<String, Timer> taskMap = new HashMap<>();//存储定时推送的定时器
-
-
-
-
-    /**
-     * 推送订单状态
-     * @param type          1=用户,2=司机
-     * @param uid           对象id
-     * @param orderId       订单id
-     * @param orderType     订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
-     * @param state         订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)
-     */
-    public void pushOrderState(Integer type, Integer uid, Integer orderId, Integer orderType, Integer state, Integer time){
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("code", 200);
-        jsonObject.put("msg", "SUCCESS");
-        jsonObject.put("method", "ORDER_STATUS");
-        Map<String, Object> map = new HashMap<>();
-        map.put("orderId", orderId);
-        map.put("orderType", orderType);
-        map.put("time", time);
-        if(orderType==1 && state==100){
-            map.put("carpooling", 1);
-            map.put("state", 2);
-        }else{
-            map.put("state", state);
-        }
-        jsonObject.put("data", map);
-
-        //调用推送
-        HttpHeaders headers = new HttpHeaders();
-        // 以表单的方式提交
-        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-        //将请求头部和参数合成一个请求
-        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
-        params.add("msg", jsonObject.toJSONString());
-        params.add("id", String.valueOf(uid));
-        params.add("type", String.valueOf(type));
-        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
-        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
-        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
-        if(jsonObject1.getIntValue("code") != 200){
-            System.err.println(jsonObject1.getString("msg"));
-        }
-    }
-
-
-    /**
-     * 推单完成后,没有司机接单的推送提醒
-     * @param type
-     * @param uid
-     * @param orderId
-     * @param orderType
-     */
-    public void pushEndPush(Integer type, Integer uid, Integer orderId, Integer orderType){
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("code", 200);
-        jsonObject.put("msg", "SUCCESS");
-        jsonObject.put("method", "END_PUSH");
-        Map<String, Object> map = new HashMap<>();
-        map.put("orderId", orderId);
-        map.put("orderType", orderType);
-        jsonObject.put("data", map);
-
-        //调用推送
-        HttpHeaders headers = new HttpHeaders();
-        // 以表单的方式提交
-        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-        //将请求头部和参数合成一个请求
-        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
-        params.add("msg", jsonObject.toJSONString());
-        params.add("id", String.valueOf(uid));
-        params.add("type", String.valueOf(type));
-        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
-        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
-        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
-        if(jsonObject1.getIntValue("code") != 200){
-            System.err.println(jsonObject1.getString("msg"));
-        }
-    }
-
-
-
-
-    /**
-     * 推送司机位置给乘客端
-     */
-    public void pushDriverPosition(Integer orderId, Integer orderType){
-        Integer userId = null;
-        switch (orderType){
-            case 1:
-                OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
-                userId = orderPrivateCar.getUserId();
-                break;
-            case 2:
-                OrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
-                userId = orderTaxi.getUserId();
-                break;
-            case 3:
-                OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId);
-                userId = orderCrossCity.getUserId();
-                break;
-        }
-        JSONObject data = new JSONObject();
-        data.put("id", userId);
-        data.put("type", 1);
-        String str = (String) redisTemplate.opsForValue().get(orderId + "_" + orderType);
-        if(ToolUtil.isEmpty(str)){
-            redisTemplate.opsForValue().set(orderId + "_" + orderType, data.toJSONString());
-            createTask(orderId, orderType);
-        }
-    }
-
-
-    /**
-     * 创建定时任务
-     * @param orderId
-     */
-    public void createTask(Integer orderId, Integer orderType){
-        TimerTask task = new TimerTask() {
-            @Override
-            public void run() {
-                try {
-                    PushUtil.this.pushPositon(orderId, orderType);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            }
-        };
-        Timer timer = new Timer();
-        timer.schedule(task, 1000, 10000);//1秒后开始10秒钟一次的重复执行
-        taskMap.put(orderId + "_" + orderType, timer);
-    }
-
-
-    /**
-     * 推送处理方法
-     * @param orderId
-     * @param orderType
-     * @throws Exception
-     */
-    public void pushPositon(Integer orderId, Integer orderType) throws Exception{
-        Integer driverId = null;
-        String startLonLat = null;
-        String endLonLat = null;
-        Integer state = 0;
-        Integer oldState = 0;
-        Long startServiceTime = null;
-        Double servedMileage = null;
-        switch (orderType){
-            case 1:
-                OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
+	
+	private final String socket_uri = "http://172.21.35.142:6000";
+	@Autowired
+	private IOrderTaxiService orderTaxiService;
+	
+	@Autowired
+	private GDMapElectricFenceUtil gdMapElectricFenceUtil;
+	
+	@Autowired
+	private IOrderPrivateCarService orderPrivateCarService;
+	
+	@Autowired
+	private IOrderCrossCityService orderCrossCityService;
+	
+	private Map<String, Timer> taskMap = new HashMap<>();//存储定时推送的定时器
+	@Resource
+	private RedisTemplate<String, Object> redisTemplate;
+	
+	
+	/**
+	 * 推送订单状态
+	 *
+	 * @param type      1=用户,2=司机
+	 * @param uid       对象id
+	 * @param orderId   订单id
+	 * @param orderType 订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)
+	 * @param state     订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)
+	 */
+	public void pushOrderState(Integer type, Integer uid, Integer orderId, Integer orderType, Integer state, Integer time) {
+		JSONObject jsonObject = new JSONObject();
+		jsonObject.put("code", 200);
+		jsonObject.put("msg", "SUCCESS");
+		jsonObject.put("method", "ORDER_STATUS");
+		Map<String, Object> map = new HashMap<>();
+		map.put("orderId", orderId);
+		map.put("orderType", orderType);
+		map.put("time", time);
+		if (orderType == 1 && state == 100) {
+			map.put("carpooling", 1);
+			map.put("state", 2);
+		} else {
+			map.put("state", state);
+		}
+		jsonObject.put("data", map);
+		
+		//调用推送
+		HttpRequest post = HttpUtil.createPost(socket_uri + "/netty/sendMsgToClient");
+		post.header("Content-Type", MediaType.APPLICATION_FORM_URLENCODED_VALUE);
+		//将请求头部和参数合成一个请求
+		Map<String, Object> params = new HashMap<>();
+		params.put("msg", jsonObject.toJSONString());
+		params.put("id", uid);
+		params.put("type", type);
+		post.form(params);
+		HttpResponse execute = post.execute();
+		if (200 != execute.getStatus()) {
+			System.err.println("推送异常");
+		} else {
+			JSONObject jsonObject1 = JSON.parseObject(execute.body(), JSONObject.class);
+			if (jsonObject1.getIntValue("code") != 200) {
+				System.err.println(jsonObject1.getString("msg"));
+			}
+		}
+	}
+	
+	/**
+	 * 推单完成后,没有司机接单的推送提醒
+	 *
+	 * @param type
+	 * @param uid
+	 * @param orderId
+	 * @param orderType
+	 */
+	public void pushEndPush(Integer type, Integer uid, Integer orderId, Integer orderType) {
+		JSONObject jsonObject = new JSONObject();
+		jsonObject.put("code", 200);
+		jsonObject.put("msg", "SUCCESS");
+		jsonObject.put("method", "END_PUSH");
+		Map<String, Object> map = new HashMap<>();
+		map.put("orderId", orderId);
+		map.put("orderType", orderType);
+		jsonObject.put("data", map);
+		
+		//调用推送
+		HttpRequest post = HttpUtil.createPost(socket_uri + "/netty/sendMsgToClient");
+		post.header("Content-Type", MediaType.APPLICATION_FORM_URLENCODED_VALUE);
+		//将请求头部和参数合成一个请求
+		Map<String, Object> params = new HashMap<>();
+		params.put("msg", jsonObject.toJSONString());
+		params.put("id", uid);
+		params.put("type", type);
+		post.form(params);
+		HttpResponse execute = post.execute();
+		if (200 != execute.getStatus()) {
+			System.err.println("推送异常");
+		} else {
+			JSONObject jsonObject1 = JSON.parseObject(execute.body(), JSONObject.class);
+			if (jsonObject1.getIntValue("code") != 200) {
+				System.err.println(jsonObject1.getString("msg"));
+			}
+		}
+	}
+	
+	/**
+	 * 推送司机位置给乘客端
+	 */
+	public void pushDriverPosition(Integer orderId, Integer orderType) {
+		Integer userId = null;
+		switch (orderType) {
+			case 1:
+				OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
+				userId = orderPrivateCar.getUserId();
+				break;
+			case 2:
+				OrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
+				userId = orderTaxi.getUserId();
+				break;
+			case 3:
+				OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId);
+				userId = orderCrossCity.getUserId();
+				break;
+		}
+		JSONObject data = new JSONObject();
+		data.put("id", userId);
+		data.put("type", 1);
+		String str = (String) redisTemplate.opsForValue().get(orderId + "_" + orderType);
+		if (ToolUtil.isEmpty(str)) {
+			redisTemplate.opsForValue().set(orderId + "_" + orderType, data.toJSONString());
+			createTask(orderId, orderType);
+		}
+	}
+	
+	/**
+	 * 创建定时任务
+	 *
+	 * @param orderId
+	 */
+	public void createTask(Integer orderId, Integer orderType) {
+		TimerTask task = new TimerTask() {
+			@Override
+			public void run() {
+				try {
+					PushUtil.this.pushPositon(orderId, orderType);
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+			}
+		};
+		Timer timer = new Timer();
+		timer.schedule(task, 1000, 10000);//1秒后开始10秒钟一次的重复执行
+		taskMap.put(orderId + "_" + orderType, timer);
+	}
+	
+	/**
+	 * 推送处理方法
+	 *
+	 * @param orderId
+	 * @param orderType
+	 * @throws Exception
+	 */
+	public void pushPositon(Integer orderId, Integer orderType) throws Exception {
+		Integer driverId = null;
+		String startLonLat = null;
+		String endLonLat = null;
+		Integer state = 0;
+		Integer oldState = 0;
+		Long startServiceTime = null;
+		Double servedMileage = null;
+		switch (orderType) {
+			case 1:
+				OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
                 if(null == orderPrivateCar){
                     return;
                 }
@@ -235,172 +233,183 @@
                 state = orderCrossCity.getState();
                 oldState = orderCrossCity.getOldState();
                 startServiceTime = null != orderCrossCity.getStartServiceTime() ? orderCrossCity.getStartServiceTime().getTime() : null;
-                servedMileage = orderCrossCity.getMileage();
-                endLonLat = orderCrossCity.getEndLon() + "," + orderCrossCity.getEndLat();
-                break;
-        }
-        if(state == 7 || state == 8 || state == 9 || state == 10 || state == 12){//删除定时任务
-            this.removeTask(orderId, orderType);
-            return;
-        }
-
-        //计算预计距离和剩余时间
-        String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(driverId));
-        if(null == value || "".equals(value)){
-            return;
-        }
-
-        JSONObject msg = new JSONObject();
-        msg.put("code", 200);
-        msg.put("msg", "SUCCESS");
-        msg.put("method", "DRIVER_POSITION");
-        Map<String, String> map = new HashMap<>();
-        map.put("orderId", String.valueOf(orderId));
-        map.put("orderType", String.valueOf(orderType));
-        map.put("lon", (null != value ? value.split(",")[0] : ""));
-        map.put("lat", (null != value ? value.split(",")[1] : ""));
-        if((state == 2 || state == 3 || state == 4) || (oldState != null && (oldState == 2 || oldState == 3 || oldState == 4))){//前往预约地
-            // TODO: 2023/11/4 无法修改
-            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, startLonLat, 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() + "";
-            }
-            map.put("reservationMileage", d);//当前位置距离预约点的剩余里程
-            map.put("reservationTime", t);//当前位置距离预约点的剩余分钟
-            map.put("servedMileage", "0");//距离起点已经服务的里程
-            map.put("servedTime", "0");//距离起点已经服务的时间
-            map.put("laveMileage", "0");//距离终点剩余未服务的里程数
-            map.put("laveTime", "0");//距离终端剩余未服务的预计时间
-        }
-        if((state == 5 || state == 6) || (oldState != null && (oldState == 5 || oldState == 6))){//服务中
-            map.put("reservationMileage", "0");//当前位置距离预约点的剩余里程
-            map.put("reservationTime", "0");//当前位置距离预约点的剩余分钟
-            map.put("servedMileage", String.valueOf(servedMileage / 1000));//距离起点已经服务的里程
-            Integer servedTime = Long.valueOf((new Date().getTime() - startServiceTime) / 60000).intValue();
-            map.put("servedTime", servedTime + "");//距离起点已经服务的时间
-            // TODO: 2023/11/4 无法修改
-            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, endLonLat, 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() + "";
-            }
-            map.put("laveMileage", d);//距离终点剩余未服务的里程数
-            map.put("laveTime", t);//距离终端剩余未服务的预计时间
-        }
-
-        msg.put("data", map);
-
-        //调用推送
-        HttpHeaders headers = new HttpHeaders();
-        // 以表单的方式提交
-        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-        //将请求头部和参数合成一个请求
-        String value1 = (String) redisTemplate.opsForValue().get(orderId + "_" + orderType);
-        if(ToolUtil.isEmpty(value1)){
-            this.removeTask(orderId, orderType);
-            return;
-        }
-        JSONObject jsonObject = JSON.parseObject(value1);
-        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
-        params.add("msg", msg.toJSONString());
-        params.add("id", jsonObject.getString("id"));
-        params.add("type", jsonObject.getString("type"));
-        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
-        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
-        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
-        if(jsonObject1.getIntValue("code") != 200){
-            System.err.println(jsonObject1.getString("msg"));
-        }
-    }
-
-
-    /**
-     * 推送强迫下线
-     * @param id
-     * @param type
-     */
-    public void pushOffline(Integer id, Integer type){
-        JSONObject msg = new JSONObject();
-        msg.put("code", 200);
-        msg.put("msg", "SUCCESS");
-        msg.put("method", "OFFLINE");
-        msg.put("data", new Object());
-
-        //调用推送
-        HttpHeaders headers = new HttpHeaders();
-        // 以表单的方式提交
-        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-        //将请求头部和参数合成一个请求
-        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
-        params.add("msg", msg.toJSONString());
-        params.add("id", id.toString());
-        params.add("type", type.toString());
-        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
-        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
-        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
-        if(jsonObject1.getIntValue("code") != 200){
-            System.err.println(jsonObject1.getString("msg"));
-        }
-    }
-
-
-    /**
-     * 摆渡抢单成功后推单
-     * @param type
-     * @param uid
-     * @param orderId
-     * @param orderType
-     * @param state
-     */
-    public void pushFerryOrderState(Integer type, Integer uid, Integer orderId, Integer orderType, Integer state){
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("code", 200);
-        jsonObject.put("msg", "SUCCESS");
-        jsonObject.put("method", "FERRY");
-        Map<String, Object> map = new HashMap<>();
-        map.put("orderId", orderId);
-        map.put("orderType", orderType);
-        map.put("state", state);
-        jsonObject.put("data", map);
-
-        //调用推送
-        HttpHeaders headers = new HttpHeaders();
-        // 以表单的方式提交
-        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-        //将请求头部和参数合成一个请求
-        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
-        params.add("msg", jsonObject.toJSONString());
-        params.add("id", String.valueOf(uid));
-        params.add("type", String.valueOf(type));
-        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
-        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
-        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
-        if(jsonObject1.getIntValue("code") != 200){
-            System.err.println(jsonObject1.getString("msg"));
-        }
-    }
-
-
-
-    /**
-     * 删除定时任务
-     * @param orderId
-     */
-    public void removeTask(Integer orderId, Integer orderType){
-        Timer timer = taskMap.get(orderId + "_" + orderType);
-        if (null != timer){
-            timer.cancel();
-            taskMap.remove(orderId + "_" + orderType);
-            redisTemplate.delete(orderId + "_" + orderType);
-        }
-    }
+	            servedMileage = orderCrossCity.getMileage();
+	            endLonLat = orderCrossCity.getEndLon() + "," + orderCrossCity.getEndLat();
+	            break;
+		}
+		if (state == 7 || state == 8 || state == 9 || state == 10 || state == 12) {//删除定时任务
+			this.removeTask(orderId, orderType);
+			return;
+		}
+		
+		//计算预计距离和剩余时间
+		String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(driverId));
+		if (null == value || "".equals(value)) {
+			return;
+		}
+		
+		JSONObject msg = new JSONObject();
+		msg.put("code", 200);
+		msg.put("msg", "SUCCESS");
+		msg.put("method", "DRIVER_POSITION");
+		Map<String, String> map = new HashMap<>();
+		map.put("orderId", String.valueOf(orderId));
+		map.put("orderType", String.valueOf(orderType));
+		map.put("lon", (null != value ? value.split(",")[0] : ""));
+		map.put("lat", (null != value ? value.split(",")[1] : ""));
+		if ((state == 2 || state == 3 || state == 4) || (oldState != null && (oldState == 2 || oldState == 3 || oldState == 4))) {//前往预约地
+			// TODO: 2023/11/4 无法修改
+			Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, startLonLat, 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() + "";
+			}
+			map.put("reservationMileage", d);//当前位置距离预约点的剩余里程
+			map.put("reservationTime", t);//当前位置距离预约点的剩余分钟
+			map.put("servedMileage", "0");//距离起点已经服务的里程
+			map.put("servedTime", "0");//距离起点已经服务的时间
+			map.put("laveMileage", "0");//距离终点剩余未服务的里程数
+			map.put("laveTime", "0");//距离终端剩余未服务的预计时间
+		}
+		if ((state == 5 || state == 6) || (oldState != null && (oldState == 5 || oldState == 6))) {//服务中
+			map.put("reservationMileage", "0");//当前位置距离预约点的剩余里程
+			map.put("reservationTime", "0");//当前位置距离预约点的剩余分钟
+			map.put("servedMileage", String.valueOf(servedMileage / 1000));//距离起点已经服务的里程
+			Integer servedTime = Long.valueOf((new Date().getTime() - startServiceTime) / 60000).intValue();
+			map.put("servedTime", servedTime + "");//距离起点已经服务的时间
+			// TODO: 2023/11/4 无法修改
+			Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, endLonLat, 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() + "";
+			}
+			map.put("laveMileage", d);//距离终点剩余未服务的里程数
+			map.put("laveTime", t);//距离终端剩余未服务的预计时间
+		}
+		
+		msg.put("data", map);
+		
+		//将请求头部和参数合成一个请求
+		String value1 = (String) redisTemplate.opsForValue().get(orderId + "_" + orderType);
+		if (ToolUtil.isEmpty(value1)) {
+			this.removeTask(orderId, orderType);
+			return;
+		}
+		JSONObject jsonObject = JSON.parseObject(value1);
+		//调用推送
+		HttpRequest post = HttpUtil.createPost(socket_uri + "/netty/sendMsgToClient");
+		post.header("Content-Type", MediaType.APPLICATION_FORM_URLENCODED_VALUE);
+		//将请求头部和参数合成一个请求
+		Map<String, Object> params = new HashMap<>();
+		params.put("msg", msg.toJSONString());
+		params.put("id", jsonObject.getIntValue("id"));
+		params.put("type", jsonObject.getIntValue("type"));
+		post.form(params);
+		HttpResponse execute = post.execute();
+		if (200 != execute.getStatus()) {
+			System.err.println("推送异常");
+		} else {
+			JSONObject jsonObject1 = JSON.parseObject(execute.body(), JSONObject.class);
+			if (jsonObject1.getIntValue("code") != 200) {
+				System.err.println(jsonObject1.getString("msg"));
+			}
+		}
+		
+	}
+	
+	/**
+	 * 删除定时任务
+	 *
+	 * @param orderId
+	 */
+	public void removeTask(Integer orderId, Integer orderType) {
+		Timer timer = taskMap.get(orderId + "_" + orderType);
+		if (null != timer) {
+			timer.cancel();
+			taskMap.remove(orderId + "_" + orderType);
+			redisTemplate.delete(orderId + "_" + orderType);
+		}
+	}
+	
+	/**
+	 * 推送强迫下线
+	 *
+	 * @param id
+	 * @param type
+	 */
+	public void pushOffline(Integer id, Integer type) {
+		JSONObject msg = new JSONObject();
+		msg.put("code", 200);
+		msg.put("msg", "SUCCESS");
+		msg.put("method", "OFFLINE");
+		msg.put("data", new Object());
+		
+		
+		//调用推送
+		HttpRequest post = HttpUtil.createPost(socket_uri + "/netty/sendMsgToClient");
+		post.header("Content-Type", MediaType.APPLICATION_FORM_URLENCODED_VALUE);
+		//将请求头部和参数合成一个请求
+		Map<String, Object> params = new HashMap<>();
+		params.put("msg", msg.toJSONString());
+		params.put("id", id);
+		params.put("type", type);
+		post.form(params);
+		HttpResponse execute = post.execute();
+		if (200 != execute.getStatus()) {
+			System.err.println("推送异常");
+		} else {
+			JSONObject jsonObject1 = JSON.parseObject(execute.body(), JSONObject.class);
+			if (jsonObject1.getIntValue("code") != 200) {
+				System.err.println(jsonObject1.getString("msg"));
+			}
+		}
+	}
+	
+	/**
+	 * 摆渡抢单成功后推单
+	 *
+	 * @param type
+	 * @param uid
+	 * @param orderId
+	 * @param orderType
+	 * @param state
+	 */
+	public void pushFerryOrderState(Integer type, Integer uid, Integer orderId, Integer orderType, Integer state) {
+		JSONObject jsonObject = new JSONObject();
+		jsonObject.put("code", 200);
+		jsonObject.put("msg", "SUCCESS");
+		jsonObject.put("method", "FERRY");
+		Map<String, Object> map = new HashMap<>();
+		map.put("orderId", orderId);
+		map.put("orderType", orderType);
+		map.put("state", state);
+		jsonObject.put("data", map);
+		
+		//调用推送
+		HttpRequest post = HttpUtil.createPost(socket_uri + "/netty/sendMsgToClient");
+		post.header("Content-Type", MediaType.APPLICATION_FORM_URLENCODED_VALUE);
+		//将请求头部和参数合成一个请求
+		Map<String, Object> params = new HashMap<>();
+		params.put("msg", jsonObject.toJSONString());
+		params.put("id", uid);
+		params.put("type", type);
+		post.form(params);
+		HttpResponse execute = post.execute();
+		if (200 != execute.getStatus()) {
+			System.err.println("推送异常");
+		} else {
+			JSONObject jsonObject1 = JSON.parseObject(execute.body(), JSONObject.class);
+			if (jsonObject1.getIntValue("code") != 200) {
+				System.err.println(jsonObject1.getString("msg"));
+			}
+		}
+	}
 }

--
Gitblit v1.7.1