Просмотр исходного кода

Merge remote-tracking branch 'origin/dev' into dev

czh 2 лет назад
Родитель
Сommit
b7c7aa63aa
39 измененных файлов с 6545 добавлено и 120 удалено
  1. 6 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java
  2. 17 4
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwLogisticsOrder.java
  3. 5 0
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwTradeOrder.java
  4. 0 2
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwWaybillOrder.java
  5. 12 2
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  6. 5 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderDetailRes.java
  7. 42 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateAssociateStatementParam.java
  8. 19 1
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportDubboService.java
  9. 33 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/LogisticsOrderParam.java
  10. 52 2
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java
  11. 5875 0
      sckw-modules/sckw-fleet/src/main/resources/GPS.json
  12. 4 0
      sckw-modules/sckw-order/pom.xml
  13. 36 7
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  14. 5 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrder.java
  15. 5 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java
  16. 8 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  17. 1 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java
  18. 1 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/dubbo/GoodsInfoServiceImpl.java
  19. 4 12
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  20. 4 2
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwAcceptCarriageService.java
  21. 15 7
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java
  22. 21 12
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwTransportService.java
  23. 5 1
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/param/WaybillOrderQuery.java
  24. 31 6
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/vo/CarWaybillVo.java
  25. 2 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java
  26. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/LogisticsConsignmentController.java
  27. 8 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  28. 25 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTrack.java
  29. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddOrderDTO.java
  30. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OperateSendCarDto.java
  31. 7 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SubcontractConsignmentDTO.java
  32. 4 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillCountVo.java
  33. 65 18
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  34. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java
  35. 46 21
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  36. 42 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  37. 106 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/dubbo/TransportDubboServiceImpl.java
  38. 25 3
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml
  39. 4 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

+ 6 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderEnum.java

