Browse Source

增加获取车辆定位的后台进程

zhangshuling 1 năm trước cách đây
mục cha
commit
336c5c8d72

+ 220 - 225
xzl-common/src/main/java/com/xzl/common/utils/http/HttpUtils.java

@@ -1,22 +1,33 @@
 package com.xzl.common.utils.http;
 
 import java.io.BufferedReader;
+import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.net.ConnectException;
+import java.net.HttpURLConnection;
 import java.net.SocketTimeoutException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.security.cert.X509Certificate;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.xzl.common.constant.Constants;
@@ -24,251 +35,235 @@ import com.xzl.common.utils.StringUtils;
 
 /**
  * 通用http发送方法
- * 
+ *
  * @author xzl
  */
-public class HttpUtils
-{
-    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
+public class HttpUtils {
+  private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
 
-    /**
-     * 向指定 URL 发送GET方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendGet(String url)
-    {
-        return sendGet(url, StringUtils.EMPTY);
-    }
+  /**
+   * 向指定 URL 发送GET方法的请求
+   *
+   * @param url 发送请求的 URL
+   * @return 所代表远程资源的响应结果
+   */
+  public static String sendGet(String url) {
+    return sendGet(url, StringUtils.EMPTY);
+  }
 
-    /**
-     * 向指定 URL 发送GET方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendGet(String url, String param)
-    {
-        return sendGet(url, param, Constants.UTF8);
-    }
+  /**
+   * 向指定 URL 发送GET方法的请求
+   *
+   * @param url   发送请求的 URL
+   * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+   * @return 所代表远程资源的响应结果
+   */
+  public static String sendGet(String url, String param) {
+    return sendGet(url, param, Constants.UTF8);
+  }
 
-    /**
-     * 向指定 URL 发送GET方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @param contentType 编码类型
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendGet(String url, String param, String contentType)
-    {
-        StringBuilder result = new StringBuilder();
-        BufferedReader in = null;
-        try
-        {
-            String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url;
-            log.info("sendGet - {}", urlNameString);
-            URL realUrl = new URL(urlNameString);
-            URLConnection connection = realUrl.openConnection();
-            connection.setRequestProperty("accept", "*/*");
-            connection.setRequestProperty("connection", "Keep-Alive");
-            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            connection.connect();
-            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
-            String line;
-            while ((line = in.readLine()) != null)
-            {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
+  /**
+   * 向指定 URL 发送GET方法的请求
+   *
+   * @param url         发送请求的 URL
+   * @param param       请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+   * @param contentType 编码类型
+   * @return 所代表远程资源的响应结果
+   */
+  public static String sendGet(String url, String param, String contentType) {
+    StringBuilder result = new StringBuilder();
+    BufferedReader in = null;
+    try {
+      String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url;
+      log.info("sendGet - {}", urlNameString);
+      URL realUrl = new URL(urlNameString);
+      URLConnection connection = realUrl.openConnection();
+      connection.setRequestProperty("accept", "*/*");
+      connection.setRequestProperty("connection", "Keep-Alive");
+      connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+      connection.connect();
+      in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
+      String line;
+      while ((line = in.readLine()) != null) {
+        result.append(line);
+      }
+      log.info("recv - {}", result);
+    } catch (ConnectException e) {
+      log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
+    } catch (SocketTimeoutException e) {
+      log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
+    } catch (IOException e) {
+      log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
+    } catch (Exception e) {
+      log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
+    } finally {
+      try {
+        if (in != null) {
+          in.close();
         }
-        finally
-        {
-            try
-            {
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (Exception ex)
-            {
-                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
+      } catch (Exception ex) {
+        log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+      }
     }
+    return result.toString();
+  }
 
-    /**
-     * 向指定 URL 发送POST方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendPost(String url, String param)
-    {
-        PrintWriter out = null;
-        BufferedReader in = null;
-        StringBuilder result = new StringBuilder();
-        try
-        {
-            log.info("sendPost - {}", url);
-            URL realUrl = new URL(url);
-            URLConnection conn = realUrl.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-            out = new PrintWriter(conn.getOutputStream());
-            out.print(param);
-            out.flush();
-            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
-            String line;
-            while ((line = in.readLine()) != null)
-            {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+  /**
+   * 向指定 URL 发送POST方法的请求
+   *
+   * @param url   发送请求的 URL
+   * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+   * @return 所代表远程资源的响应结果
+   */
+  public static String sendPost(String url, String param) {
+    PrintWriter out = null;
+    BufferedReader in = null;
+    StringBuilder result = new StringBuilder();
+    try {
+      log.info("sendPost - {}", url);
+      URL realUrl = new URL(url);
+      URLConnection conn = realUrl.openConnection();
+      conn.setRequestProperty("accept", "*/*");
+      conn.setRequestProperty("connection", "Keep-Alive");
+      conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+      conn.setRequestProperty("Accept-Charset", "utf-8");
+      conn.setRequestProperty("contentType", "utf-8");
+      conn.setDoOutput(true);
+      conn.setDoInput(true);
+      out = new PrintWriter(conn.getOutputStream());
+      out.print(param);
+      out.flush();
+      in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+      String line;
+      while ((line = in.readLine()) != null) {
+        result.append(line);
+      }
+      log.info("recv - {}", result);
+    } catch (ConnectException e) {
+      log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+    } catch (SocketTimeoutException e) {
+      log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+    } catch (IOException e) {
+      log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+    } catch (Exception e) {
+      log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+    } finally {
+      try {
+        if (out != null) {
+          out.close();
         }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+        if (in != null) {
+          in.close();
         }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
-        }
-        finally
-        {
-            try
-            {
-                if (out != null)
-                {
-                    out.close();
-                }
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (IOException ex)
-            {
-                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
+      } catch (IOException ex) {
+        log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+      }
     }
+    return result.toString();
+  }
 
-    public static String sendSSLPost(String url, String param)
-    {
-        StringBuilder result = new StringBuilder();
-        String urlNameString = url + "?" + param;
-        try
-        {
-            log.info("sendSSLPost - {}", urlNameString);
-            SSLContext sc = SSLContext.getInstance("SSL");
-            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
-            URL console = new URL(urlNameString);
-            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
+  public static String sendSSLPost(String url, String param) {
+    StringBuilder result = new StringBuilder();
+    String urlNameString = url + "?" + param;
+    try {
+      log.info("sendSSLPost - {}", urlNameString);
+      SSLContext sc = SSLContext.getInstance("SSL");
+      sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
+      URL console = new URL(urlNameString);
+      HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
+      conn.setRequestProperty("accept", "*/*");
+      conn.setRequestProperty("connection", "Keep-Alive");
+      conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+      conn.setRequestProperty("Accept-Charset", "utf-8");
+      conn.setRequestProperty("contentType", "utf-8");
+      conn.setDoOutput(true);
+      conn.setDoInput(true);
 
-            conn.setSSLSocketFactory(sc.getSocketFactory());
-            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
-            conn.connect();
-            InputStream is = conn.getInputStream();
-            BufferedReader br = new BufferedReader(new InputStreamReader(is));
-            String ret = "";
-            while ((ret = br.readLine()) != null)
-            {
-                if (ret != null && !"".equals(ret.trim()))
-                {
-                    result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
-                }
-            }
-            log.info("recv - {}", result);
-            conn.disconnect();
-            br.close();
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
+      conn.setSSLSocketFactory(sc.getSocketFactory());
+      conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
+      conn.connect();
+      InputStream is = conn.getInputStream();
+      BufferedReader br = new BufferedReader(new InputStreamReader(is));
+      String ret = "";
+      while ((ret = br.readLine()) != null) {
+        if (ret != null && !"".equals(ret.trim())) {
+          result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
         }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
-        }
-        return result.toString();
+      }
+      log.info("recv - {}", result);
+      conn.disconnect();
+      br.close();
+    } catch (ConnectException e) {
+      log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
+    } catch (SocketTimeoutException e) {
+      log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+    } catch (IOException e) {
+      log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
+    } catch (Exception e) {
+      log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
     }
+    return result.toString();
+  }
 
-    private static class TrustAnyTrustManager implements X509TrustManager
-    {
-        @Override
-        public void checkClientTrusted(X509Certificate[] chain, String authType)
-        {
-        }
+  private static class TrustAnyTrustManager implements X509TrustManager {
+    @Override
+    public void checkClientTrusted(X509Certificate[] chain, String authType) {
+    }
 
-        @Override
-        public void checkServerTrusted(X509Certificate[] chain, String authType)
-        {
-        }
+    @Override
+    public void checkServerTrusted(X509Certificate[] chain, String authType) {
+    }
 
-        @Override
-        public X509Certificate[] getAcceptedIssuers()
-        {
-            return new X509Certificate[] {};
-        }
+    @Override
+    public X509Certificate[] getAcceptedIssuers() {
+      return new X509Certificate[]{};
+    }
+  }
+
+  private static class TrustAnyHostnameVerifier implements HostnameVerifier {
+    @Override
+    public boolean verify(String hostname, SSLSession session) {
+      return true;
     }
+  }
 
-    private static class TrustAnyHostnameVerifier implements HostnameVerifier
-    {
-        @Override
-        public boolean verify(String hostname, SSLSession session)
-        {
-            return true;
+  public static String sendFormPost(String url, Map<String, String> param, Map<String, String> headers) throws IOException {
+    URL siteUrl = new URL(url);
+    HttpURLConnection conn = (HttpURLConnection) siteUrl.openConnection();
+    conn.setRequestMethod("POST");
+    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+    conn.setUseCaches(true);
+    conn.setDoOutput(true);
+    conn.setDoInput(true);
+    if (headers != null) {
+      for (Map.Entry<String, String> entry : headers.entrySet()) {
+        conn.setRequestProperty(entry.getKey(), entry.getValue());
+      }
+    }
+    DataOutputStream out = new DataOutputStream(conn.getOutputStream());
+    String content = "";
+    if (param != null) {
+      Set keys = param.keySet();
+      Iterator keyIter = keys.iterator();
+      for (int i = 0; keyIter.hasNext(); i++) {
+        Object key = keyIter.next();
+        if (i != 0) {
+          content += "&";
         }
+        content += key + "=" + URLEncoder.encode(param.get(key), "UTF-8");
+      }
+    }
+    out.writeBytes(content);
+    out.flush();
+    out.close();
+    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+    String line = "";
+    StringBuilder rs = new StringBuilder();
+    while ((line = in.readLine()) != null) {
+      rs.append(line);
     }
+    in.close();
+    conn.disconnect();
+    return rs.toString();
+  }
 }

+ 99 - 0
xzl-quartz/src/main/java/com/xzl/quartz/domain/BussCarPosition.java

@@ -0,0 +1,99 @@
+package com.xzl.quartz.domain;
+
+import java.math.BigDecimal;
+
+import com.xzl.common.annotation.Excel;
+import com.xzl.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 车辆定位对象 buss_car_position
+ *
+ * @author xzl
+ * @date 2024-01-29
+ */
+public class BussCarPosition extends BaseEntity {
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * ID主键
+   */
+  private Long id;
+
+  /**
+   * 车牌号
+   */
+  @Excel(name = "车牌号")
+  private String carNo;
+
+  /**
+   * $column.columnComment
+   */
+  @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+  private String status;
+
+  /**
+   * 纬度
+   */
+  @Excel(name = "纬度")
+  private BigDecimal latitude;
+
+  /**
+   * 经度
+   */
+  @Excel(name = "经度")
+  private BigDecimal longitude;
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public Long getId() {
+    return id;
+  }
+
+  public void setCarNo(String carNo) {
+    this.carNo = carNo;
+  }
+
+  public String getCarNo() {
+    return carNo;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setLatitude(BigDecimal latitude) {
+    this.latitude = latitude;
+  }
+
+  public BigDecimal getLatitude() {
+    return latitude;
+  }
+
+  public void setLongitude(BigDecimal longitude) {
+    this.longitude = longitude;
+  }
+
+  public BigDecimal getLongitude() {
+    return longitude;
+  }
+
+  @Override
+  public String toString() {
+    return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+      .append("id", getId())
+      .append("carNo", getCarNo())
+      .append("status", getStatus())
+      .append("latitude", getLatitude())
+      .append("longitude", getLongitude())
+      .append("createTime", getCreateTime())
+      .toString();
+  }
+}

+ 63 - 0
xzl-quartz/src/main/java/com/xzl/quartz/mapper/BussCarPositionMapper.java

@@ -0,0 +1,63 @@
+package com.xzl.quartz.mapper;
+
+import java.util.List;
+
+import com.xzl.quartz.domain.BussCarPosition;
+
+/**
+ * 车辆定位Mapper接口
+ *
+ * @author xzl
+ * @date 2024-01-29
+ */
+public interface BussCarPositionMapper {
+  /**
+   * 查询车辆定位
+   *
+   * @param id 车辆定位主键
+   * @return 车辆定位
+   */
+  public BussCarPosition selectBussCarPositionById(Long id);
+
+  /**
+   * 查询车辆定位列表
+   *
+   * @param bussCarPosition 车辆定位
+   * @return 车辆定位集合
+   */
+  public List<BussCarPosition> selectBussCarPositionList(BussCarPosition bussCarPosition);
+
+  /**
+   * 新增车辆定位
+   *
+   * @param bussCarPosition 车辆定位
+   * @return 结果
+   */
+  public int insertBussCarPosition(BussCarPosition bussCarPosition);
+
+  /**
+   * 修改车辆定位
+   *
+   * @param bussCarPosition 车辆定位
+   * @return 结果
+   */
+  public int updateBussCarPosition(BussCarPosition bussCarPosition);
+
+  /**
+   * 删除车辆定位
+   *
+   * @param id 车辆定位主键
+   * @return 结果
+   */
+  public int deleteBussCarPositionById(Long id);
+
+  /**
+   * 批量删除车辆定位
+   *
+   * @param ids 需要删除的数据主键集合
+   * @return 结果
+   */
+  public int deleteBussCarPositionByIds(Long[] ids);
+
+  void updateBussCarPositionStatus(String carNo);
+}

+ 66 - 0
xzl-quartz/src/main/java/com/xzl/quartz/task/CarPositionTask.java

@@ -0,0 +1,66 @@
+package com.xzl.quartz.task;
+
+import com.xzl.quartz.domain.BussCarPosition;
+import com.xzl.quartz.mapper.BussCarPositionMapper;
+import com.xzl.quartz.util.ObdUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName: CarPositionTask
+ * @Description: 用于
+ * Modification History:
+ * Date                  Author                 Version       Description
+ * ---------------------------------------------------------
+ * 2024/1/29             ZhangShuling      v1.0.0
+ */
+
+@Component("carPositionTask")
+public class CarPositionTask {
+
+  private static final Logger log = LoggerFactory.getLogger(CarPositionTask.class);
+
+  @Autowired
+  BussCarPositionMapper bussCarPositionMapper;
+
+  public void run(String params) {
+    log.info("获取车辆定位信息 ...");
+    if (params == null) {
+      log.info("未提供车牌信息 ...");
+      return;
+    }
+    String[] carNos = params.split(",");
+    try {
+      String accessToken = ObdUtils.getAccessToken();
+      List positionList = ObdUtils.getAllPosition(accessToken);
+      if (positionList == null || positionList.size() == 0) {
+        log.info("未获取车辆定位 ...");
+        return;
+      }
+      for (Object o : positionList) {
+        Map position = (Map) o;
+        for (String carNo : carNos) {
+          if (carNo.equals(MapUtils.getString(position, "idNumber"))) {
+            // 先更行该车辆有效地址
+            bussCarPositionMapper.updateBussCarPositionStatus(carNo);
+            // 保存新的地址信息
+            BussCarPosition carPosition = new BussCarPosition();
+            carPosition.setCarNo(carNo);
+            carPosition.setLatitude(new BigDecimal(MapUtils.getString(position, "wgsLat", "0")));
+            carPosition.setLongitude(new BigDecimal(MapUtils.getString(position, "wgsLng", "0")));
+            bussCarPositionMapper.insertBussCarPosition(carPosition);
+          }
+        }
+      }
+    } catch (Exception e) {
+      log.error("执行失败", e);
+    }
+  }
+}

+ 59 - 0
xzl-quartz/src/main/java/com/xzl/quartz/util/ObdUtils.java

@@ -0,0 +1,59 @@
+package com.xzl.quartz.util;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import com.xzl.common.utils.http.HttpUtils;
+import org.apache.commons.collections4.MapUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName: ObdUtils
+ * @Description: 用于
+ * Modification History:
+ * Date                  Author                 Version       Description
+ * ---------------------------------------------------------
+ * 2024/1/29             ZhangShuling      v1.0.0
+ */
+public class ObdUtils {
+
+  private static String apiRoot = "http://apigw-tiisp2020.aibds.cn:14003";
+
+  public static String getAccessToken() throws Exception {
+    Map param = new HashMap();
+    param.put("username", "xtyccs");
+    param.put("password", "FfkNCYji/1pote+myf9BwQ==");
+    String rs = HttpUtils.sendFormPost(apiRoot + "/iov-external-api/oauth/token", param, null);
+    JSONObject json = JSON.parseObject(rs);
+    if (json == null || json.isEmpty()) {
+      return null;
+    }
+    return json.getJSONObject("data").getString("access_token");
+  }
+
+  public static List getAllPosition(String accessToken) throws Exception {
+    List data = new ArrayList();
+    Map header = new HashMap();
+    header.put("Authorization", accessToken);
+    String rs = HttpUtils.sendFormPost(apiRoot + "/iov-external-api/vehMonitor/queryUserOrgVehRealGpsInfo", null, header);
+    JSONObject json = JSON.parseObject(rs);
+    if (json == null || json.isEmpty()) {
+      return data;
+    }
+    JSONArray array = json.getJSONArray("data");
+    data.addAll(array);
+    return data;
+  }
+
+
+  public static void main(String[] args) throws Exception {
+//    String accessToken = getAccessToken();
+//    System.out.println(accessToken);
+//    List positionList = getAllPosition(accessToken);
+//    System.out.println(positionList);
+  }
+}

+ 79 - 0
xzl-quartz/src/main/resources/mapper/quartz/BussCarPositionMapper.xml

@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xzl.quartz.mapper.BussCarPositionMapper">
+    
+    <resultMap type="BussCarPosition" id="BussCarPositionResult">
+        <result property="id"    column="id"    />
+        <result property="carNo"    column="car_no"    />
+        <result property="status"    column="status"    />
+        <result property="latitude"    column="latitude"    />
+        <result property="longitude"    column="longitude"    />
+        <result property="createTime"    column="create_time"    />
+    </resultMap>
+
+    <sql id="selectBussCarPositionVo">
+        select id, car_no, status, latitude, longitude, create_time from buss_car_position
+    </sql>
+
+    <select id="selectBussCarPositionList" parameterType="BussCarPosition" resultMap="BussCarPositionResult">
+        <include refid="selectBussCarPositionVo"/>
+        <where>  
+            <if test="carNo != null  and carNo != ''"> and car_no = #{carNo}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="latitude != null "> and latitude = #{latitude}</if>
+            <if test="longitude != null "> and longitude = #{longitude}</if>
+        </where>
+    </select>
+    
+    <select id="selectBussCarPositionById" parameterType="Long" resultMap="BussCarPositionResult">
+        <include refid="selectBussCarPositionVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertBussCarPosition" parameterType="BussCarPosition" useGeneratedKeys="true" keyProperty="id">
+        insert into buss_car_position
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="carNo != null">car_no,</if>
+            <if test="status != null">status,</if>
+            <if test="latitude != null">latitude,</if>
+            <if test="longitude != null">longitude,</if>
+            <if test="createTime != null">create_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="carNo != null">#{carNo},</if>
+            <if test="status != null">#{status},</if>
+            <if test="latitude != null">#{latitude},</if>
+            <if test="longitude != null">#{longitude},</if>
+            <if test="createTime != null">#{createTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBussCarPosition" parameterType="BussCarPosition">
+        update buss_car_position
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="carNo != null">car_no = #{carNo},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="latitude != null">latitude = #{latitude},</if>
+            <if test="longitude != null">longitude = #{longitude},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteBussCarPositionById" parameterType="Long">
+        delete from buss_car_position where id = #{id}
+    </delete>
+
+    <delete id="deleteBussCarPositionByIds" parameterType="String">
+        delete from buss_car_position where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <update id="updateBussCarPositionStatus" parameterType="String">
+        update buss_car_position set status = '1' where car_no = #{carNo} and status = '0'
+    </update>
+</mapper>