浏览代码

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

donglang 2 月之前
父节点
当前提交
8ca9b4355d

+ 4 - 4
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java

@@ -1,9 +1,6 @@
 package com.sckw.fleet.api;
 
-import com.sckw.fleet.api.model.vo.RDriverDetailVo;
-import com.sckw.fleet.api.model.vo.RDriverVo;
-import com.sckw.fleet.api.model.vo.RTruckRouteVo;
-import com.sckw.fleet.api.model.vo.RTruckVo;
+import com.sckw.fleet.api.model.vo.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -91,4 +88,7 @@ public interface RemoteFleetService {
 
     void saveOrUpdate(RTruckRouteVo params);
 
+    RDriverVo findDriverByPhone(String mobile);
+
+    RFleetDriverVo findFleetByDriveId(Long driveId);
 }

+ 31 - 0
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/model/vo/RFleetDriverVo.java

@@ -0,0 +1,31 @@
+package com.sckw.fleet.api.model.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * @author PC
+ */
+@Data
+public class RFleetDriverVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2995208083876944213L;
+    /**
+     * 车队id
+     */
+    private Long fleetId;
+
+    /**
+     * 车队名称
+     */
+    private Long driverId;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+}

+ 38 - 4
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java

@@ -1,15 +1,13 @@
 package com.sckw.fleet.dubbo;
 
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.NumberUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.fleet.api.RemoteFleetService;
-import com.sckw.fleet.api.model.vo.RDriverDetailVo;
-import com.sckw.fleet.api.model.vo.RDriverVo;
-import com.sckw.fleet.api.model.vo.RTruckRouteVo;
-import com.sckw.fleet.api.model.vo.RTruckVo;
+import com.sckw.fleet.api.model.vo.*;
 import com.sckw.fleet.dao.KwfDriverMapper;
 import com.sckw.fleet.dao.KwfTruckMapper;
 import com.sckw.fleet.model.*;
@@ -250,6 +248,42 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
         }
     }
 
+    @Override
+    public RDriverVo findDriverByPhone(String mobile) {
+
+        KwfDriver kwfDriver = driverRepository.queryOneByPhone(mobile);
+        if (Objects.isNull(kwfDriver)){
+            throw new BusinessException("司机信息不存在");
+        }
+        return getRDriverVo(kwfDriver);
+    }
+
+    @Override
+    public RFleetDriverVo findFleetByDriveId(Long driveId) {
+        KwfFleetDriver fleetByDriver = kwfFleetDriverRepository.findFleetByDriveId(driveId);
+        if (Objects.isNull(fleetByDriver)){
+            throw new BusinessException("司机车队信息不存在");
+        }
+        RFleetDriverVo rFleetDriverVo = new RFleetDriverVo();
+        rFleetDriverVo.setFleetId(fleetByDriver.getFleetId());
+        rFleetDriverVo.setDriverId(fleetByDriver.getDriverId());
+        rFleetDriverVo.setEntId(fleetByDriver.getEntId());
+        return rFleetDriverVo;
+    }
+
+    private static RDriverVo getRDriverVo(KwfDriver kwfDriver) {
+        RDriverVo rDriverVo = new RDriverVo();
+        rDriverVo.setId(kwfDriver.getId());
+        rDriverVo.setName(kwfDriver.getName());
+        rDriverVo.setPhone(kwfDriver.getPhone());
+        rDriverVo.setIdcard(kwfDriver.getIdcard());
+        rDriverVo.setTotalComplete(kwfDriver.getTotalComplete());
+        rDriverVo.setTotalTake(kwfDriver.getTotalTake());
+        rDriverVo.setTotalWeight(kwfDriver.getTotalWeight());
+        rDriverVo.setBusinessStatus(kwfDriver.getBusinessStatus());
+        return rDriverVo;
+    }
+
     private void updateTruckRoute(RTruckRouteVo params, KwfTruckRoute updateTruckRoute, KwfTruckRoute truckRoute) {
         updateTruckRoute.setId(truckRoute.getId());
         updateTruckRoute.setStartPoint(params.getStartPoint());

+ 8 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetDriverRepository.java

@@ -21,4 +21,12 @@ public class KwfFleetDriverRepository extends ServiceImpl<KwfFleetDriverMapper,
                 .orderByDesc(BaseModel::getUpdateTime)
                 .last("limit 1"));
     }
+
+    public KwfFleetDriver findFleetByDriveId(Long driveId) {
+        return getOne(Wrappers.<KwfFleetDriver>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .eq(KwfFleetDriver::getDriverId,driveId)
+                .orderByDesc(BaseModel::getId)
+                .last("limit 1"));
+    }
 }

+ 19 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.transport.dao.KwtWaybillOrderMapper;
 import com.sckw.transport.model.KwtWaybillOrder;
 import org.springframework.stereotype.Repository;
