Browse Source

增加获取车辆定位的后台进程, 添加里程等信息

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

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

@@ -45,6 +45,16 @@ public class BussCarPosition extends BaseEntity {
   @Excel(name = "经度")
   private BigDecimal longitude;
 
+
+  private Double mileage;
+
+  private Double totalMileage;
+
+  private Integer travelTime;
+
+  private Double speed;
+
+
   public void setId(Long id) {
     this.id = id;
   }
@@ -85,6 +95,38 @@ public class BussCarPosition extends BaseEntity {
     return longitude;
   }
 
+  public Double getMileage() {
+    return mileage;
+  }
+
+  public void setMileage(Double mileage) {
+    this.mileage = mileage;
+  }
+
+  public Double getTotalMileage() {
+    return totalMileage;
+  }
+
+  public void setTotalMileage(Double totalMileage) {
+    this.totalMileage = totalMileage;
+  }
+
+  public Integer getTravelTime() {
+    return travelTime;
+  }
+
+  public void setTravelTime(Integer travelTime) {
+    this.travelTime = travelTime;
+  }
+
+  public Double getSpeed() {
+    return speed;
+  }
+
+  public void setSpeed(Double speed) {
+    this.speed = speed;
+  }
+
   @Override
   public String toString() {
     return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

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

@@ -60,4 +60,6 @@ public interface BussCarPositionMapper {
   public int deleteBussCarPositionByIds(Long[] ids);
 
   void updateBussCarPositionStatus(String carNo);
+
+  BussCarPosition selectBussCarPositionTodayEarliest(String carNo);
 }

+ 44 - 9
xzl-quartz/src/main/java/com/xzl/quartz/task/CarPositionTask.java

@@ -1,5 +1,6 @@
 package com.xzl.quartz.task;
 
+import com.alibaba.fastjson2.util.DateUtils;
 import com.xzl.quartz.domain.BussCarPosition;
 import com.xzl.quartz.mapper.BussCarPositionMapper;
 import com.xzl.quartz.util.ObdUtils;
@@ -10,6 +11,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.Map;
 
@@ -44,19 +48,50 @@ public class CarPositionTask {
         log.info("未获取车辆定位 ...");
         return;
       }
+
+      DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
       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.setStatus("0");
-            carPosition.setLatitude(new BigDecimal(MapUtils.getString(position, "wgsLat", "0")));
-            carPosition.setLongitude(new BigDecimal(MapUtils.getString(position, "wgsLng", "0")));
-            bussCarPositionMapper.insertBussCarPosition(carPosition);
+            // 判断当前车辆是否在线,只更新在线车辆地理位置
+            //if ("1".equals(MapUtils.getString(position, "onlineStatus"))) {
+            if (!"0".equals(MapUtils.getString(position, "onlineStatus"))) {
+              // 先将该车辆地址设置未无效
+              bussCarPositionMapper.updateBussCarPositionStatus(carNo);
+              // 保存新的地址信息
+              BussCarPosition carPosition = new BussCarPosition();
+              carPosition.setCarNo(carNo);
+              carPosition.setStatus("0");
+              carPosition.setLatitude(new BigDecimal(MapUtils.getString(position, "wgsLat", "0")));
+              carPosition.setLongitude(new BigDecimal(MapUtils.getString(position, "wgsLng", "0")));
+
+              // 获取接口返回的速度
+              carPosition.setSpeed(MapUtils.getDouble(position, "speed", 0D));
+              // 转成公里数
+              carPosition.setTotalMileage(MapUtils.getDouble(position, "mile", 0D) / 1000);
+
+              // 查询今天最早的那一条记录
+              BussCarPosition lastPosition = bussCarPositionMapper.selectBussCarPositionTodayEarliest(carNo);
+              if (lastPosition != null) {
+                LocalDateTime time1 = LocalDateTime.parse(DateUtils.format(lastPosition.getCreateTime()), dateTimeFormatter);
+                LocalDateTime time2 = LocalDateTime.now();
+                // 计算时间差
+                Duration duration = Duration.between(time1, time2);
+                long minutes = duration.toMinutes();
+                carPosition.setTravelTime((int) minutes);
+                //此时的总里程减去今天最早的那条记录的里程数
+                carPosition.setMileage(carPosition.getTotalMileage() - lastPosition.getTotalMileage());
+
+                // 如果速度为零,取平均时速  并计算当天行驶里程,在线时长,平均时速
+                long hours = duration.toHours();
+                if (hours > 0) {
+                  carPosition.setSpeed(carPosition.getMileage() / hours);
+                }
+              }
+              bussCarPositionMapper.insertBussCarPosition(carPosition);
+            }
           }
         }
       }