@@ -46,7 +46,12 @@ public enum LogisticsOrderEnum {
     /**
      * 物流订单-已退回
      */
-    SEND_BACK(7, "sendBack", "7", "已退回");
+    SEND_BACK(7, "sendBack", "7", "已退回"),
+
+    REJECT_ORDER(8, "rejectOrder", "8", "已拒单"),
+
+    CANCEL_ORDER(9, "cancelOrder", "9", "已撤销"),
+    ;
 
     private final Integer code;
     private final String value;

+ 17 - 4
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwLogisticsOrder.java

@@ -174,12 +174,12 @@ public class SckwLogisticsOrder {
     /**
      * 总亏吨量(自己承运总亏吨量+分包承运总亏吨量)
      */
-    private BigDecimal deficitTotalAmount;
+    private BigDecimal totalDeficitAmount;
 
     /**
      * 总亏吨扣款(自己承运总亏吨扣款+分包承运总亏吨扣款)
      */
-    private BigDecimal deficitTotalPrice;
+    private BigDecimal totalDeficitPrice;
 
     /**
      * 付款方式(预付款、线下支付、第三方支付)
@@ -399,7 +399,7 @@ public class SckwLogisticsOrder {
      * 创建时间
      */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     /**
@@ -416,7 +416,7 @@ public class SckwLogisticsOrder {
      * 更新时间
      */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     /**
@@ -442,4 +442,17 @@ public class SckwLogisticsOrder {
      * 计费方式
      */
     private String billingModeLabel;
+    /**
+     * 计划开始时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+    /**
+     * 计划结束时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
 }

+ 5 - 0
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwTradeOrder.java

@@ -97,6 +97,11 @@ public class SckwTradeOrder {
      */
     private BigDecimal actualAmount;
 
+    /**
+     * 是否关联对账单:0未关联,1已关联
+     */
+    private Integer associateStatement;
+
     /**
      * 订单创建来源类型(1采购下单/2销售代客下单)
      */

+ 0 - 2
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwWaybillOrder.java

@@ -1,13 +1,11 @@
 package com.sckw.mongo.model;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.Document;
-import org.springframework.data.mongodb.core.mapping.Field;
 
 import java.math.BigDecimal;
 import java.util.Date;

+ 12 - 2
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -24,9 +24,9 @@ public interface TradeOrderInfoService {
      * @author: yzc
      * @date: 2023-07-18 18:31
      * @Param param:
-     * @return: com.sckw.core.web.response.HttpResult
+     * @return: void
      */
-    HttpResult updateOrderStatus(UpdateOrderStatusParam param);
+    void updateOrderStatus(UpdateOrderStatusParam param);
 
     /**
      * @desc: 废弃
@@ -46,6 +46,7 @@ public interface TradeOrderInfoService {
      * @return: com.sckw.core.web.response.HttpResult
      */
     HttpResult createOrCancelLogisticsOrder(CreateOrCancelLogisticsOrderParam param);
+
     /**
      * @desc: 完结物流订单
      * @author: yzc
@@ -63,4 +64,13 @@ public interface TradeOrderInfoService {
      * @return: void
      */
     void contractSignCompleted(ContractSignCompletedParam param);
+
+    /**
+     * @desc: 更新订单是否关联对账单
+     * @author: yzc
+     * @date: 2023-08-09 14:24
+     * @Param param:
+     * @return: void
+     */
+    void updateAssociateStatement(UpdateAssociateStatementParam param);
 }

+ 5 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderDetailRes.java

@@ -107,6 +107,11 @@ public class OrderDetailRes implements Serializable {
      */
     private BigDecimal actualAmount;
 
+    /**
+     * 是否关联对账单:0未关联,1已关联
+     */
+    private Integer associateStatement;
+
     /**
      * 订单创建来源类型(1采购下单/2销售代客下单)
      */

+ 42 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/UpdateAssociateStatementParam.java

@@ -0,0 +1,42 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 更新订单是否关联对账单
+ * @author: yzc
+ * @date: 2023-08-09 14:34
+ */
+@Getter
+@Setter
+@ToString
+public class UpdateAssociateStatementParam implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6909518527687999256L;
+
+    /**
+     * 订单id
+     */
+    private Long tOrderId;
+
+    /**
+     * 是否关联对账单:0未关联,1已关联
+     */
+    private Integer associateStatement;
+
+    /**
+     * 更新用户id 需传,订单状态变化记录需要
+     */
+    private Long updateBy;
+
+    /**
+     * 更新者姓名 需传,订单状态变化记录需要
+     */
+    private String updateByName;
+}

+ 19 - 1
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportDubboService.java

@@ -1,8 +1,10 @@
 package com.sckw.transport.api.dubbo;
 
+import com.sckw.core.web.response.HttpResult;
 import com.sckw.transport.api.model.dto.AddressResDTO;
 import com.sckw.transport.api.model.dto.vo.KwtLogisticsOrderVO;
 import com.sckw.transport.api.model.dto.vo.LogisticsOrderVO;
+import com.sckw.transport.api.model.param.LogisticsOrderParam;
 
 import java.util.List;
 import java.util.Map;
@@ -48,11 +50,27 @@ public interface TransportDubboService {
      */
     List<AddressResDTO> getLogisticsOrderAddressListByEntId(Long entId);
 
+    /**
+     * 贸易订单验证物流订单是否已完成
+     *
+     * @param tOrderId 贸易订单id
+     * @return
+     */
+    boolean checkLogisticsOrderByTradeOrderId(Long tOrderId);
+
+    /**
+     * 对账修改物流订单信息
+     *
+     * @param logisticsOrderParam 请求物流订单数据
+     * @return
+     */
+    HttpResult checkLogisticsOrderStatusById(LogisticsOrderParam logisticsOrderParam);
+
     /**
      * 根据企业id获取物流订单地址信息
      *
      * @param entIds 企业id
      * @return
      */
-    Map<Long,List<AddressResDTO>> getLogisticsOrderAddressListByEntId(List<Long> entIds);
+    Map<Long, List<AddressResDTO>> getLogisticsOrderAddressListByEntId(List<Long> entIds);
 }

+ 33 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/LogisticsOrderParam.java

@@ -0,0 +1,33 @@
+package com.sckw.transport.api.model.param;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lfdc
+ * @description dubbo调用物流订单请求参数
+ * @date 2023-08-09 09:08:10
+ */
+@Data
+public class LogisticsOrderParam {
+    /**
+     * 物流订单id
+     */
+    private Long lOrderId;
+
+    /**
+     * 要修改成的单据状态
+     */
+    private String status;
+
+    /**
+     * 修改人
+     */
+    private Long updateBy;
+
+    /**
+     * 修改时间
+     */
+    private Date updateTime;
+}

+ 52 - 2
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java

@@ -2,6 +2,7 @@ package com.sckw.fleet.controller;
 
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -30,6 +31,11 @@ import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.util.*;
 
 /**
@@ -313,7 +319,7 @@ public class KwfTruckController {
     public HttpResult findGpsByTruckNo(@RequestBody @Valid GpsByTruckNoDto params) {
         Long hours = (params.getEndTime().getTime() - params.getStartTime().getTime()) /1000/60;
         List data = new ArrayList();
-        data.add(new HashMap(){{put("truckNo", params.getTruckNo()); put("speed", 95.0);
+        /*data.add(new HashMap(){{put("truckNo", params.getTruckNo()); put("speed", 95.0);
             put("lng", "103.53"); put("lat", "29.48");
             put("gpsTime", DateUtils.format(params.getStartTime(), DateUtils.DATE_TIME_PATTERN));}});
         for (long i=0; i<hours; i++) {
@@ -330,10 +336,52 @@ public class KwfTruckController {
         }
         data.add(new HashMap(){{put("truckNo", params.getTruckNo()); put("speed", 95.0);
             put("lat", "29.48"); put("lng", "103.53");
-            put("gpsTime", DateUtils.format(params.getEndTime(), DateUtils.DATE_TIME_PATTERN));}});
+            put("gpsTime", DateUtils.format(params.getEndTime(), DateUtils.DATE_TIME_PATTERN));}});*/
+        String str = new KwfTruckController().ReadFile();
+        JSONArray array = JSON.parseArray(str);
+        for (int i=0; i<array.size(); i++) {
+            int aaa = new Random().nextInt(10) / 3;
+            int bbb = new Random().nextInt(10) / 4;
+            JSONObject obj = array.getJSONObject(i);
+            obj.put("truckNo", params.getTruckNo());
+            obj.put("businessStatus", aaa == 0 ? 0 : 1);
+            obj.put("runStatus", bbb == 0 ? 0 : bbb == 1 ? 1 : 2);
+            data.add(obj);
+        }
         return HttpResult.ok(data);
     }
 
+    /**
+     * @description 获取JSON文件数据(暂时使用)
+     * @author zk
+     * @date 2023/8/2
+     **/
+    public String ReadFile(){
+        BufferedReader reader = null;
+        String laststr = "";
+        try{
+            InputStream fileInputStream = getClass().getClassLoader().getResourceAsStream("GPS.json");
+            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
+            reader = new BufferedReader(inputStreamReader);
+            String tempString = null;
+            while((tempString = reader.readLine()) != null){
+                laststr += tempString;
+            }
+            reader.close();
+        }catch(IOException e){
+            e.printStackTrace();
+        }finally{
+            if(reader != null){
+                try {
+                    reader.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return laststr;
+    }
+
     /**
      * @param truckNo 车牌号
      * @description 车牌号查询车辆关联数据
@@ -354,4 +402,6 @@ public class KwfTruckController {
         detail.put("gpsTime", DateUtils.getCurrentTime());
         return HttpResult.ok(detail);
     }
+
+
 }

+ 5875 - 0
sckw-modules/sckw-fleet/src/main/resources/GPS.json

@@ -0,0 +1,5875 @@
+[
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:17:00",
+        "lng":"103.529215",
+        "lat":"29.598022",
+        "speed":"13.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:18:00",
+        "lng":"103.529503",
+        "lat":"29.597357",
+        "speed":"18.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:19:00",
+        "lng":"103.534887",
+        "lat":"29.598283",
+        "speed":"34.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:19:00",
+        "lng":"103.534887",
+        "lat":"29.598283",
+        "speed":"34.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:20:00",
+        "lng":"103.536687",
+        "lat":"29.59563",
+        "speed":"37.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:20:00",
+        "lng":"103.536687",
+        "lat":"29.59563",
+        "speed":"37.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:21:00",
+        "lng":"103.538087",
+        "lat":"29.589427",
+        "speed":"39.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:21:00",
+        "lng":"103.538087",
+        "lat":"29.589427",
+        "speed":"39.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:22:00",
+        "lng":"103.539335",
+        "lat":"29.583812",
+        "speed":"43.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:22:00",
+        "lng":"103.539335",
+        "lat":"29.583812",
+        "speed":"43.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:23:00",
+        "lng":"103.54052",
+        "lat":"29.57829",
+        "speed":"35.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:23:00",
+        "lng":"103.54052",
+        "lat":"29.57829",
+        "speed":"35.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:24:00",
+        "lng":"103.53496",
+        "lat":"29.574343",
+        "speed":"51.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:24:00",
+        "lng":"103.53496",
+        "lat":"29.574343",
+        "speed":"51.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:25:00",
+        "lng":"103.527495",
+        "lat":"29.570587",
+        "speed":"56.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:25:00",
+        "lng":"103.527495",
+        "lat":"29.570587",
+        "speed":"56.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:26:00",
+        "lng":"103.518592",
+        "lat":"29.568162",
+        "speed":"50.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:26:00",
+        "lng":"103.518592",
+        "lat":"29.568162",
+        "speed":"50.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:27:00",
+        "lng":"103.509847",
+        "lat":"29.567312",
+        "speed":"52.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:27:00",
+        "lng":"103.509847",
+        "lat":"29.567312",
+        "speed":"52.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:28:00",
+        "lng":"103.501567",
+        "lat":"29.565165",
+        "speed":"51.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:28:00",
+        "lng":"103.501567",
+        "lat":"29.565165",
+        "speed":"51.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:29:00",
+        "lng":"103.495423",
+        "lat":"29.562627",
+        "speed":"6.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:29:00",
+        "lng":"103.495423",
+        "lat":"29.562627",
+        "speed":"6.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:30:00",
+        "lng":"103.495175",
+        "lat":"29.56034",
+        "speed":"36.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:30:00",
+        "lng":"103.495175",
+        "lat":"29.56034",
+        "speed":"36.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:31:00",
+        "lng":"103.497952",
+        "lat":"29.554387",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:31:00",
+        "lng":"103.497952",
+        "lat":"29.554387",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:32:00",
+        "lng":"103.499535",
+        "lat":"29.548017",
+        "speed":"44.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:32:00",
+        "lng":"103.499535",
+        "lat":"29.548017",
+        "speed":"44.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:33:00",
+        "lng":"103.500432",
+        "lat":"29.542667",
+        "speed":"34.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:33:00",
+        "lng":"103.500432",
+        "lat":"29.542667",
+        "speed":"34.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:34:00",
+        "lng":"103.501263",
+        "lat":"29.536777",
+        "speed":"45.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:34:00",
+        "lng":"103.501263",
+        "lat":"29.536777",
+        "speed":"45.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:35:00",
+        "lng":"103.503552",
+        "lat":"29.53061",
+        "speed":"49.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:35:00",
+        "lng":"103.503552",
+        "lat":"29.53061",
+        "speed":"49.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:36:00",
+        "lng":"103.505375",
+        "lat":"29.524183",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:36:00",
+        "lng":"103.505375",
+        "lat":"29.524183",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:37:00",
+        "lng":"103.504935",
+        "lat":"29.517167",
+        "speed":"49.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:37:00",
+        "lng":"103.504935",
+        "lat":"29.517167",
+        "speed":"49.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:38:00",
+        "lng":"103.503735",
+        "lat":"29.51203",
+        "speed":"36.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:38:00",
+        "lng":"103.503735",
+        "lat":"29.51203",
+        "speed":"36.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:39:00",
+        "lng":"103.5022",
+        "lat":"29.50554",
+        "speed":"43.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:39:00",
+        "lng":"103.5022",
+        "lat":"29.50554",
+        "speed":"43.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:40:00",
+        "lng":"103.501672",
+        "lat":"29.500943",
+        "speed":"33.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:40:00",
+        "lng":"103.501672",
+        "lat":"29.500943",
+        "speed":"33.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:41:00",
+        "lng":"103.507887",
+        "lat":"29.497282",
+        "speed":"42.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:41:00",
+        "lng":"103.507887",
+        "lat":"29.497282",
+        "speed":"42.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:42:00",
+        "lng":"103.514472",
+        "lat":"29.491962",
+        "speed":"56.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:42:00",
+        "lng":"103.514472",
+        "lat":"29.491962",
+        "speed":"56.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:43:00",
+        "lng":"103.520375",
+        "lat":"29.487093",
+        "speed":"44.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:43:00",
+        "lng":"103.520375",
+        "lat":"29.487093",
+        "speed":"44.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:44:00",
+        "lng":"103.526615",
+        "lat":"29.484393",
+        "speed":"49.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:44:00",
+        "lng":"103.526615",
+        "lat":"29.484393",
+        "speed":"49.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:45:00",
+        "lng":"103.528247",
+        "lat":"29.479815",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:45:00",
+        "lng":"103.528247",
+        "lat":"29.479815",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:46:00",
+        "lng":"103.527832",
+        "lat":"29.479295",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:46:00",
+        "lng":"103.527832",
+        "lat":"29.479295",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:47:00",
+        "lng":"103.528127",
+        "lat":"29.478175",
+        "speed":"27.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:47:00",
+        "lng":"103.528127",
+        "lat":"29.478175",
+        "speed":"27.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:48:00",
+        "lng":"103.529407",
+        "lat":"29.477105",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:48:00",
+        "lng":"103.529407",
+        "lat":"29.477105",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:49:00",
+        "lng":"103.529495",
+        "lat":"29.477003",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:49:00",
+        "lng":"103.529495",
+        "lat":"29.477003",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:50:00",
+        "lng":"103.529263",
+        "lat":"29.476872",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:50:00",
+        "lng":"103.529263",
+        "lat":"29.476872",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:51:00",
+        "lng":"103.529367",
+        "lat":"29.47691",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:51:00",
+        "lng":"103.529367",
+        "lat":"29.47691",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:52:00",
+        "lng":"103.529367",
+        "lat":"29.47691",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:52:00",
+        "lng":"103.529367",
+        "lat":"29.47691",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:53:00",
+        "lng":"103.529367",
+        "lat":"29.47691",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:53:00",
+        "lng":"103.529367",
+        "lat":"29.47691",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:54:00",
+        "lng":"103.529367",
+        "lat":"29.47691",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:54:00",
+        "lng":"103.529367",
+        "lat":"29.47691",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:55:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:55:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:56:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:56:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:57:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:57:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:58:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:58:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:59:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-21 23:59:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 00:00:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 00:00:00",
+        "lng":"103.52936",
+        "lat":"29.476963",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 00:01:00",
+        "lng":"103.528815",
+        "lat":"29.477813",
+        "speed":"21.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 00:01:00",
+        "lng":"103.528815",
+        "lat":"29.477813",
+        "speed":"21.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 00:02:00",
+        "lng":"103.527983",
+        "lat":"29.47927",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 00:02:00",
+        "lng":"103.527983",
+        "lat":"29.47927",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 00:03:00",
+        "lng":"103.528167",
+        "lat":"29.479462",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 00:03:00",
+        "lng":"103.528167",
+        "lat":"29.479462",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:17:00",
+        "lng":"103.727783",
+        "lat":"29.605133",
+        "speed":"9.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:18:00",
+        "lng":"103.724903",
+        "lat":"29.601615",
+        "speed":"18.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:19:00",
+        "lng":"103.724855",
+        "lat":"29.601535",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:20:00",
+        "lng":"103.723952",
+        "lat":"29.60034",
+        "speed":"38.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:20:00",
+        "lng":"103.723952",
+        "lat":"29.60034",
+        "speed":"38.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:21:00",
+        "lng":"103.720183",
+        "lat":"29.594877",
+        "speed":"48.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:21:00",
+        "lng":"103.720183",
+        "lat":"29.594877",
+        "speed":"48.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:22:00",
+        "lng":"103.71352",
+        "lat":"29.59054",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:22:00",
+        "lng":"103.71352",
+        "lat":"29.59054",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:23:00",
+        "lng":"103.712463",
+        "lat":"29.590023",
+        "speed":"11.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:23:00",
+        "lng":"103.712463",
+        "lat":"29.590023",
+        "speed":"11.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:24:00",
+        "lng":"103.7064",
+        "lat":"29.587127",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:24:00",
+        "lng":"103.7064",
+        "lat":"29.587127",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:25:00",
+        "lng":"103.700152",
+        "lat":"29.58817",
+        "speed":"42.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:25:00",
+        "lng":"103.700152",
+        "lat":"29.58817",
+        "speed":"42.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:26:00",
+        "lng":"103.693903",
+        "lat":"29.591357",
+        "speed":"33.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:26:00",
+        "lng":"103.693903",
+        "lat":"29.591357",
+        "speed":"33.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:27:00",
+        "lng":"103.687152",
+        "lat":"29.591167",
+        "speed":"16.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:27:00",
+        "lng":"103.687152",
+        "lat":"29.591167",
+        "speed":"16.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:28:00",
+        "lng":"103.684712",
+        "lat":"29.59107",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:28:00",
+        "lng":"103.684712",
+        "lat":"29.59107",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:29:00",
+        "lng":"103.683312",
+        "lat":"29.591035",
+        "speed":"32.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:29:00",
+        "lng":"103.683312",
+        "lat":"29.591035",
+        "speed":"32.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:30:00",
+        "lng":"103.676192",
+        "lat":"29.590825",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:30:00",
+        "lng":"103.676192",
+        "lat":"29.590825",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:31:00",
+        "lng":"103.66868",
+        "lat":"29.58985",
+        "speed":"51.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:31:00",
+        "lng":"103.66868",
+        "lat":"29.58985",
+        "speed":"51.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:32:00",
+        "lng":"103.6666",
+        "lat":"29.587535",
+        "speed":"37.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:32:00",
+        "lng":"103.6666",
+        "lat":"29.587535",
+        "speed":"37.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:33:00",
+        "lng":"103.668295",
+        "lat":"29.581112",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:33:00",
+        "lng":"103.668295",
+        "lat":"29.581112",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:34:00",
+        "lng":"103.67112",
+        "lat":"29.576083",
+        "speed":"6.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:34:00",
+        "lng":"103.67112",
+        "lat":"29.576083",
+        "speed":"6.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:35:00",
+        "lng":"103.674127",
+        "lat":"29.571525",
+        "speed":"53.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:35:00",
+        "lng":"103.674127",
+        "lat":"29.571525",
+        "speed":"53.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:36:00",
+        "lng":"103.675887",
+        "lat":"29.563943",
+        "speed":"56.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:36:00",
+        "lng":"103.675887",
+        "lat":"29.563943",
+        "speed":"56.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:37:00",
+        "lng":"103.672095",
+        "lat":"29.55695",
+        "speed":"17.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:37:00",
+        "lng":"103.672095",
+        "lat":"29.55695",
+        "speed":"17.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:38:00",
+        "lng":"103.669903",
+        "lat":"29.551735",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:38:00",
+        "lng":"103.669903",
+        "lat":"29.551735",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:39:00",
+        "lng":"103.664607",
+        "lat":"29.546187",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:39:00",
+        "lng":"103.664607",
+        "lat":"29.546187",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:40:00",
+        "lng":"103.661",
+        "lat":"29.542575",
+        "speed":"51.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:40:00",
+        "lng":"103.661",
+        "lat":"29.542575",
+        "speed":"51.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:41:00",
+        "lng":"103.652623",
+        "lat":"29.535802",
+        "speed":"58.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:41:00",
+        "lng":"103.652623",
+        "lat":"29.535802",
+        "speed":"58.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:42:00",
+        "lng":"103.645015",
+        "lat":"29.529555",
+        "speed":"58.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:42:00",
+        "lng":"103.645015",
+        "lat":"29.529555",
+        "speed":"58.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:43:00",
+        "lng":"103.637847",
+        "lat":"29.523452",
+        "speed":"57.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:43:00",
+        "lng":"103.637847",
+        "lat":"29.523452",
+        "speed":"57.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:44:00",
+        "lng":"103.631303",
+        "lat":"29.517025",
+        "speed":"53.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:44:00",
+        "lng":"103.631303",
+        "lat":"29.517025",
+        "speed":"53.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:45:00",
+        "lng":"103.624752",
+        "lat":"29.51112",
+        "speed":"50.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:45:00",
+        "lng":"103.624752",
+        "lat":"29.51112",
+        "speed":"50.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:46:00",
+        "lng":"103.618272",
+        "lat":"29.505015",
+        "speed":"56.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:46:00",
+        "lng":"103.618272",
+        "lat":"29.505015",
+        "speed":"56.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:47:00",
+        "lng":"103.612415",
+        "lat":"29.498723",
+        "speed":"29.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:47:00",
+        "lng":"103.612415",
+        "lat":"29.498723",
+        "speed":"29.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:48:00",
+        "lng":"103.606855",
+        "lat":"29.494267",
+        "speed":"54.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:48:00",
+        "lng":"103.606855",
+        "lat":"29.494267",
+        "speed":"54.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:49:00",
+        "lng":"103.599855",
+        "lat":"29.488127",
+        "speed":"58.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:49:00",
+        "lng":"103.599855",
+        "lat":"29.488127",
+        "speed":"58.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:50:00",
+        "lng":"103.594855",
+        "lat":"29.48451",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:50:00",
+        "lng":"103.594855",
+        "lat":"29.48451",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:51:00",
+        "lng":"103.594695",
+        "lat":"29.484387",
+        "speed":"11.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:51:00",
+        "lng":"103.594695",
+        "lat":"29.484387",
+        "speed":"11.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:52:01",
+        "lng":"103.589543",
+        "lat":"29.479877",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:52:01",
+        "lng":"103.589543",
+        "lat":"29.479877",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:53:00",
+        "lng":"103.582847",
+        "lat":"29.473955",
+        "speed":"58.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:53:00",
+        "lng":"103.582847",
+        "lat":"29.473955",
+        "speed":"58.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:54:00",
+        "lng":"103.574032",
+        "lat":"29.470697",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:54:00",
+        "lng":"103.574032",
+        "lat":"29.470697",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:55:00",
+        "lng":"103.569992",
+        "lat":"29.463547",
+        "speed":"53.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:55:00",
+        "lng":"103.569992",
+        "lat":"29.463547",
+        "speed":"53.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:56:00",
+        "lng":"103.565975",
+        "lat":"29.456535",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:56:00",
+        "lng":"103.565975",
+        "lat":"29.456535",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:57:00",
+        "lng":"103.560103",
+        "lat":"29.451117",
+        "speed":"45.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:57:00",
+        "lng":"103.560103",
+        "lat":"29.451117",
+        "speed":"45.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:58:00",
+        "lng":"103.556607",
+        "lat":"29.44963",
+        "speed":"34.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:58:00",
+        "lng":"103.556607",
+        "lat":"29.44963",
+        "speed":"34.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:59:00",
+        "lng":"103.554952",
+        "lat":"29.45609",
+        "speed":"52.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 04:59:00",
+        "lng":"103.554952",
+        "lat":"29.45609",
+        "speed":"52.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:00:00",
+        "lng":"103.549015",
+        "lat":"29.46088",
+        "speed":"42.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:00:00",
+        "lng":"103.549015",
+        "lat":"29.46088",
+        "speed":"42.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:01:01",
+        "lng":"103.543392",
+        "lat":"29.463073",
+        "speed":"33.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:01:01",
+        "lng":"103.543392",
+        "lat":"29.463073",
+        "speed":"33.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:02:00",
+        "lng":"103.537055",
+        "lat":"29.464472",
+        "speed":"50.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:02:00",
+        "lng":"103.537055",
+        "lat":"29.464472",
+        "speed":"50.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:03:00",
+        "lng":"103.532992",
+        "lat":"29.47211",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:03:00",
+        "lng":"103.532992",
+        "lat":"29.47211",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:04:00",
+        "lng":"103.5308",
+        "lat":"29.478225",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:04:00",
+        "lng":"103.5308",
+        "lat":"29.478225",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:05:00",
+        "lng":"103.527815",
+        "lat":"29.479303",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:05:00",
+        "lng":"103.527815",
+        "lat":"29.479303",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:06:00",
+        "lng":"103.528247",
+        "lat":"29.47812",
+        "speed":"30.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:06:00",
+        "lng":"103.528247",
+        "lat":"29.47812",
+        "speed":"30.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:07:00",
+        "lng":"103.528735",
+        "lat":"29.47781",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:07:00",
+        "lng":"103.528735",
+        "lat":"29.47781",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:08:00",
+        "lng":"103.528775",
+        "lat":"29.47777",
+        "speed":"7.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:08:00",
+        "lng":"103.528775",
+        "lat":"29.47777",
+        "speed":"7.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:09:00",
+        "lng":"103.528903",
+        "lat":"29.477662",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:09:00",
+        "lng":"103.528903",
+        "lat":"29.477662",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:10:01",
+        "lng":"103.528903",
+        "lat":"29.477662",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:10:01",
+        "lng":"103.528903",
+        "lat":"29.477662",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:11:01",
+        "lng":"103.529063",
+        "lat":"29.47751",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:11:01",
+        "lng":"103.529063",
+        "lat":"29.47751",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:12:00",
+        "lng":"103.529063",
+        "lat":"29.47751",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:12:00",
+        "lng":"103.529063",
+        "lat":"29.47751",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:13:00",
+        "lng":"103.529263",
+        "lat":"29.477293",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:13:00",
+        "lng":"103.529263",
+        "lat":"29.477293",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:14:00",
+        "lng":"103.529263",
+        "lat":"29.477293",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:14:00",
+        "lng":"103.529263",
+        "lat":"29.477293",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:15:01",
+        "lng":"103.529263",
+        "lat":"29.477293",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:16:01",
+        "lng":"103.52952",
+        "lat":"29.476972",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:16:01",
+        "lng":"103.52952",
+        "lat":"29.476972",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:17:00",
+        "lng":"103.52952",
+        "lat":"29.476972",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:17:00",
+        "lng":"103.52952",
+        "lat":"29.476972",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:18:01",
+        "lng":"103.52952",
+        "lat":"29.476972",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:18:01",
+        "lng":"103.52952",
+        "lat":"29.476972",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:19:00",
+        "lng":"103.52952",
+        "lat":"29.476972",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:19:00",
+        "lng":"103.52952",
+        "lat":"29.476972",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:20:00",
+        "lng":"103.52952",
+        "lat":"29.476972",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:20:00",
+        "lng":"103.52952",
+        "lat":"29.476972",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:22:00",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:22:00",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:23:01",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:23:01",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:24:00",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:24:00",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:25:00",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:25:00",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:26:00",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:26:00",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:27:00",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:27:00",
+        "lng":"103.529367",
+        "lat":"29.47692",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:28:00",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:28:00",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:29:00",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:29:00",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:30:01",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:30:01",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:31:01",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:31:01",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:32:01",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:32:01",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:33:00",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:33:00",
+        "lng":"103.529415",
+        "lat":"29.477113",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:44:00",
+        "lng":"103.529832",
+        "lat":"29.476727",
+        "speed":"6.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:44:00",
+        "lng":"103.529832",
+        "lat":"29.476727",
+        "speed":"6.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:45:00",
+        "lng":"103.529375",
+        "lat":"29.477205",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:45:00",
+        "lng":"103.529375",
+        "lat":"29.477205",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:46:01",
+        "lng":"103.528015",
+        "lat":"29.478305",
+        "speed":"11.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:46:01",
+        "lng":"103.528015",
+        "lat":"29.478305",
+        "speed":"11.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:47:00",
+        "lng":"103.527992",
+        "lat":"29.479313",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 05:47:00",
+        "lng":"103.527992",
+        "lat":"29.479313",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:47:01",
+        "lng":"103.542767",
+        "lat":"29.423767",
+        "speed":"22.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:48:01",
+        "lng":"103.546415",
+        "lat":"29.422837",
+        "speed":"13.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:49:01",
+        "lng":"103.547943",
+        "lat":"29.426847",
+        "speed":"33.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:50:01",
+        "lng":"103.549575",
+        "lat":"29.431833",
+        "speed":"35.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:51:01",
+        "lng":"103.550463",
+        "lat":"29.433612",
+        "speed":"32.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:51:01",
+        "lng":"103.550463",
+        "lat":"29.433612",
+        "speed":"32.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:52:01",
+        "lng":"103.551632",
+        "lat":"29.438552",
+        "speed":"31.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:52:01",
+        "lng":"103.551632",
+        "lat":"29.438552",
+        "speed":"31.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:53:01",
+        "lng":"103.554255",
+        "lat":"29.442615",
+        "speed":"17.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:53:01",
+        "lng":"103.554255",
+        "lat":"29.442615",
+        "speed":"17.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:54:01",
+        "lng":"103.554575",
+        "lat":"29.443243",
+        "speed":"20.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:54:01",
+        "lng":"103.554575",
+        "lat":"29.443243",
+        "speed":"20.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:55:01",
+        "lng":"103.556432",
+        "lat":"29.448265",
+        "speed":"34.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:55:01",
+        "lng":"103.556432",
+        "lat":"29.448265",
+        "speed":"34.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:56:01",
+        "lng":"103.556512",
+        "lat":"29.45377",
+        "speed":"40.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:56:01",
+        "lng":"103.556512",
+        "lat":"29.45377",
+        "speed":"40.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:57:01",
+        "lng":"103.553055",
+        "lat":"29.459262",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:57:01",
+        "lng":"103.553055",
+        "lat":"29.459262",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:58:01",
+        "lng":"103.546495",
+        "lat":"29.46129",
+        "speed":"34.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:58:01",
+        "lng":"103.546495",
+        "lat":"29.46129",
+        "speed":"34.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:59:01",
+        "lng":"103.540015",
+        "lat":"29.463643",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 09:59:01",
+        "lng":"103.540015",
+        "lat":"29.463643",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:00:01",
+        "lng":"103.53508",
+        "lat":"29.467687",
+        "speed":"45.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:00:01",
+        "lng":"103.53508",
+        "lat":"29.467687",
+        "speed":"45.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:01:01",
+        "lng":"103.532703",
+        "lat":"29.474645",
+        "speed":"52.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:01:01",
+        "lng":"103.532703",
+        "lat":"29.474645",
+        "speed":"52.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:02:01",
+        "lng":"103.528752",
+        "lat":"29.479913",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:02:01",
+        "lng":"103.528752",
+        "lat":"29.479913",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:03:02",
+        "lng":"103.525303",
+        "lat":"29.485187",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:03:02",
+        "lng":"103.525303",
+        "lat":"29.485187",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:04:01",
+        "lng":"103.519327",
+        "lat":"29.488427",
+        "speed":"39.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:04:01",
+        "lng":"103.519327",
+        "lat":"29.488427",
+        "speed":"39.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:05:01",
+        "lng":"103.513535",
+        "lat":"29.49298",
+        "speed":"53.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:05:01",
+        "lng":"103.513535",
+        "lat":"29.49298",
+        "speed":"53.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:06:01",
+        "lng":"103.507503",
+        "lat":"29.497695",
+        "speed":"27.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:06:01",
+        "lng":"103.507503",
+        "lat":"29.497695",
+        "speed":"27.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:07:01",
+        "lng":"103.50256",
+        "lat":"29.500477",
+        "speed":"28.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:07:01",
+        "lng":"103.50256",
+        "lat":"29.500477",
+        "speed":"28.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:08:01",
+        "lng":"103.501752",
+        "lat":"29.503725",
+        "speed":"38.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:08:01",
+        "lng":"103.501752",
+        "lat":"29.503725",
+        "speed":"38.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:09:01",
+        "lng":"103.503127",
+        "lat":"29.50961",
+        "speed":"44.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:09:01",
+        "lng":"103.503127",
+        "lat":"29.50961",
+        "speed":"44.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:10:01",
+        "lng":"103.50428",
+        "lat":"29.514397",
+        "speed":"30.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:10:01",
+        "lng":"103.50428",
+        "lat":"29.514397",
+        "speed":"30.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:11:01",
+        "lng":"103.50544",
+        "lat":"29.520232",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:11:01",
+        "lng":"103.50544",
+        "lat":"29.520232",
+        "speed":"41.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:12:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:12:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:13:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:13:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:14:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:14:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:15:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:15:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:16:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:16:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:17:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:17:01",
+        "lng":"103.50508",
+        "lat":"29.526043",
+        "speed":"26.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:18:01",
+        "lng":"103.505087",
+        "lat":"29.52656",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:18:01",
+        "lng":"103.505087",
+        "lat":"29.52656",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:19:01",
+        "lng":"103.503887",
+        "lat":"29.530113",
+        "speed":"42.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:19:01",
+        "lng":"103.503887",
+        "lat":"29.530113",
+        "speed":"42.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:20:01",
+        "lng":"103.501695",
+        "lat":"29.535365",
+        "speed":"47.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:20:01",
+        "lng":"103.501695",
+        "lat":"29.535365",
+        "speed":"47.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:21:01",
+        "lng":"103.500552",
+        "lat":"29.542403",
+        "speed":"45.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:21:01",
+        "lng":"103.500552",
+        "lat":"29.542403",
+        "speed":"45.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:22:01",
+        "lng":"103.499407",
+        "lat":"29.549157",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:22:01",
+        "lng":"103.499407",
+        "lat":"29.549157",
+        "speed":"46.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:23:01",
+        "lng":"103.497783",
+        "lat":"29.555082",
+        "speed":"40.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:23:01",
+        "lng":"103.497783",
+        "lat":"29.555082",
+        "speed":"40.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:24:01",
+        "lng":"103.495352",
+        "lat":"29.560315",
+        "speed":"19.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:24:01",
+        "lng":"103.495352",
+        "lat":"29.560315",
+        "speed":"19.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:25:01",
+        "lng":"103.497743",
+        "lat":"29.563605",
+        "speed":"47.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:25:01",
+        "lng":"103.497743",
+        "lat":"29.563605",
+        "speed":"47.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:26:01",
+        "lng":"103.505447",
+        "lat":"29.566515",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:26:01",
+        "lng":"103.505447",
+        "lat":"29.566515",
+        "speed":"55.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:27:01",
+        "lng":"103.514527",
+        "lat":"29.567802",
+        "speed":"54.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:27:01",
+        "lng":"103.514527",
+        "lat":"29.567802",
+        "speed":"54.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:28:01",
+        "lng":"103.523832",
+        "lat":"29.56908",
+        "speed":"58.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:28:01",
+        "lng":"103.523832",
+        "lat":"29.56908",
+        "speed":"58.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:29:01",
+        "lng":"103.53144",
+        "lat":"29.572565",
+        "speed":"49.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:29:01",
+        "lng":"103.53144",
+        "lat":"29.572565",
+        "speed":"49.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:30:01",
+        "lng":"103.538952",
+        "lat":"29.57636",
+        "speed":"47.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:30:01",
+        "lng":"103.538952",
+        "lat":"29.57636",
+        "speed":"47.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:31:01",
+        "lng":"103.54072",
+        "lat":"29.57725",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:31:01",
+        "lng":"103.54072",
+        "lat":"29.57725",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:32:01",
+        "lng":"103.539703",
+        "lat":"29.582363",
+        "speed":"44.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:32:01",
+        "lng":"103.539703",
+        "lat":"29.582363",
+        "speed":"44.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:33:01",
+        "lng":"103.538272",
+        "lat":"29.588817",
+        "speed":"43.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:33:01",
+        "lng":"103.538272",
+        "lat":"29.588817",
+        "speed":"43.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:34:01",
+        "lng":"103.536743",
+        "lat":"29.595897",
+        "speed":"45.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:34:01",
+        "lng":"103.536743",
+        "lat":"29.595897",
+        "speed":"45.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:35:01",
+        "lng":"103.535303",
+        "lat":"29.598545",
+        "speed":"37.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:35:01",
+        "lng":"103.535303",
+        "lat":"29.598545",
+        "speed":"37.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:36:01",
+        "lng":"103.529335",
+        "lat":"29.598207",
+        "speed":"40.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:36:01",
+        "lng":"103.529335",
+        "lat":"29.598207",
+        "speed":"40.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:37:01",
+        "lng":"103.527472",
+        "lat":"29.60412",
+        "speed":"40.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:37:01",
+        "lng":"103.527472",
+        "lat":"29.60412",
+        "speed":"40.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:38:01",
+        "lng":"103.52848",
+        "lat":"29.605317",
+        "speed":"12.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:38:01",
+        "lng":"103.52848",
+        "lat":"29.605317",
+        "speed":"12.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:39:01",
+        "lng":"103.530392",
+        "lat":"29.606332",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:39:01",
+        "lng":"103.530392",
+        "lat":"29.606332",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:40:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:40:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:41:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:41:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:42:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:42:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:43:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:43:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:44:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:44:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:45:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:45:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:46:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:46:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:47:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:47:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:48:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:48:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:49:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:49:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:50:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:50:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:51:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:51:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:52:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:52:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:53:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:53:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:54:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:54:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:55:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:55:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:56:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:56:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:57:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:57:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:58:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:58:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:59:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 10:59:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:00:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:00:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:01:02",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:01:02",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:02:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:02:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:03:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:04:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:04:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:05:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:05:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:06:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:06:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:07:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:07:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:08:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:08:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:09:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:09:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:10:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:10:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:11:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:11:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:12:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:12:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:13:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:13:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:14:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:14:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:15:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:15:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:16:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:16:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:17:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:17:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:18:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:18:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:19:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:19:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:20:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:20:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:21:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:21:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:22:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:23:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:23:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:24:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:24:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:25:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:25:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:26:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:26:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:27:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:27:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:28:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:28:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:29:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:29:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:30:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:30:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:31:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:31:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:32:07",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:32:07",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:33:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:33:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:34:07",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:34:07",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:35:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:35:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:36:07",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:36:07",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:37:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:37:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:38:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:38:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:39:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:39:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:40:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:40:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:41:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:41:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:42:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:42:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:43:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:43:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:44:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:44:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:45:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:45:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:46:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:46:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:47:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:47:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:48:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:48:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:49:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:49:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:50:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:50:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:51:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:51:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:52:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:52:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:53:07",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:53:07",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:54:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:54:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:55:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:55:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:56:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:56:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:57:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:57:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:58:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:58:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:59:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 11:59:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:00:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:00:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:01:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:01:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:02:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:02:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:03:08",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:03:08",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:04:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:04:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:05:07",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:05:07",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:06:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:06:06",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:07:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:07:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:08:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:08:05",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:09:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:09:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:10:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:10:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:11:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:11:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:12:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:12:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:13:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:13:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:14:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:14:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:15:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:15:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:16:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:16:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:17:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:17:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:18:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:18:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:19:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:19:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:20:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:20:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:21:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:21:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:22:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:22:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:23:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:23:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:24:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:24:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:25:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:25:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:26:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:26:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:27:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:27:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:28:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:28:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:29:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:29:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:30:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:30:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:31:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:31:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:32:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:32:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:33:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:34:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:34:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:35:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:35:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:36:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:36:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:37:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:37:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:38:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:38:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:39:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:40:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:40:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:41:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:41:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:42:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:42:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:43:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:43:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:44:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:44:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:45:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:45:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:46:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:46:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:47:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:47:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:48:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:48:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:49:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:49:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:50:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:50:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:51:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:51:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:52:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:52:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:53:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:53:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:54:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:54:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:55:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:55:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:56:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:56:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:57:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:57:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:58:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:58:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:59:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 12:59:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:00:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:00:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:01:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:01:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:02:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:02:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:03:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:03:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:04:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:04:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:05:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:05:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:06:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:06:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:07:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:08:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:08:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:09:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:09:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:10:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:10:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:11:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:11:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:12:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:12:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:13:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:13:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:14:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:14:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:15:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:15:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:16:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:16:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:17:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:17:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:18:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:19:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:19:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:20:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:20:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:21:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:21:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:22:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:22:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:23:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:23:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:24:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:24:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:25:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:25:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:26:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:26:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:27:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:27:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:28:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:28:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:29:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:29:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:30:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:30:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:31:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:31:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:32:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:33:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:33:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:34:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:34:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:35:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:35:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:36:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:36:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:37:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:37:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:38:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:38:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:39:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:39:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:40:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:40:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:41:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:41:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:42:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:42:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:43:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:43:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:44:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:44:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:45:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:45:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:46:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:46:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:47:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:47:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:48:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:48:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:49:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:49:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:50:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:50:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:51:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:51:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:52:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:52:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:53:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:53:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:54:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:54:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:55:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:55:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:56:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:56:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:57:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:57:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:58:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:58:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:59:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 13:59:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:00:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:00:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:01:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:01:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:02:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:02:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:03:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:03:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:04:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:04:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:05:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:05:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:06:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:06:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:07:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:07:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:08:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:08:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:09:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:09:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:10:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:10:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:11:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:11:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:12:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:12:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:13:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:13:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:14:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:14:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:15:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:15:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:16:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:16:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:17:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:17:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:18:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:18:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:19:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:19:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:20:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:20:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:21:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:21:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:22:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:22:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:23:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:23:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:24:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:24:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:25:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:25:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:26:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:26:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:27:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:27:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:28:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:28:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:29:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:29:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:30:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:30:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:31:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:31:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:32:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:32:01",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:33:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:33:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:34:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:34:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:35:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:35:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:36:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:36:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:37:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:37:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:38:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:38:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:39:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:39:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:40:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:40:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:41:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:41:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:42:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:42:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:43:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:43:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:44:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:44:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:45:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:45:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:46:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:46:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:47:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    },
+    {
+        "truckno":"川AAU619",
+        "gpstime":"2023-07-22 14:47:00",
+        "lng":"103.530047",
+        "lat":"29.60625",
+        "speed":"0.0"
+    }
+]

+ 4 - 0
sckw-modules/sckw-order/pom.xml

@@ -87,6 +87,10 @@
             <artifactId>sckw-payment-api</artifactId>
             <version>1.0.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-transport-api</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 36 - 7
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -57,27 +57,27 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public HttpResult updateOrderStatus(UpdateOrderStatusParam param) {
+    public void updateOrderStatus(UpdateOrderStatusParam param) {
         log.info("更新订单状态入参:{}", JSON.toJSONString(param));
         if (Objects.isNull(param.getUpdateBy()) || StringUtils.isBlank(param.getUpdateByName())) {
-            return HttpResult.error("操作人信息不能为空!");
+            throw new BusinessException("操作人信息不能为空!");
         }
         KwoTradeOrder order = kwoTradeOrderService.getById(param.getTOrderId());
         if (Objects.isNull(order)) {
-            return HttpResult.error("订单不存在!");
+            throw new BusinessException("订单不存在!");
         }
         Integer status = param.getStatus();
         Long updateBy = param.getUpdateBy();
         if (Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_6.getValue())) {
             if (!Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_5.getValue())) {
-                return HttpResult.error("已完结的订单才可对账!");
+                throw new BusinessException("已完结的订单才可对账!");
             }
         } else if (Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_7.getValue())) {
             if (!Objects.equals(String.valueOf(status), DictEnum.TORDER_STATUS_6.getValue())) {
-                return HttpResult.error("已对账的订单才可结算!");
+                throw new BusinessException("已对账的订单才可结算!");
             }
         } else {
-            return HttpResult.error("非法订单状态操作!");
+            throw new BusinessException("非法订单状态操作!");
         }
         order.setStatus(status).setUpdateBy(updateBy);
         kwoTradeOrderService.updateById(order);
@@ -91,7 +91,6 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         updateParam.setTOrderId(order.getId()).setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy())
                 .setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
         saveMongoDb(updateParam);
-        return HttpResult.ok();
     }
 
     @Override
@@ -242,6 +241,36 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         }
     }
 
+    @Override
+    public void updateAssociateStatement(UpdateAssociateStatementParam param) {
+        log.info("更新订单是否关联对账单入参:{}", JSON.toJSONString(param));
+        Long tOrderId = param.getTOrderId();
+        Integer associateStatement = param.getAssociateStatement();
+        Long updateBy = param.getUpdateBy();
+        String updateByName = param.getUpdateByName();
+        if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
+            throw new BusinessException("操作人信息不能为空!");
+        }
+        if (Objects.isNull(tOrderId) || Objects.isNull(associateStatement)) {
+            throw new BusinessException("更新订单是否关联对账单参数缺失!");
+        }
+        KwoTradeOrder order = kwoTradeOrderService.getById(tOrderId);
+        if (Objects.isNull(order)) {
+            throw new BusinessException("订单不存在!");
+        }
+        if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_5.getValue())) {
+            throw new BusinessException("已完结的订单才可对账!");
+        }
+        order.setAssociateStatement(associateStatement).setUpdateBy(updateBy).setUpdateTime(new Date());
+        kwoTradeOrderService.updateById(order);
+        //更新mongodb
+        SckwTradeOrder updateParam = new SckwTradeOrder();
+        updateParam.setTOrderId(order.getId()).setAssociateStatement(associateStatement).setUpdateBy(updateBy)
+                .setUpdateByName(updateByName).setUpdateTime(new Date());
+        saveMongoDb(updateParam);
+
+    }
+
     /**
      * @desc: mq保存mongodb
      * @author: yzc

+ 5 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrder.java

@@ -84,6 +84,11 @@ public class KwoTradeOrder extends BaseModel implements Serializable {
      */
     private BigDecimal actualAmount;
 
+    /**
+     * 是否关联对账单:0未关联,1已关联
+     */
+    private Integer associateStatement;
+
     /**
      * 订单创建来源类型(1采购下单/2销售代客下单)
      */

+ 5 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java

@@ -108,6 +108,11 @@ public class OrderDetailRes implements Serializable {
      */
     private BigDecimal actualAmount;
 
+    /**
+     * 是否关联对账单:0未关联,1已关联
+     */
+    private Integer associateStatement;
+
     /**
      * 订单创建来源类型(采购下单/销售代客下单)
      */

+ 8 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -36,6 +36,7 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.AreaTreeFrontResDto;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.transport.api.dubbo.TransportDubboService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -69,6 +70,9 @@ public class KwoTradeOrderService {
     @DubboReference(version = "2.0.0", group = "design", check = false)
     private PayCenterDubboService payCenterDubboService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private TransportDubboService transportDubboService;
+
     private final KwoTradeOrderMapper kwoTradeOrderMapper;
     private final StreamBridge streamBridge;
     private final KwoTradeOrderAddressService kwoTradeOrderAddressService;
@@ -110,7 +114,7 @@ public class KwoTradeOrderService {
         String tOrderNo = tradeOrder.getTOrderNo();
         SckwTradeOrder order = new SckwTradeOrder();
         order.setFirmName(LoginUserHolder.getEntName()).setTOrderId(id).setCreateByName(LoginUserHolder.getUserName())
-                .setUpdateByName(LoginUserHolder.getUserName());
+                .setUpdateByName(LoginUserHolder.getUserName()).setAssociateStatement(0);
         BeanUtils.copyProperties(tradeOrder, order);
         //商品信息
         kwoTradeOrderGoodsService.delByOrderId(id);
@@ -764,6 +768,9 @@ public class KwoTradeOrderService {
         if (kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), DictEnum.TORDER_UNIT_TYPE_2.getValue())) {
             throw new BusinessException("无订单操作权限!");
         }
+        if (transportDubboService.checkLogisticsOrderByTradeOrderId(param.getId())){
+            throw new BusinessException("订单存在未完成的物流托运,不可完结!");
+        }
         String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, param.getId());
         if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
             throw new BusinessException("业务繁忙,请稍后再试!");

+ 1 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java

@@ -67,7 +67,7 @@ public class KwpGoodsController {
     @GetMapping("/detail")
     @Log(description = "获取商品详情")
     public HttpResult detail(@RequestParam Long id) {
-        return HttpResult.ok(kwpGoodsService.detail(id, false));
+        return HttpResult.ok(kwpGoodsService.detail(id));
     }
 
     /**

+ 1 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/dubbo/GoodsInfoServiceImpl.java

@@ -34,7 +34,7 @@ public class GoodsInfoServiceImpl implements GoodsInfoService {
 
     @Override
     public GoodsDetail getDetailById(Long id) {
-        return BeanUtils.copyProperties(kwpGoodsService.detail(id, true), GoodsDetail.class);
+        return BeanUtils.copyProperties(kwpGoodsService.detail(id), GoodsDetail.class);
     }
 
     @Override

+ 4 - 12
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -168,18 +168,10 @@ public class KwpGoodsService {
      * @Param id:
      * @return: com.sckw.product.model.vo.res.GoodsDetail
      */
-    public GoodsDetail detail(Long id, Boolean isDubbo) {
-        KwpGoods goods;
-        if (isDubbo) {
-            goods = kwpGoodsMapper.selectById(id);
-            if (Objects.isNull(goods)) {
-                return null;
-            }
-        } else {
-            goods = getGoodsById(id);
-            if (Objects.isNull(goods)) {
-                throw new BusinessException("当前商品信息为空!");
-            }
+    public GoodsDetail detail(Long id) {
+        KwpGoods goods = kwpGoodsMapper.selectById(id);
+        if (Objects.isNull(goods)) {
+            throw new BusinessException("当前商品不存在!");
         }
         GoodsDetail detail = BeanUtils.copyProperties(goods, GoodsDetail.class);
         List<EntCacheResDto> entCacheList = remoteSystemService.queryEntCacheByIds(Arrays.asList(detail.getEntId(), detail.getSupplyEntId()));

+ 4 - 2
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwAcceptCarriageService.java

@@ -278,8 +278,10 @@ public class KwAcceptCarriageService {
             vo.setRemark(logisticsOrder.getRemark());
             vo.setShipmentsContacts(logisticsOrder.getLoadContacts());
             vo.setShipmentsPhone(logisticsOrder.getLoadPhone());
-            vo.setShipmentsDateTime(logisticsOrder.getLoadTime() == null ?
-                    null : DateUtil.getDateTime(logisticsOrder.getLoadTime()));
+            vo.setShipmentsDateTime(logisticsOrder.getStartTime() == null ?
+                    null : DateUtil.getDateTime(logisticsOrder.getStartTime()));
+            vo.setReceiveGoodsDateTime(logisticsOrder.getEndTime() == null ?
+                    null : DateUtil.getDateTime(logisticsOrder.getEndTime()));
             vo.setShipmentsPhone(logisticsOrder.getLoadPhone());
             vo.setSigning(logisticsOrder.getContractSigningWay());
             vo.setStatus(logisticsOrder.getStatus());

+ 15 - 7
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java

@@ -120,9 +120,8 @@ public class KwOrderService {
         Long userId = LoginUserHolder.getUserId();
         Query query = new Query();
         Criteria criteria = new Criteria();
-        criteria.and("delFlag").is(0);
         String topEnt = Objects.equals(params.getOrderType(), 1) ? "procureTopEntId" : "supplyTopEntId";
-        criteria.and(topEnt).is(entId);
+        criteria.and(topEnt).is(entId).and("delFlag").is(0);
         //日期范围
         if (Objects.nonNull(params.getStartCreateTime()) && Objects.nonNull(params.getEndCreateTime())) {
             criteria.and("createTime").gte(params.getStartCreateTime()).lte(DateUtil.offsetDay(params.getEndCreateTime(), 1));
@@ -168,6 +167,7 @@ public class KwOrderService {
         if (StringUtils.isNotBlank(params.getSource())) {
             criteria.and("source").is(params.getSource());
         }
+        List<Criteria> orOperators = new ArrayList<>();
         //订单状态
         if (Objects.nonNull(params.getStatus()) && !isStatistic) {
             criteria.and("status").is(params.getStatus());
@@ -177,15 +177,22 @@ public class KwOrderService {
             }
         } else {
             //非草稿状态or草稿状态且是当前人且一级企业匹配
-            criteria.orOperator(Criteria.where("status").ne(0),
-                    Criteria.where("status").is(0).and("createBy").is(userId));
-
+            Criteria orOperator = new Criteria().orOperator(
+                    Criteria.where("status").ne(0),
+                    new Criteria().andOperator(Criteria.where("status").is(0),
+                            Criteria.where("createBy").is(userId)));
+            orOperators.add(orOperator);
         }
         //关键字模糊匹配
         if (StringUtils.isNotBlank(params.getKeywords())) {
             Pattern pattern = Pattern.compile("^.*" + params.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE);
-            criteria.orOperator(Criteria.where("tOrderNo").regex(pattern), Criteria.where("procureFirmName").regex(pattern),
+            Criteria orOperator = new Criteria().orOperator(
+                    Criteria.where("tOrderNo").regex(pattern), Criteria.where("procureFirmName").regex(pattern),
                     Criteria.where("supplyFirmName").regex(pattern), Criteria.where("goodsName").regex(pattern));
+            orOperators.add(orOperator);
+        }
+        if (CollectionUtils.isNotEmpty(orOperators)) {
+            criteria.andOperator(orOperators);
         }
         return query.addCriteria(criteria);
     }
@@ -281,7 +288,8 @@ public class KwOrderService {
         Long entId = LoginUserHolder.getEntId();
         Criteria criteria = new Criteria();
         String topEnt = Objects.equals(params.getOrderType(), 1) ? "procureTopEntId" : "supplyTopEntId";
-        criteria.and(topEnt).is(entId).and("status").is(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue())).and("delFlag").is(0);
+        criteria.and(topEnt).is(entId).and("status").is(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()))
+                .and("associateStatement").ne(1).and("delFlag").is(0);
         //排除订单ids
         if (StringUtils.isNotBlank(params.getExcludeIds())) {
             List<Long> ids = StringUtils.splitStrToList(params.getExcludeIds(), ",", Long.class);

+ 21 - 12
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwTransportService.java

@@ -169,7 +169,7 @@ public class KwTransportService {
         List<SckwWaybillOrder> list = mongoTemplate.find(queryFormat, SckwWaybillOrder.class);
         List<CarWaybillVo> returnList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(list)) {
-            packageWayBillReturnList(list, returnList);
+            packageWayBillReturnList(list, returnList, query.getStatus());
         }
         PageResult build = PageResult.build(query.getPage(), query.getPageSize(), total, returnList);
         return HttpResult.ok(build);
@@ -192,14 +192,14 @@ public class KwTransportService {
 
         if (StringUtils.isNotBlank(query.getStatus())) {
             // TODO 此处需要修改
-            if (query.getStatus().equals(NumberConstant.ONE_ZERO_ZERO)) {
+            if (query.getStatus().equals(String.valueOf(NumberConstant.ONE_ZERO_ZERO))) {
                 List<Long> statuses = new ArrayList<>();
                 statuses.add(CarWaybillEnum.REJECT_ORDER.getCode().longValue());
                 statuses.add(CarWaybillEnum.REFUSE_TRAFFIC.getCode().longValue());
                 statuses.add(CarWaybillEnum.REVOKED.getCode().longValue());
                 criteria.and("status").in(statuses);
-            } else {
-                criteria.and("status").is(query.getStatus());
+            } else if (!query.getStatus().equals("all")) {
+                criteria.and("status").is(Integer.valueOf(query.getStatus()));
             }
         }
         // 装载时间
@@ -355,18 +355,17 @@ public class KwTransportService {
      * @param list
      * @param returnList
      */
-    private void packageWayBillReturnList(List<SckwWaybillOrder> list, List<CarWaybillVo> returnList) {
+    private void packageWayBillReturnList(List<SckwWaybillOrder> list, List<CarWaybillVo> returnList, String status) {
         for (SckwWaybillOrder waybillOrder : list) {
             CarWaybillVo vo = new CarWaybillVo();
             vo.setWOrderNo(waybillOrder.getWOrderNo() == null ?
                     null : String.valueOf(waybillOrder.getWOrderNo()));
             vo.setWOrderId(waybillOrder.getWOrderId() == null ?
                     null : String.valueOf(waybillOrder.getWOrderId()));
-            vo.setFirmName(waybillOrder.getFirmName() == null ?
-                    null : String.valueOf(waybillOrder.getFirmName()));
             vo.setTruckNo(waybillOrder.getTruckNo());
             vo.setDriverName(waybillOrder.getDriverName() == null ?
                     null : String.valueOf(waybillOrder.getDriverName()));
+            vo.setType(String.valueOf(waybillOrder.getType()));
             String typeString = "";
             if (waybillOrder.getType().equals(NumberConstant.ONE)) {
                 typeString = "趟次";
@@ -374,7 +373,13 @@ public class KwTransportService {
             if (waybillOrder.getType().equals(NumberConstant.TWO)) {
                 typeString = "循环";
             }
-            vo.setType(typeString);
+            vo.setTypeLabel(typeString);
+            if(status.equals(String.valueOf(NumberConstant.ONE_ZERO_ZERO))) {
+                vo.setStatus(String.valueOf(NumberConstant.ONE_ZERO_ZERO));
+            } else {
+                vo.setStatus(waybillOrder.getStatus() == null ?
+                        null : String.valueOf(waybillOrder.getStatus()));
+            }
             vo.setSendCarTime(waybillOrder.getCreateTime() == null ?
                     null : DateUtil.getDateTime(waybillOrder.getCreateTime()));
             vo.setStartTime(waybillOrder.getStartTime() == null ?
@@ -382,15 +387,19 @@ public class KwTransportService {
             vo.setEndTime(waybillOrder.getEndTime() == null ?
                     null : DateUtil.getDateTime(waybillOrder.getEndTime()));
             vo.setEntrustAmount(String.valueOf(waybillOrder.getEntrustAmount()));
-            vo.setLoadingAddress(waybillOrder.getLoadCityName().concat(waybillOrder.getLoadDetailAddress()));
-            vo.setUnloadingAddress(waybillOrder.getUnloadCityName().concat(waybillOrder.getUnloadDetailAddress()));
+            vo.setLoadName(waybillOrder.getLoadName() == null ?
+                    null : waybillOrder.getLoadName());
+            vo.setLoadAddress(waybillOrder.getLoadCityName().concat(waybillOrder.getLoadDetailAddress()));
+            vo.setUnloadName(waybillOrder.getUnloadName() == null ?
+                    null : waybillOrder.getUnloadName());
+            vo.setUnloadAddress(waybillOrder.getUnloadCityName().concat(waybillOrder.getUnloadDetailAddress()));
             vo.setLoadAmount(waybillOrder.getLoadAmount() == null ?
                     null : String.valueOf(waybillOrder.getLoadAmount()));
             vo.setUnloadAmount(waybillOrder.getUnloadAmount() == null ?
                     null : String.valueOf(waybillOrder.getUnloadAmount()));
-            vo.setLoadTime(waybillOrder.getLoadTime() == null ?
+            vo.setLoadDateTime(waybillOrder.getLoadTime() == null ?
                     null : DateUtil.getDateTime(waybillOrder.getLoadTime()));
-            vo.setUnloadTime(waybillOrder.getUnloadTime() == null ?
+            vo.setUnloadDateTime(waybillOrder.getUnloadTime() == null ?
                     null : DateUtil.getDateTime(waybillOrder.getUnloadTime()));
             vo.setCreateTime(waybillOrder.getCreateTime() == null ?
                     null : DateUtil.getDateTime(waybillOrder.getCreateTime()));

+ 5 - 1
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/param/WaybillOrderQuery.java

@@ -1,7 +1,9 @@
 package com.sckw.report.service.param;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.sckw.core.model.page.PageRequest;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
@@ -83,5 +85,7 @@ public class WaybillOrderQuery extends PageRequest implements Serializable {
     /**
      * 运单状态
      */
-    private Integer status;
+    @JsonProperty("status")
+    @NotNull(message = "订单状态不能为空")
+    private String status;
 }

+ 31 - 6
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/vo/CarWaybillVo.java

@@ -1,9 +1,10 @@
 package com.sckw.report.service.vo;
 
-import com.sckw.core.model.page.PageResult;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import java.io.Serial;
 import java.io.Serializable;
 
 /**
@@ -15,14 +16,18 @@ import java.io.Serializable;
 @Accessors(chain = true)
 public class CarWaybillVo implements Serializable {
 
+    @Serial
+    private static final long serialVersionUID = 4526063761808958350L;
     /**
      * 物流订单id
      */
+    @JsonProperty(value="wOrderId")
     private String wOrderId;
 
     /**
      * 物流订单号
      */
+    @JsonProperty(value="wOrderNo")
     private String wOrderNo;
 
     /**
@@ -41,10 +46,20 @@ public class CarWaybillVo implements Serializable {
     private String driverName;
 
     /**
-     * 运单类型
+     * 运单类型数字
      */
     private String type;
 
+    /**
+     * 运单类型字符
+     */
+    private String typeLabel;
+
+    /**
+     * 运单状态
+     */
+    private String  status;
+
     /**
      * 派车时间
      */
@@ -65,15 +80,25 @@ public class CarWaybillVo implements Serializable {
      */
     private String entrustAmount;
 
+    /**
+     * 装货地点名称
+     */
+    private String loadName;
+
     /**
      * 装货地点
      */
-    private String loadingAddress;
+    private String loadAddress;
+
+    /**
+     * 卸货地点点名称
+     */
+    private String unloadName;
 
     /**
      * 卸货地点
      */
-    private String unloadingAddress;
+    private String unloadAddress;
 
     /**
      * 实装量/吨
@@ -88,12 +113,12 @@ public class CarWaybillVo implements Serializable {
     /**
      * 装货时间
      */
-    private String loadTime;
+    private String loadDateTime;
 
     /**
      * 卸货时间
      */
-    private String unloadTime;
+    private String unloadDateTime;
 
     /**
      * 亏吨重量

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java

@@ -222,8 +222,9 @@ public class AcceptCarriageOrderController {
      * @param ids 车辆运单id
      * @return
      */
-    @RequestMapping(value = "/cancelDelivery", method = RequestMethod.POST)
+    @RequestMapping(value = "/cancelDelivery", method = RequestMethod.GET)
     public HttpResult cancelDelivery(@NotBlank(message = "车辆运单id不能为空") @RequestParam("ids") String ids) {
+        log.info("承运订单-取消派车(撤回派车)/单趟撤回请求参数:{}",ids);
         List<String> lists = StringUtils.splitStrToList(ids, ",", String.class);
         try {
             return acceptCarriageOrderService.cancelDelivery(lists);

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/LogisticsConsignmentController.java

@@ -174,7 +174,7 @@ public class LogisticsConsignmentController {
      */
     @RequestMapping(value = "/sellLogisticsConsignment", method = RequestMethod.POST)
     public HttpResult sellLogisticsConsignment(@Valid @RequestBody LogisticsConsignmentParam logisticsConsignmentParam) {
-        log.info("销售订单传递参数信息:{}", JSONObject.toJSONString(logisticsConsignmentParam));
+        log.info("销售订单-物流托运生成托运订单 传递参数信息:{}", JSONObject.toJSONString(logisticsConsignmentParam));
         try {
             return logisticsConsignmentService.sellLogisticsConsignment(logisticsConsignmentParam);
         } catch (Exception e) {

+ 8 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java

@@ -13,6 +13,7 @@ import com.sckw.transport.model.vo.SubcontractConsignmentVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -150,4 +151,11 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
      * @return
      */
     int selectMaxLevel(@Param("id") String id);
+
+    /**
+     * 根据贸易订单id统计委派量-实际装货量-实际卸货量
+     * @param tOrderId
+     * @return
+     */
+    Map<String, BigDecimal> countAmountByTradeOrderId(@Param("tOrderId") Long tOrderId);
 }

+ 25 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTrack.java

@@ -1,8 +1,10 @@
 package com.sckw.transport.model;
 
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.sckw.core.model.base.BaseModel;
 import lombok.Data;
+
+import java.io.Serializable;
 import java.util.Date;
 
 /**
@@ -12,7 +14,12 @@ import java.util.Date;
  */
 @Data
 @TableName("kwt_waybill_order_track")
-public class KwtWaybillOrderTrack extends BaseModel {
+public class KwtWaybillOrderTrack implements Serializable {
+
+    /**
+     * 主键
+     */
+    private Long id;
 
     /**
      * 车辆运单id
@@ -29,9 +36,25 @@ public class KwtWaybillOrderTrack extends BaseModel {
      */
     private Integer status;
 
+    private Long createBy;
+
+    private Date createTime;
+
+    private Long updateBy;
+
+    private Date updateTime;
+
     /**
      * 装卸货时间
      */
     private Date operateTime;
 
+    /**
+     * 是否删除(0未删除,1删除)
+     */
+    @TableLogic("0")
+    private Integer delFlag;
+
+    private static final long serialVersionUID = 1L;
+
 }

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/AddOrderDTO.java

@@ -126,7 +126,7 @@ public class AddOrderDTO {
     /**
      * 合理损耗
      */
-    @Digits(integer = 10, fraction = 2, message = "合理损耗格式错误")
+    @Digits(integer = 7, fraction = 2, message = "合理损耗格式错误")
     @DecimalMin(value = "0.00", message = "合理损耗最小值为{value}")
     private BigDecimal loss;
 
@@ -139,7 +139,7 @@ public class AddOrderDTO {
     /**
      * 商品价值(扣亏货值)
      */
-    @Digits(integer = 10, fraction = 2, message = "扣亏货值格式错误")
+    @Digits(integer = 5, fraction = 2, message = "扣亏货值格式错误")
     @DecimalMin(value = "0.00", message = "扣亏货值最小值为{value}")
     private BigDecimal goodsPrice;
     /**

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OperateSendCarDto.java

@@ -11,7 +11,7 @@ import java.util.Date;
 
 /**
  * @author zk
- * @desc 确认/绝接单
+ * @desc 确认/绝接单
  * @date 2023/7/25 0025
  */
 @Data

+ 7 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SubcontractConsignmentDTO.java

@@ -2,12 +2,14 @@ package com.sckw.transport.model.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.validation.constraints.Digits;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 
@@ -58,7 +60,8 @@ public class SubcontractConsignmentDTO /**implements IdsList*/ {
      * 合理损耗
      */
 //    @NotNull(message = "合理损耗不能为空")
-    private Long loss;
+    @Digits(integer = 5, fraction = 2,message = "合理损耗格式填写错误")
+    private BigDecimal loss;
     /**
      * 合理损耗单位
      */
@@ -175,7 +178,7 @@ public class SubcontractConsignmentDTO /**implements IdsList*/ {
      * 计划卸货时间
      */
     @NotNull(message = "计划卸货时间不能为空")
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date receiveGoodsDateTime;
 
@@ -183,7 +186,7 @@ public class SubcontractConsignmentDTO /**implements IdsList*/ {
      * 计划发货时间
      */
     @NotNull(message = "计划发货时间不能为空")
-    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date shipmentsDateTime;
 
@@ -195,7 +198,7 @@ public class SubcontractConsignmentDTO /**implements IdsList*/ {
     /**
      * 备注
      */
-    @Length(max = 200,message = "单据编号长度错误最大长度:{max}")
+    @Length(max = 200, message = "单据编号长度错误最大长度:{max}")
     private String remark;
     /**
      * 计费方式

+ 4 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillCountVo.java

@@ -56,5 +56,8 @@ public class WaybillCountVo {
      */
     private Integer totalExecute;
 
-
+    /**
+     * 未完结物流订单
+     */
+    private Integer totalUnfinished;
 }

+ 65 - 18
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -124,11 +124,17 @@ public class AcceptCarriageOrderService {
      */
     @Transactional(rollbackFor = Exception.class)
     public HttpResult subcontractConsignment(SubcontractConsignmentDTO bo) {
+        HttpResult httpResult = ValidUtil.serviceValid(bo);
+        if (!String.valueOf(HttpStatus.SUCCESS_CODE).equals(String.valueOf(httpResult.getCode()))) {
+            httpResult.setMsg(httpResult.getMsg());
+            httpResult.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+            return httpResult;
+        }
         KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
                 .eq(KwtLogisticsOrder::getId, bo.getLOrderId()));
         if (logisticsOrder == null) {
             log.error("订单id查找失败:{},订单编号:{}", bo.getLOrderId(), bo.getLOrderNo());
-            throw new RuntimeException("单据错误,数据不存在");
+            throw new BusinessException("单据错误,数据不存在");
         }
         //todo  校验当前登录角色是否具有4P物流角色
         EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(LoginUserHolder.getEntId());
@@ -197,7 +203,7 @@ public class AcceptCarriageOrderService {
         } else if (NumberConstant.ZERO == status) {
             orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
         } else {
-            log.info("承运订单生成物流托运 承运订单id:{}," +
+            log.info("承运订单-分包托运 承运订单id:{}," +
                             "承运订单编号:{},合同id:{},合同信息:{}",
                     bo.getLOrderId(), bo.getLOrderNo(),
                     bo.getContractId(), JSONObject.toJSONString(infoResDto));
@@ -268,7 +274,7 @@ public class AcceptCarriageOrderService {
             logisticsOrder.setSubcontractAmount(new BigDecimal(NumberConstant.ZERO));
             logisticsOrder.setCarryingCapacity(0L);
         }
-        logisticsOrder.setLoss(bo.getLoss() == null ? null : new BigDecimal(bo.getLoss()));
+        logisticsOrder.setLoss(bo.getLoss() == null ? null : bo.getLoss());
         logisticsOrder.setLossUnit(bo.getLossUnit());
         logisticsOrder.setGoodsPrice(bo.getGoodsPrice() == null ? null : new BigDecimal(bo.getGoodsPrice()));
         BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
@@ -518,7 +524,7 @@ public class AcceptCarriageOrderService {
                 null : Long.parseLong(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.PRICE_TYPE.getType(), bo.getPriceType()).getValue()));
         order.setAmount(new BigDecimal(bo.getCarryingCapacity()));
         order.setBillingMode(bo.getBillingMode());
-        order.setLoss(new BigDecimal(bo.getLoss()));
+        order.setLoss(bo.getLoss());
 //        order.setLossUnit(bo.getLossUnit());
         order.setLossUnit(remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.UNIT_TYPE.getType(), bo.getLossUnit()) == null ?
                 null : remoteSystemService.queryDictByTypeAndValue(DictTypeEnum.UNIT_TYPE.getType(), bo.getLossUnit()).getValue());
@@ -624,6 +630,12 @@ public class AcceptCarriageOrderService {
          * */
         // 0 已签约 1待签约
         Integer status = infoResDto.getStatus();
+        //todo 2023-08-09 验证必须是合同已签约才能进行接单操作
+        if (NumberConstant.ZERO != status) {
+            result.setMsg("该订单合同未签约!");
+            result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+            return result;
+        }
         Integer orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
         if (NumberConstant.ONE == status) {
             orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
@@ -645,12 +657,13 @@ public class AcceptCarriageOrderService {
                     .set(KwtLogisticsOrder::getUpdateTime, new Date())
                     .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId()));
         } else {
+            orderStatus = LogisticsOrderEnum.REJECT_ORDER.getCode();
             //todo 当前为删除订单 后续要改为拒绝接单  数据统计在页面已退回状态中
             //删除订单
             logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
                     .eq(StringUtils.isNotBlank(orderDTO.getLOrderId()), KwtLogisticsOrder::getId, orderDTO.getLOrderId())
                     .eq(StringUtils.isNotBlank(orderDTO.getLOrderNo()), KwtLogisticsOrder::getLOrderNo, orderDTO.getLOrderNo())
-                    .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
+                    .set(KwtLogisticsOrder::getStatus, orderStatus)
                     .set(KwtLogisticsOrder::getUpdateTime, new Date())
                     .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId()));
         }
@@ -675,7 +688,18 @@ public class AcceptCarriageOrderService {
             track.setStatus(orderStatus);
             logisticsOrderTrackMapper.updateById(track);
         }
-
+        //修改mongodb状态
+        SckwLogisticsOrder order = new SckwLogisticsOrder();
+        order.set_id(logisticsOrder.getId());
+        order.setLOrderId(logisticsOrder.getId());
+        order.setStatus(String.valueOf(orderStatus));
+        order.setUpdateTime(new Date());
+        order.setUpdateByName(LoginUserHolder.getUserName());
+        SckwBusSum busSum = new SckwBusSum();
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        busSum.setMethod(NumberConstant.TWO);
+        busSum.setObject(order);
+        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
         return result;
     }
 
@@ -937,16 +961,27 @@ public class AcceptCarriageOrderService {
                     .set(KwtWaybillOrder::getUpdateBy, LoginUserHolder.getUserId())
                     .set(KwtWaybillOrder::getUpdateTime, new Date()));
             /**变更单据状态*/
-            KwtWaybillOrderTrack orderTrack = new KwtWaybillOrderTrack();
-            orderTrack.setId(new IdWorker(NumberConstant.ONE).nextId());
-            orderTrack.setWOrderId(Long.parseLong(id));
-            orderTrack.setStatus(CarWaybillEnum.REVOKED.getCode());
-            orderTrack.setDelFlag(NumberConstant.ZERO);
-            orderTrack.setCreateBy(LoginUserHolder.getUserId());
-            orderTrack.setCreateTime(new Date());
-            orderTrack.setUpdateBy(LoginUserHolder.getUserId());
-            orderTrack.setUpdateTime(new Date());
-            waybillOrderTrackMapper.insert(orderTrack);
+            KwtWaybillOrderTrack waybillOrderTrack = waybillOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtWaybillOrderTrack>()
+                    .eq(KwtWaybillOrderTrack::getWOrderId, id)
+                    .eq(KwtWaybillOrderTrack::getStatus, CarWaybillEnum.REVOKED.getCode())
+            );
+            if (waybillOrderTrack == null) {
+                KwtWaybillOrderTrack orderTrack = new KwtWaybillOrderTrack();
+                orderTrack.setId(new IdWorker(NumberConstant.ONE).nextId());
+                orderTrack.setWOrderId(Long.parseLong(id));
+                orderTrack.setStatus(CarWaybillEnum.REVOKED.getCode());
+                orderTrack.setDelFlag(NumberConstant.ZERO);
+                orderTrack.setCreateBy(LoginUserHolder.getUserId());
+                orderTrack.setCreateTime(new Date());
+                orderTrack.setUpdateBy(LoginUserHolder.getUserId());
+                orderTrack.setUpdateTime(new Date());
+                waybillOrderTrackMapper.insert(orderTrack);
+            }else {
+                waybillOrderTrack.setUpdateTime(new Date());
+                waybillOrderTrack.setUpdateBy(LoginUserHolder.getUserId());
+                waybillOrderTrackMapper.updateById(waybillOrderTrack);
+            }
+
             /**修改mongodb*/
             //mongodb更新订单状态
             SckwWaybillOrder updateParam = new SckwWaybillOrder();
@@ -954,9 +989,21 @@ public class AcceptCarriageOrderService {
                     .setUpdateBy(LoginUserHolder.getUserId()).setUpdateByName(LoginUserHolder.getUserName()).setUpdateTime(new Date());
             SckwBusSum busSum = new SckwBusSum();
             busSum.setBusSumType(BusinessTypeEnum.WAYBILL_ORDER_TYPE.getName());
-            busSum.setMethod(2);
+            busSum.setMethod(NumberConstant.TWO);
             busSum.setObject(updateParam);
             streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+            SckwLogisticsOrder order = new SckwLogisticsOrder();
+            order.set_id(logisticsOrder.getId());
+            order.setLOrderId(logisticsOrder.getId());
+            order.setEntrustAmount(entrustAmount);
+            order.setSubcontractAmount(subcontractAmount);
+            order.setUpdateByName(LoginUserHolder.getUserName());
+            order.setUpdateTime(new Date());
+            SckwBusSum orderBusSum = new SckwBusSum();
+            orderBusSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+            orderBusSum.setMethod(NumberConstant.TWO);
+            orderBusSum.setObject(order);
+            streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
             result.put("status", HttpStatus.SUCCESS_CODE);
             result.put("message", "取消成功");
             list.add(result);
@@ -1253,7 +1300,7 @@ public class AcceptCarriageOrderService {
         if (NumberConstant.ONE == status) {
             orderStatus = LogisticsOrderEnum.TO_BE_PLANNED.getCode();
         } else if (NumberConstant.ZERO == status) {
-            orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+            orderStatus = LogisticsOrderEnum.WAIT_DELIVERY.getCode();
         } else {
             log.info("承运订单创建订单异常");
             throw new RuntimeException("自建订单异常");

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java

@@ -722,7 +722,7 @@ public class ConsignOrderService {
         if (NumberConstant.ONE == status) {
             orderStatus = LogisticsOrderEnum.TO_BE_PLANNED.getCode();
         } else if (NumberConstant.ZERO == status) {
-            orderStatus = LogisticsOrderEnum.PENDING_ORDER.getCode();
+            orderStatus = LogisticsOrderEnum.WAIT_DELIVERY.getCode();
         } else {
             log.info("托运订单创建订单异常");
             throw new RuntimeException("自建订单异常");

+ 46 - 21
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -16,6 +16,7 @@ import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
+import com.sckw.order.api.model.CompleteLogisticsOrderParam;
 import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
@@ -1439,43 +1440,32 @@ public class KwtWaybillOrderService {
 
         /**1存在下级分包**/
         KwtLogisticsOrder logisticsOrder = logisticsOrderDao.selectById(lOrderId);
-        boolean subcontractBool = true;
-        BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getSubcontractAmount();
-        if (subcontractAmount.compareTo(new BigDecimal(Global.AMOUNT)) > 0) {
-            /**1-1校验下级分包是否全部运输完成**/
-            List<KwtLogisticsOrder> logisticsOrders = logisticsOrderDao.findLogisticsOrder(
-                    new HashMap(){{put("upperlOrderId", logisticsOrder.getId()); put("ownOrderId", logisticsOrder.getId());}});
-            for (KwtLogisticsOrder logisticsOrder1:logisticsOrders) {
-                if (!LogisticsOrderEnum.transportCompleted(logisticsOrder1.getStatus())) {
-                    //下级分包承运订单运输未完成
-                    subcontractBool = false;
-                    continue;
-                }
-            }
-        }
+        /**1-1校验下级分包是否全部运输完成**/
+        boolean subcontractBool = checkSubcontract(logisticsOrder);
 
-        /**校验当前承运订单是否运输完成**/
+        /**1-2校验当前承运订单是否运输完成**/
         //车辆运单统计
         WaybillCountVo waybillCount = waybillOrderDao.findWaybillOrderCount( new HashMap(){{put("upperlOrderId", logisticsOrder.getId()); put("passStatus", 1); }});
         logisticsOrder.setTotalLoadAmount(waybillCount.getLoadAmount());
         logisticsOrder.setTotalUnloadAmount(waybillCount.getUnloadAmount());
+        BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getSubcontractAmount();
         //物流运单状态(不包含已完成、已对账、已结算)+ 物流订单上级委派量-下游分包总量 <= 自己承运总装货量 + 下级分包全部运输完成
         if (!LogisticsOrderEnum.transportCompleted(logisticsOrder.getStatus())
                 && logisticsOrder.getAmount().subtract(subcontractAmount).compareTo(waybillCount.getLoadAmount()) <= 0
                 && subcontractBool) {
             //---------------------------------------------zk 2023-08-01 全量可运
-            /**1-2下级分包承运订单运输完成**/
+            /**1-3下级分包承运订单运输完成**/
             logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
             logisticsOrderDao.updateById(logisticsOrder);
 
-            /**1-3承运订单状态记录**/
+            /**1-4承运订单状态记录**/
             KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
             orderTrack.setLOrderId(logisticsOrder.getId());
             orderTrack.setStatus(logisticsOrder.getStatus());
             orderTrack.setRemark(LogisticsOrderEnum.getName(logisticsOrder.getStatus()));
             logisticsOrderTrackDao.insert(orderTrack);
 
-            /**1-4循环派车失效kwt_logistics_order_circulate**/
+            /**1-5循环派车失效kwt_logistics_order_circulate**/
             //循环派车信息
             List<KwtLogisticsOrderCirculate> circulates = logisticsOrderCirculateDao.findCirculateList(logisticsOrder.getId(), null, null, 0);
             for (KwtLogisticsOrderCirculate circulate:circulates) {
@@ -1493,12 +1483,23 @@ public class KwtWaybillOrderService {
             }
         }
 
-        /**1-5更新贸易订单总量**/
+        /**1-6更新贸易订单总量**/
         if (logisticsLevel(logisticsOrder) == Global.NUMERICAL_ONE) {
-            //------------------------------------- zk 2023-08-08
+            //查询贸易订单总装货量/总卸货量
+            WaybillCountVo tradeCount = waybillOrderDao.findWaybillOrderCount( new HashMap(){{put("tOrderId", logisticsOrder.getTOrderId()); put("passStatus", 1); }});
+            //查询贸易订单关联物流运单是否全部完结-totalUnfinished
+            WaybillCountVo tradeCount1 = waybillOrderDao.findWaybillOrderCount( new HashMap(){{put("tOrderId", logisticsOrder.getTOrderId()); }});
+            CompleteLogisticsOrderParam tradeOrder = new CompleteLogisticsOrderParam();
+            tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
+            tradeOrder.setActualLoadAmount(tradeCount.getLoadAmount());
+            tradeOrder.setActualUnloadAmount(tradeCount.getUnloadAmount());
+            tradeOrder.setIsAllComplete(tradeCount1.getTotalUnfinished() > 0 ? false : true);
+            tradeOrder.setUpdateBy(LoginUserHolder.getUserId());
+            tradeOrder.setUpdateByName(LoginUserHolder.getUserName());
+            tradeOrderInfoService.completeLogisticsOrder(tradeOrder);
         }
 
-        /**1-6Mongodb数据更新**/
+        /**1-7Mongodb数据更新**/
         //承运订单
         SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
         lOrder.setTotalLoadAmount(waybillCount.getLoadAmount());
@@ -1521,6 +1522,30 @@ public class KwtWaybillOrderService {
         }
     }
 
+    /**
+     * @param logisticsOrder 物流订单
+     * @desc 校验下级分包是否全部运输完成
+     * @author zk
+     * @date 2023/7/26
+     **/
+    public boolean checkSubcontract(KwtLogisticsOrder logisticsOrder) {
+        boolean subcontractBool = true;
+        BigDecimal subcontractAmount = logisticsOrder.getSubcontractAmount() == null ? new BigDecimal(Global.AMOUNT) : logisticsOrder.getSubcontractAmount();
+        if (subcontractAmount.compareTo(new BigDecimal(Global.AMOUNT)) > 0) {
+            /**1-1校验下级分包是否全部运输完成**/
+            List<KwtLogisticsOrder> logisticsOrders = logisticsOrderDao.findLogisticsOrder(
+                    new HashMap(){{put("upperlOrderId", logisticsOrder.getId()); put("ownOrderId", logisticsOrder.getId());}});
+            for (KwtLogisticsOrder logisticsOrder1:logisticsOrders) {
+                if (!LogisticsOrderEnum.transportCompleted(logisticsOrder1.getStatus())) {
+                    //下级分包承运订单运输未完成
+                    subcontractBool = false;
+                    continue;
+                }
+            }
+        }
+        return subcontractBool;
+    }
+
     /**
      * @param params {}
      * @desc 修改单证

+ 42 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java

@@ -27,6 +27,7 @@ import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.AddressInfoDetail;
+import com.sckw.order.api.model.CompleteLogisticsOrderParam;
 import com.sckw.order.api.model.CreateOrCancelLogisticsOrderParam;
 import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.product.api.dubbo.GoodsInfoService;
@@ -181,6 +182,18 @@ public class LogisticsConsignmentService {
         insertLogisticsOrderAddress(bo, orderId);
         insertLogisticsOrderTrack(bo, orderId, orderStatus);
         sendMongoDB(lOrderNo, orderId, bo, tradeOrder, orderStatus);
+
+        /**将生成的分配量->贸易订单*/
+        CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
+        param.setTOrderId(Long.valueOf(bo.getTOrderId()));
+        param.setEntrustAmount(BigDecimal.valueOf(bo.getCarryingCapacity()));
+        param.setUpdateBy(LoginUserHolder.getUserId());
+        param.setUpdateByName(LoginUserHolder.getUserName());
+        HttpResult httpResult = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+        if (httpResult.getCode() != HttpStatus.SUCCESS_CODE){
+            log.info("{}生成物流托运失败!,返回信息:{}",bo.getTOrderNo(),JSONObject.toJSONString(httpResult));
+            throw new BusinessException("{}生成物流托运失败!",bo.getTOrderNo());
+        }
     }
 
     /**
@@ -1048,9 +1061,35 @@ public class LogisticsConsignmentService {
                 BigDecimal subtract = kwtLogisticsOrder.getAmount().subtract(kwtLogisticsOrder.getTotalLoadAmount());
                 updateLogisticOrderAndTrack(kwtLogisticsOrder.getId(), orderFinishDTO, subtract);
                 //修改mongodb的数据
-                updateMongoDbByLogisticsOrder(kwtLogisticsOrder,orderFinishDTO);
+                updateMongoDbByLogisticsOrder(kwtLogisticsOrder, orderFinishDTO);
             });
         }
+        //数据推送至贸易订单
+        CompleteLogisticsOrderParam tradeOrder = new CompleteLogisticsOrderParam();
+        //获取实际装货量-实际卸货量
+        Map<String, BigDecimal> map = kwtLogisticsOrderMapper.countAmountByTradeOrderId(logisticsOrder.getTOrderId());
+        //获取是否订单已经全部处理完成
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(LogisticsOrderEnum.TO_BE_PLANNED.getCode());
+        statusList.add(LogisticsOrderEnum.PENDING_ORDER.getCode());
+        statusList.add(LogisticsOrderEnum.WAIT_DELIVERY.getCode());
+        statusList.add(LogisticsOrderEnum.IN_TRANSIT.getCode());
+        List<KwtLogisticsOrder> logisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getTOrderId, logisticsOrder.getTOrderId())
+                .in(KwtLogisticsOrder::getStatus, statusList));
+        if (org.springframework.util.CollectionUtils.isEmpty(logisticsOrders)) {
+            tradeOrder.setIsAllComplete(true);
+        }
+        tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
+        tradeOrder.setActualLoadAmount(map.get("totalLoadAmount"));
+        tradeOrder.setActualUnloadAmount(map.get("totalUnloadAmount"));
+        tradeOrder.setUpdateBy(LoginUserHolder.getUserId());
+        tradeOrder.setUpdateByName(LoginUserHolder.getUserName());
+        HttpResult httpResult = tradeOrderInfoService.completeLogisticsOrder(tradeOrder);
+        if (httpResult.getCode() != HttpStatus.SUCCESS_CODE){
+            log.info("贸易订单手动完结订单异常,传递信息:{},返回信息:{}",JSONObject.toJSONString(tradeOrder),JSONObject.toJSONString(httpResult));
+            throw new BusinessException("单据完结出现错误!");
+        }
         //todo 直接订单完结-不递归操作
 //
 //        //存在子集
@@ -1216,7 +1255,7 @@ public class LogisticsConsignmentService {
         streamBridge.send("sckw-busSum", JSON.toJSONString(busSum));
     }
 
-    private void lllll(List<Map<String, Object>> list) {
+    private void recursionLogisticsOrder(List<Map<String, Object>> list) {
         if (!org.springframework.util.CollectionUtils.isEmpty(list) && list.size() > 0) {
             //倒序排序
 //                List<Map<String, Object>> maps = ListUtils.sortMapListByFeild(list, "level", "desc");
@@ -1288,7 +1327,7 @@ public class LogisticsConsignmentService {
                     }
                 }
             }
-            lllll(list);
+            recursionLogisticsOrder(list);
         }
     }
 

+ 106 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/dubbo/TransportDubboServiceImpl.java

@@ -1,14 +1,22 @@
 package com.sckw.transport.service.dubbo;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.core.common.enums.NumberConstant;
+import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.mongo.enums.BusinessTypeEnum;
+import com.sckw.mongo.model.SckwLogisticsOrder;
+import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.api.dubbo.TransportDubboService;
 import com.sckw.transport.api.model.dto.AddressResDTO;
 import com.sckw.transport.api.model.dto.vo.KwtLogisticsOrderVO;
 import com.sckw.transport.api.model.dto.vo.LogisticsOrderVO;
+import com.sckw.transport.api.model.param.LogisticsOrderParam;
 import com.sckw.transport.dao.KwtLogisticsOrderGoodsMapper;
 import com.sckw.transport.dao.KwtLogisticsOrderMapper;
 import com.sckw.transport.dao.KwtLogisticsOrderUnitMapper;
@@ -16,10 +24,13 @@ import com.sckw.transport.dao.KwtWaybillOrderMapper;
 import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.KwtLogisticsOrderUnit;
 import com.sckw.transport.model.KwtWaybillOrder;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -29,10 +40,14 @@ import java.util.*;
  * @description 运输服务dubbo接口
  * @date 2023-07-11 14:07:28
  */
+@Slf4j
 @Service
 @DubboService(group = "design", version = "2.0.0", timeout = 50000)
 public class TransportDubboServiceImpl implements TransportDubboService {
 
+    @Resource
+    private StreamBridge streamBridge;
+
     @DubboReference(version = "2.0.0", group = "design", check = false)
     RemoteSystemService remoteSystemService;
 
@@ -113,6 +128,97 @@ public class TransportDubboServiceImpl implements TransportDubboService {
         return null;
     }
 
+    /**
+     * 贸易订单验证物流订单是否已完成
+     *
+     * @param tOrderId 贸易订单id
+     * @return false 无操作中的物流订单  ture 存在操作中的物流订单
+     */
+    @Override
+    public boolean checkLogisticsOrderByTradeOrderId(Long tOrderId) {
+        boolean flag = false;
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(LogisticsOrderEnum.TO_BE_PLANNED.getCode());
+        statusList.add(LogisticsOrderEnum.PENDING_ORDER.getCode());
+        statusList.add(LogisticsOrderEnum.WAIT_DELIVERY.getCode());
+        statusList.add(LogisticsOrderEnum.IN_TRANSIT.getCode());
+        List<KwtLogisticsOrder> logisticsOrders = logisticsOrderMapper.selectList(
+                new LambdaQueryWrapper<KwtLogisticsOrder>()
+                        .eq(KwtLogisticsOrder::getTOrderId, tOrderId)
+                        .eq(KwtLogisticsOrder::getDelFlag, NumberConstant.ZERO)
+                        .in(KwtLogisticsOrder::getStatus, statusList)
+        );
+        if (!org.springframework.util.CollectionUtils.isEmpty(logisticsOrders)) {
+            flag = true;
+        }
+        return flag;
+    }
+
+    /**
+     * 对账修改物流订单信息
+     *
+     * @param logisticsOrderParam 请求物流订单数据
+     * @return
+     */
+    @Override
+    public HttpResult checkLogisticsOrderStatusById(LogisticsOrderParam logisticsOrderParam) {
+        HttpResult httpResult = new HttpResult();
+        log.info("对账修改物流订单参数:{}", JSONObject.toJSONString(logisticsOrderParam));
+        Long lOrderId = logisticsOrderParam.getLOrderId();
+        String status = logisticsOrderParam.getStatus();
+        if (lOrderId == null) {
+            httpResult.setMsg("物流订单不能为空!");
+            httpResult.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+            return httpResult;
+        }
+
+        LambdaQueryWrapper<KwtLogisticsOrder> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwtLogisticsOrder::getId, lOrderId);
+        wrapper.eq(KwtLogisticsOrder::getDelFlag, NumberConstant.ZERO);
+        KwtLogisticsOrder kwtLogisticsOrder = logisticsOrderMapper.selectOne(wrapper);
+        if (kwtLogisticsOrder == null) {
+            httpResult.setMsg("物流订单不存在!");
+            httpResult.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+            return httpResult;
+        }
+
+        if (LogisticsOrderEnum.HAVE_RECONCILED.getStatus().equals(status)) {
+            if (!LogisticsOrderEnum.HAVE_FINISHED.getStatus().equals(status)) {
+                httpResult.setMsg("物流单据状态有误,不能修改");
+                httpResult.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+                return httpResult;
+            }
+        } else if (LogisticsOrderEnum.HAVE_ALREADY_SETTLED.getStatus().equals(status)) {
+            if (!LogisticsOrderEnum.HAVE_RECONCILED.getStatus().equals(status)) {
+                httpResult.setMsg("物流单据状态有误,不能修改");
+                httpResult.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+                return httpResult;
+            }
+        } else {
+            httpResult.setMsg("物流单据状态有误");
+            httpResult.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+            return httpResult;
+        }
+        //修改单据状态
+        kwtLogisticsOrder.setStatus(Integer.valueOf(status));
+        kwtLogisticsOrder.setUpdateTime(new Date());
+        kwtLogisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+        logisticsOrderMapper.updateById(kwtLogisticsOrder);
+        //修改mongodb状态
+        SckwLogisticsOrder order = new SckwLogisticsOrder();
+        order.set_id(kwtLogisticsOrder.getId());
+        order.setLOrderId(kwtLogisticsOrder.getId());
+        order.setStatus(status);
+        order.setUpdateTime(new Date());
+        order.setUpdateByName(LoginUserHolder.getUserName());
+        SckwBusSum busSum = new SckwBusSum();
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        busSum.setMethod(NumberConstant.ONE);
+        busSum.setObject(order);
+        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+        return HttpResult.ok();
+    }
+
     /**
      * 根据企业id 获取物流订单相关地址信息
      *

+ 25 - 3
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

@@ -133,14 +133,15 @@
         FROM
         kwt_logistics_order a
         LEFT JOIN kwt_logistics_order_goods b ON a.id = b.l_order_id
+        LEFT JOIN kwt_logistics_order_unit d ON a.id = d.l_order_id
         LEFT JOIN kwt_logistics_order_contract c ON a.id=c.l_order_id
         <where>
-            a.del_flag = 0
+            a.del_flag = 0 and d.unit_type = 1
             <if test="dictId != null and dictId != ''">
                 AND a.payment = #{dictId}
             </if>
             <if test="logisticsOrderParam.companyId !=null and logisticsOrderParam.companyId != ''">
-                AND a.ent_id = #{logisticsOrderParam.companyId}
+                AND d.ent_id = #{logisticsOrderParam.companyId}
             </if>
             <if test="logisticsOrderParam.taxRate != null and logisticsOrderParam.taxRate != ''">
                 AND a.tax_rate = #{logisticsOrderParam.taxRate}
@@ -166,9 +167,10 @@
         FROM
         kwt_logistics_order a
         LEFT JOIN kwt_logistics_order_goods b ON a.id = b.l_order_id
+        LEFT JOIN kwt_logistics_order_unit d ON a.id = d.l_order_id
         LEFT JOIN kwt_logistics_order_contract c ON a.id=c.l_order_id
         <where>
-            a.del_flag = 0
+            a.del_flag = 0 and d.unit_type = 1
             <if test="dictId != null and dictId != ''">
                 AND a.payment = #{dictId}
             </if>
@@ -518,4 +520,24 @@
         WHERE del_flag = 0
           AND FIND_IN_SET(#{id}, pids)
     </select>
+
+    <select id="countAmountByTradeOrderId" resultType="java.util.Map">
+        SELECT
+            SUM(
+                    IFNULL( unload_amount, 0 )) as unloadAmount,
+            SUM(
+                    IFNULL( load_amount, 0 )) as loadAmount,
+            SUM(
+                    IFNULL( total_load_amount, 0 )) AS totalLoadAmount,
+            SUM(
+                    IFNULL( total_unload_amount, 0 )) AS totalUnloadAmount
+        FROM
+            kwt_logistics_order
+        WHERE
+            del_flag = 0
+          AND t_order_id = #{tOrderId}
+          AND `status`  IN (
+            8
+            )
+    </select>
 </mapper>

+ 4 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

@@ -153,6 +153,7 @@
         count(case when wo.status not in (1, 9, 11) then 1 end) totalComplete,
         count(case when wo.status not in (1, 9, 10, 11) then 1 end) totalTake,
         count(case when wo.status not in (3, 4, 5, 6) then 1 end) totalExecute,
+        count(DISTINCT case when lo.status not in (0, 1, 2, 3) then lo.id end) totalUnfinished,
         IFNULL(SUM(wo.entrust_amount), 0.0) entrustAmount, IFNULL(SUM(wo.load_amount), 0.0) loadAmount,
         IFNULL(SUM(wo.unload_amount), 0.0) unloadAmount, IFNULL(SUM(wo.deficit_amount), 0.0) deficitAmount,
         MIN(wot1.operate_time) loadTime, MAX(wot2.operate_time) unloadTime
@@ -161,6 +162,9 @@
         left join kwt_waybill_order_ticket wot2 on wot2.w_order_id = wo.id and wot2.type = 2 and wot2.del_flag = 0
         left join kwt_logistics_order lo on lo.id = wo.l_order_id
         where wo.del_flag = 0 and lo.del_flag = 0
+        <if test="tOrderId != null and tOrderId != ''">
+            and lo.t_order_id = #{tOrderId, jdbcType=BIGINT}
+        </if>
         <if test="lOrderId != null and lOrderId != ''">
             and lo.id = #{lOrderId, jdbcType=BIGINT}
         </if>