@@ -41,4 +42,22 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
     }
 
 
+    public KwtWaybillOrder findOneByDriverId(Long driverId) {
+        //获取任务中的状态
+        List<Integer> tasking = CarWaybillEnum.getTasking();
+        return getOne(Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .eq(KwtWaybillOrder::getDriverId, driverId)
+                .eq(KwtWaybillOrder::getDelFlag, 0)
+                .in(KwtWaybillOrder::getStatus, tasking)
+                .orderByDesc(KwtWaybillOrder::getId)
+                .last("limit 1"));
+    }
+
+    public KwtWaybillOrder findOneByTruckNo(String truckNo) {
+        return getOne(Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .eq(KwtWaybillOrder::getDelFlag,0)
+                .eq(KwtWaybillOrder::getTruckNo,truckNo)
+                .orderByDesc(KwtWaybillOrder::getId)
+                .last("limit 1"));
+    }
 }

+ 106 - 13
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -11,8 +11,12 @@ import com.sckw.core.model.enums.AddressTypeEnum;
 import com.sckw.core.model.enums.CarWaybillEnum;
 import com.sckw.core.model.page.PageResult;
 
+import com.sckw.core.reponse.CollectZjxlResponse;
+import com.sckw.core.service.VehicleCollectService;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.fleet.api.model.vo.RDriverDetailVo;
+import com.sckw.fleet.api.model.vo.RDriverVo;
+import com.sckw.fleet.api.model.vo.RFleetDriverVo;
 import com.sckw.transport.common.config.UrlConfigProperties;
 import com.sckw.core.utils.DateUtils;
 import com.sckw.core.utils.HttpUtil;
@@ -43,6 +47,7 @@ import com.sckw.transport.model.vo.TruckInfoVo;
 import com.sckw.transport.repository.KwtWaybillOrderAddressRepository;
 import com.sckw.transport.repository.KwtWaybillOrderRepository;
 import com.sckw.transport.repository.KwtWaybillOrderSubtaskRepository;