+ 24 - 2
xzl-quartz/src/main/java/com/xzl/quartz/util/ObdUtils.java

@@ -3,10 +3,11 @@ package com.xzl.quartz.util;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.util.DateUtils;
 import com.xzl.common.utils.http.HttpUtils;
-import org.apache.commons.collections4.MapUtils;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -55,5 +56,26 @@ public class ObdUtils {
 //    System.out.println(accessToken);
 //    List positionList = getAllPosition(accessToken);
 //    System.out.println(positionList);
+
+//    Date thisTime = DateUtils.parseDate(DateUtils.format(System.currentTimeMillis()));
+
+    Date thisTime = DateUtils.parseDate("2024-02-04 15:50:20");
+    System.out.println("thisTime : " + thisTime);
+    Date lastDate = DateUtils.parseDate("2024-02-04 10:51:10");
+//    System.out.println((int) ((System.currentTimeMillis() - lastDate.getTime()) / 6000));
+    System.out.println((int) ((thisTime.getTime() - lastDate.getTime()) / 60000));
+
+
+//    // 定义两个时间点
+//    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+//    LocalDateTime time1 = LocalDateTime.parse("2024-02-04 10:51:10", dateTimeFormatter);
+//    LocalDateTime time2 = LocalDateTime.now();
+//
+//    // 计算时间差
+//    Duration duration = Duration.between(time1, time2);
+//    long minutes = duration.toMinutes();
+//    System.out.println("两个时间相差 " + minutes + " 分钟");
+
   }
-}
+
+}

+ 25 - 2
xzl-quartz/src/main/resources/mapper/quartz/BussCarPositionMapper.xml

@@ -10,11 +10,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="status"    column="status"    />
         <result property="latitude"    column="latitude"    />
         <result property="longitude"    column="longitude"    />
+        <result property="mileage"    column="mileage"    />
+        <result property="totalMileage"    column="total_mileage"    />
+        <result property="travelTime"    column="travel_time"    />
+        <result property="speed"    column="speed"    />
         <result property="createTime"    column="create_time"    />
     </resultMap>
 
     <sql id="selectBussCarPositionVo">
-        select id, car_no, status, latitude, longitude, create_time from buss_car_position
+        select id, car_no, status, latitude, longitude, mileage, total_mileage, travel_time, speed, create_time from buss_car_position
     </sql>
 
     <select id="selectBussCarPositionList" parameterType="BussCarPosition" resultMap="BussCarPositionResult">
@@ -31,7 +35,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectBussCarPositionVo"/>
         where id = #{id}
     </select>
-        
+
+    <select id="selectBussCarPositionTodayEarliest" parameterType="String" resultMap="BussCarPositionResult">
+        <include refid="selectBussCarPositionVo"/>
+        where  car_no = #{carNo}
+        and date(create_time) = current_date
+        order by create_time asc limit 1
+    </select>
+
     <insert id="insertBussCarPosition" parameterType="BussCarPosition" useGeneratedKeys="true" keyProperty="id">
         insert into buss_car_position
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -39,6 +50,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="status != null">status,</if>
             <if test="latitude != null">latitude,</if>
             <if test="longitude != null">longitude,</if>
+            <if test="mileage != null">mileage,</if>
+            <if test="totalMileage != null">total_mileage,</if>
+            <if test="travelTime != null">travel_time,</if>
+            <if test="speed != null">speed,</if>
             <if test="createTime != null">create_time,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -46,6 +61,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="status != null">#{status},</if>
             <if test="latitude != null">#{latitude},</if>
             <if test="longitude != null">#{longitude},</if>
+            <if test="mileage != null">#{mileage},</if>
+            <if test="totalMileage != null">#{totalMileage},</if>
+            <if test="travelTime != null">#{travelTime},</if>
+            <if test="speed != null">#{speed},</if>
             <if test="createTime != null">#{createTime},</if>
          </trim>
     </insert>
@@ -57,6 +76,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="status != null">status = #{status},</if>
             <if test="latitude != null">latitude = #{latitude},</if>
             <if test="longitude != null">longitude = #{longitude},</if>
+            <if test="mileage != null">mileage=#{mileage},</if>
+            <if test="totalMileage != null">total_mileage=#{totalMileage},</if>
+            <if test="travelTime != null">travel_time=#{travelTime},</if>
+            <if test="speed != null">speed=#{speed},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
         </trim>
         where id = #{id}