+import jakarta.annotation.Resource;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -50,6 +55,7 @@ import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.poi.ss.formula.functions.T;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -68,6 +74,8 @@ public class kwfTruckTraceService {
     private final KwtWaybillOrderAddressRepository kwtWaybillOrderAddressRepository;
     private final UrlConfigProperties urlConfigProperties;
     private final KwtWaybillOrderSubtaskRepository kwtWaybillOrderSubtaskRepository;
+    @Resource
+    private VehicleCollectService vehicleCollectService;
 
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     RemoteSystemService remoteSystemService;
@@ -204,22 +212,57 @@ public class kwfTruckTraceService {
             return TruckInfoVo.toTruckInfoVo(truckDto);
         }
         //缓存没有则查询数据中台
-        List<VehicleReturnData> vehicleReturnData = getVehicleReturnData(wOrderNo);
-        if (CollectionUtils.isNotEmpty(vehicleReturnData)){
+        VehicleReturnData vehicleReturnData = getVehicleReturnData(wOrderNo);
+        if (Objects.nonNull(vehicleReturnData)){
             return buildTruckInfo(wOrderNo, vehicleReturnData);
         }
         //todo 查询中交 如果数据中台没有数据则查询中交
-        return new TruckInfoVo();
+        return getTruckInfoVoByZj(truckNo, wOrderNo);
+    }
+
+
+    private TruckInfoVo getTruckInfoVoByZj(String truckNo, String wOrderNo) {
+        CollectZjxlResponse collectZjxlResponse = vehicleCollectService.transTimeManage(truckNo);
+        TruckInfoVo instance = TruckInfoVo.getInstance();
+        instance.setWOrderNo(wOrderNo);
+        instance.setTruckNo(truckNo);
+        instance.setGpsStatus(collectZjxlResponse.getResult().getFirstVcl().getSpd());
+        instance.setLongitude(collectZjxlResponse.getResult().getFirstVcl().getLon());
+        instance.setLatitude(collectZjxlResponse.getResult().getFirstVcl().getLat());
+        instance.setLocationTime(collectZjxlResponse.getResult().getFirstVcl().getOfflineTime());
+        //查询关联订单号
+        KwtWaybillOrder oneByTruckNo = kwtWaybillOrderRepository.findOneByTruckNo(truckNo);
+
+        KwtWaybillOrderSubtask waybillOrderSubtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(oneByTruckNo.getWOrderNo());
+        instance.setLOrderNo(Objects.nonNull(waybillOrderSubtask) && Objects.nonNull(waybillOrderSubtask.getLOrderId())
+                ? String.valueOf(waybillOrderSubtask.getLOrderId()) : "");
+        String startPoint = "";
+        String endPoint = "";
+        if (Objects.nonNull(waybillOrderSubtask)){
+            List<KwtWaybillOrderAddress> kwtWaybillOrderAddresses = kwtWaybillOrderAddressRepository.queryByWOrderId(waybillOrderSubtask.getWOrderId());
+            if (CollectionUtils.isNotEmpty(kwtWaybillOrderAddresses)){
+                for (KwtWaybillOrderAddress e : kwtWaybillOrderAddresses) {
+                    if (Objects.equals(e.getAddressType(), AddressTypeEnum.SHIPMENT.getCode())) {
+                        startPoint = e.getDetailAddress();
+                    }
+                    if (Objects.equals(e.getAddressType(), AddressTypeEnum.TAKE.getCode())) {
+                        endPoint = e.getDetailAddress();
+                    }
+                }
+            }
+        }
+
+        instance.setTaskAddress(startPoint+"-"+endPoint);
+        return instance;
     }
 
     /**
      * 将数据中台的数据进行组织
      * @param wOrderNo 运单号
-     * @param vehicleReturnData 中台数据
+     * @param vehicleReturn 中台数据
      * @return 组织的数据
      */
-    private TruckInfoVo buildTruckInfo(String wOrderNo, List<VehicleReturnData> vehicleReturnData) {
-        VehicleReturnData vehicleReturn = vehicleReturnData.get(0);
+    private TruckInfoVo buildTruckInfo(String wOrderNo, VehicleReturnData vehicleReturn) {
         TruckInfoVo truckInfoVo = TruckInfoVo.getInstance();
         truckInfoVo.setWOrderNo(vehicleReturn.getWOrderNo());
         truckInfoVo.setTruckNo(vehicleReturn.getCarNo());
@@ -229,7 +272,24 @@ public class kwfTruckTraceService {
         truckInfoVo.setLocationTime(Objects.isNull(vehicleReturn.getTs())? "" : DateUtils.format(vehicleReturn.getTs(),DateUtils.DATE_TIME_PATTERN));
         KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(wOrderNo);
         truckInfoVo.setLOrderNo(Objects.isNull(subtask) ? "" : String.valueOf(subtask.getLOrderId()));
-        truckInfoVo.setTaskAddress("");
+        if (Objects.isNull(subtask)){
+            return truckInfoVo;
+        }
+        List<KwtWaybillOrderAddress> kwtWaybillOrderAddresses = kwtWaybillOrderAddressRepository.queryByWOrderId(subtask.getWOrderId());
+        if (CollectionUtils.isEmpty(kwtWaybillOrderAddresses)){
+            return truckInfoVo;
+        }
+        String startPoint = "";
+        String endPoint = "";
+        for (KwtWaybillOrderAddress kwtWaybillOrderAddress : kwtWaybillOrderAddresses) {
+            if (Objects.equals(kwtWaybillOrderAddress.getAddressType(), AddressTypeEnum.SHIPMENT.getCode())) {
+                startPoint = kwtWaybillOrderAddress.getDetailAddress();
+            }
+            if (Objects.equals(kwtWaybillOrderAddress.getAddressType(), AddressTypeEnum.TAKE.getCode())) {
+               endPoint = kwtWaybillOrderAddress.getDetailAddress();
+            }
+        }
+        truckInfoVo.setTaskAddress(startPoint+"-"+endPoint);
         return truckInfoVo;
     }
 
@@ -245,7 +305,7 @@ public class kwfTruckTraceService {
             return new CurrentTaskTraceReqVo();
         }
         //查询数据中台获取轨迹
-        List<VehicleReturnData> vehicleReturnDataList = getVehicleReturnData(req.getWOrderNo());
+        List<VehicleReturnData> vehicleReturnDataList = getVehicleReturnDataList(req.getWOrderNo());
         if (CollectionUtils.isEmpty(vehicleReturnDataList)){
             return new CurrentTaskTraceReqVo();
         }
@@ -265,7 +325,7 @@ public class kwfTruckTraceService {
      * @param wOrderNo 运单号
      * @return 轨迹数据
      */
-    private List<VehicleReturnData> getVehicleReturnData(String wOrderNo) {
+    private List<VehicleReturnData> getVehicleReturnDataList(String wOrderNo) {
         VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
         vehicleDataDTO.setWOrderNo(wOrderNo);
         String s;
@@ -281,6 +341,22 @@ public class kwfTruckTraceService {
         return JSON.parseArray(s, VehicleReturnData.class);
     }
 
+    private VehicleReturnData getVehicleReturnData(String wOrderNo) {
+        VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
+        vehicleDataDTO.setWOrderNo(wOrderNo);
+        String s;
+        try {
+            s = HttpUtil.postJson(urlConfigProperties.getApiBaseUrl()+ UrlConstants.QUERY_REAL_TIME_TRACE_URL, JSON.toJSONString(vehicleDataDTO), null);
+        } catch (Exception e) {
+            log.error("查询任务轨迹异常",e);
+            throw new BusinessException("查询任务轨迹异常");
+        }
+        if (StringUtils.isBlank(s)){
+            return null;
+        }
+        return JSON.parseObject(s, VehicleReturnData.class);
+    }
+
     private static CurrentTaskTraceReqVo.CurrentTaskTrace getCurrentTaskTrace(VehicleReturnData e) {
         CurrentTaskTraceReqVo.CurrentTaskTrace currentTaskTrace = new CurrentTaskTraceReqVo.CurrentTaskTrace();
         currentTaskTrace.setLongitude(e.getLongitude());
@@ -311,10 +387,27 @@ public class kwfTruckTraceService {
      */
     public Void vehiclesTrajectory(@Valid VehiclesTrajectoryReq req) {
         //通过手机号查询司机以及车辆信息
-//        RTruckVo driveAndTruck = fleetService.findDriveAndTruckByPhone(req.getMobile());
-//        if (Objects.isNull(driveAndTruck)){
-//            throw new BusinessException("司机信息不存在");
-//        }
+        RDriverVo rDriverVo = fleetService.findDriverByPhone(req.getMobile());
+        if (Objects.isNull(rDriverVo)){
+            throw new BusinessException("司机信息不存在");
+        }
+        //查询认为中的运单信息
+        KwtWaybillOrder waybillOrder = kwtWaybillOrderRepository.findOneByDriverId(rDriverVo.getId());
+        //获取车队信息
+        RFleetDriverVo fleetByDriveId = fleetService.findFleetByDriveId(rDriverVo.getId());
+
+
+        VehiclesTrajectoryReq.VehicleDataVO vehicleDataVO = new VehiclesTrajectoryReq.VehicleDataVO();
+        String truckNo = Optional.ofNullable(waybillOrder)
+                .map(KwtWaybillOrder::getTruckNo)
+                .orElse("");
+        req.setTruckNo(truckNo);
+        vehicleDataVO.setCarNo(truckNo);
+
+        vehicleDataVO.setFleetId(String.valueOf(Optional.ofNullable(fleetByDriveId)
+                .map(RFleetDriverVo::getFleetId)
+                .orElse(null)));
+        req.setVehicleDataVO(vehicleDataVO);
 
         try {
             String url = urlConfigProperties.getApiBaseUrl();

+ 1 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/zj/VehicleCollectService.java

@@ -9,6 +9,7 @@ import com.sckw.transport.response.CollectZjxlResponse;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.stereotype.Service;
 
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;

+ 0 - 16
sql/2025/10/30/2025_10_30_cxf_alert.sql

@@ -10,19 +10,3 @@ ALTER TABLE kwf_truck ADD drive_mode varchar(255)    NOT NULL default ''      co
 ALTER TABLE kwt_waybill_order ADD task_start_time datetime NOT NULL default '1000-01-01 00:00:00' comment '任务开始时间';
 ALTER TABLE kwt_waybill_order ADD task_end_time datetime NOT NULL default '1000-01-01 00:00:00' comment '任务结束时间';
 
-
-create table kwf_truck_route
-(
-    id          bigint        not null comment '主键'
-        primary key,
-    fleet_id    bigint        null comment '车队id',
-    driver_id   bigint        null comment '司机id',
-    ent_id      bigint        not null comment '企业id',
-    start_point      varchar(400)  null comment '起始点',
-    unloading_Point      int default 0 not null comment '卸货地点',
-    shortest_time varchar(10)        not null  comment '最短时间',
-    create_time datetime      not null default current_timestamp comment '创建时间',
-    update_time datetime      not null default current_timestamp on update current_timestamp comment '更新时间',
-    del_flag    tinyint       not null default 0 comment '是否删除(0未删除,1删除)'
-)
-    comment '车辆惯用线路信息表';

+ 2 - 2
sql/2025/10/30/2025_10_30_cxf_create.sql

@@ -2,14 +2,14 @@
 
 create table kwf_truck_route
 (
-    id          bigint        not null comment '主键'
+    id          bigint        not null AUTO_INCREMENT comment '主键'
         primary key,
     fleet_id    bigint        not null default 0 comment '车队id',
     driver_id   bigint        not null default 0 comment '司机id',
     ent_id      bigint        not null default 0 comment '企业id',
     start_point      varchar(400)  not null default '' comment '起始点',
     unloading_Point   varchar(400)  not null default '' comment '卸货地点',
-    shortest_time varchar(10)        not null  comment '最短时间',
+    shortest_time varchar(10)        not null default  '' comment '最短时间',
     create_time datetime      not null default current_timestamp comment '创建时间',
     update_time datetime      not null default current_timestamp on update current_timestamp comment '更新时间',
     del_flag    tinyint       not null default 0 comment '是否删除(0未删除,1删除)'