From 41ecbff2b97d26ce821edf6d4cb050e8f9fdf6f3 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 09 五月 2026 09:39:39 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/1.0' into 1.0

---
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/RouteOptionVo.java                                          |    3 
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetOperationsController.java    |   14 ++
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/operation/XpPointSituationReportQuery.java                         |    2 
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java                    |   67 +++++++-
 xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserMapper.xml                                   |   14 +
 xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/TaskUtil.java                           |    2 
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpVehicleModelMapper.java                    |    2 
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java                 |   31 ++-
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/exportExcle/XpPointSituationReportExportExcel.java      |    4 
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleModelServiceImpl.java         |   18 +-
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/vehicleConvoy/XpFleetOperations.java                               |    5 
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/account/OptionalUsersPageListQuery.java                            |    3 
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/mapper/XpFleetOperationsMapper.java            |    5 
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/test/OrderTest.java                                  |    1 
 xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java                  |   52 +++++--
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/MultiRouteAndFareVo.java                                    |    1 
 xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpPointSituationReportMapper.xml                         |   36 ++++
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/vehicleConvoy/XpFleetOperationsClientFallbackFactory.java        |   12 +
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/XpFleetOperationsClient.java                   |    8 +
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/XpOperationsUserPositionDTO.java                             |    7 +
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpFleetOperationsService.java         |    3 
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpVehicleModelService.java                 |    4 
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpUserRoutePlanRuleController.java               |   19 ++
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpVehicleModel.java                                    |    2 
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/account/XpOperationsUserWithRoleVO.java                               |    4 
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java    |    8 +
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/RouteAndFareVo.java                                         |    2 
 xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PositionMsgHandler.java          |    6 
 xp-robotaxi-vehicle-convoy-boot/src/main/resources/mapper/vehicleConvoy/XpFleetOperationsMapper.xml                     |   15 ++
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java            |   10 
 xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetOperationsServiceImpl.java |    8 +
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/enums/RouteStrategyKind.java                                             |    4 
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointSituationReportServiceImpl.java     |    3 
 33 files changed, 310 insertions(+), 65 deletions(-)

diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpUserRoutePlanRuleController.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpUserRoutePlanRuleController.java
index fc02667..18b216c 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpUserRoutePlanRuleController.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpUserRoutePlanRuleController.java
@@ -2,12 +2,20 @@
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xiaopeng.account.model.vo.XpAppUserCouponListVo;
 import com.xiaopeng.account.service.IXpUserRoutePlanRuleService;
 import com.xiaopeng.api.model.account.XpUserRoutePlanRule;
+import com.xiaopeng.api.query.account.XpAppUserCouponPageListQuery;
+import com.xiaopeng.api.vo.operation.RoutePreferenceItemVo;
 import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.web.page.PageInfo;
+import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 
 /**
@@ -33,4 +41,15 @@
         return R.ok(one);
     }
 
+
+    @PostMapping("/v1/api/mini-program/userRoutePlanRule/getXpUserRoutePlanRule")
+    @ApiOperation(value = "获取用户导航偏好设置",tags = {"小程序-获取用户导航偏好设置"},response = XpUserRoutePlanRule.class)
+    @XpClientCheck(checkToken = false, checkOtpToken = true)
+    public R<XpUserRoutePlanRule> listRoutePreferences( HttpServletRequest request) {
+        String uid = request.getHeader("XP-Uid");
+        XpUserRoutePlanRule one = xpUserRoutePlanRuleService.getOne(new LambdaQueryWrapper<XpUserRoutePlanRule>().eq(XpUserRoutePlanRule::getUserId, uid)
+                .eq(XpUserRoutePlanRule::getDeleted, 0));
+        return R.ok(one);
+    }
+
 }
diff --git a/xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserMapper.xml b/xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserMapper.xml
index cebe16b..0a6762a 100644
--- a/xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserMapper.xml
+++ b/xp-robotaxi-account-boot/src/main/resources/mapper/account/XpOperationsUserMapper.xml
@@ -135,7 +135,19 @@
 
         </where>
         GROUP BY u.id
-        ORDER BY u.create_time DESC
+        <choose>
+            <when test="query.orderByField != null and  query.orderByField == 1">
+                ORDER BY FIELD
+                <foreach collection="query.ids" item="id" open=" (u.id," separator="," close=")">
+                    #{id}
+                </foreach>
+            </when>
+            <otherwise>
+                ORDER BY u.create_time DESC
+            </otherwise>
+        </choose>
+
+
     </select>
 
 </mapper>
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/XpOperationsUserPositionDTO.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/XpOperationsUserPositionDTO.java
index 483c401..6340bd0 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/XpOperationsUserPositionDTO.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/account/XpOperationsUserPositionDTO.java
@@ -11,6 +11,9 @@
 import org.springframework.data.mongodb.core.index.GeoSpatialIndexType;
 import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
 import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
 
 /**
  * 运维人员查询条件DTO
@@ -36,6 +39,10 @@
     @ApiModelProperty(value = "纬度")
     private double longitude;
 
+
+    @ApiModelProperty(value = "时间")
+    private Long updateTime;
+
     @GeoSpatialIndexed(type = GeoSpatialIndexType.GEO_2DSPHERE)
     private GeoJsonPoint location;
 
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/enums/RouteStrategyKind.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/enums/RouteStrategyKind.java
index 8da2600..c844297 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/enums/RouteStrategyKind.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/enums/RouteStrategyKind.java
@@ -95,6 +95,10 @@
         return Optional.ofNullable(AMAP_STRATEGY_INDEX.get(strategy));
     }
 
+    public static RouteStrategyKind getStrategy(int strategy) {
+        return AMAP_STRATEGY_INDEX.get(strategy);
+    }
+
     public static List<RouteStrategyKind> orderedValues() {
         return ORDERED_VALUES;
     }
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/vehicleConvoy/XpFleetOperationsClientFallbackFactory.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/vehicleConvoy/XpFleetOperationsClientFallbackFactory.java
index 9769185..0227d3f 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/vehicleConvoy/XpFleetOperationsClientFallbackFactory.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/vehicleConvoy/XpFleetOperationsClientFallbackFactory.java
@@ -5,10 +5,16 @@
 import com.xiaopeng.api.model.vehicleConvoy.XpFleetOperations;
 import com.xiaopeng.common.core.domain.R;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections4.ListUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.cloud.openfeign.FallbackFactory;
 import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -37,6 +43,12 @@
             }
 
             @Override
+            public R<List<XpFleetOperations>> findListByUserIds(@RequestBody List<Long> userIds){
+                log.error("根据人员id 获取所属车队,人员IDs: {},原因: {}", userIds.toString(), cause.getMessage());
+                return R.ok(new ArrayList<>());
+            }
+
+            @Override
             public R<List<Long>> getFleetIdsByUserId(Long userId) {
                 log.error("根据人员ID获取车队信息失败 {}",  cause.getMessage());
                 return R.fail("根据人员ID获取车队信息失败");
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/XpFleetOperationsClient.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/XpFleetOperationsClient.java
index ee14198..3f33b8c 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/XpFleetOperationsClient.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/vehicleConvoy/XpFleetOperationsClient.java
@@ -42,6 +42,14 @@
     R<List<XpFleet>> getFleetByUserId(@PathVariable("id") Long id);
 
     /**
+     * 根据人员id 获取所属车队
+     * @param userIds 运维人员id
+     * @return
+     */
+    @PostMapping("/logan/inner/fleet-operations/findListByUserIds")
+    R<List<XpFleetOperations>> findListByUserIds(@RequestBody List<Long> userIds);
+
+    /**
      * 根据运维人员ID查询关联的车队ID列表
      *
      * @param userId 运维人员ID
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpVehicleModel.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpVehicleModel.java
index 9e44e89..209f88a 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpVehicleModel.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpVehicleModel.java
@@ -25,7 +25,7 @@
 
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.NONE)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
     @ApiModelProperty(value = "名称")
     @NotBlank(message = "名称不能为空")
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/vehicleConvoy/XpFleetOperations.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/vehicleConvoy/XpFleetOperations.java
index 3191cfe..7fe71e4 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/vehicleConvoy/XpFleetOperations.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/vehicleConvoy/XpFleetOperations.java
@@ -1,5 +1,6 @@
 package com.xiaopeng.api.model.vehicleConvoy;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -35,4 +36,8 @@
     private Long operationsUserId;
 
 
+    @ApiModelProperty(value = "车队名称")
+    @TableField(exist = false)
+    private String fleetName;
+
 }
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/account/OptionalUsersPageListQuery.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/account/OptionalUsersPageListQuery.java
index 1c2e2b2..22529a1 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/account/OptionalUsersPageListQuery.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/account/OptionalUsersPageListQuery.java
@@ -18,4 +18,7 @@
 
     List<Long> ids;
 
+    //null默认 1=ids
+    Integer orderByField;
+
 }
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/operation/XpPointSituationReportQuery.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/operation/XpPointSituationReportQuery.java
index e121b8d..bffdb17 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/operation/XpPointSituationReportQuery.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/operation/XpPointSituationReportQuery.java
@@ -22,7 +22,7 @@
     @ApiModelProperty(value = "点位编号唯一")
     private String pointNumber;
 
-    @ApiModelProperty(value = "点位状态值")
+    @ApiModelProperty(value = "点位状态值 1待测试 2测试中 3测试不通过 4可运营 5待生效 6启用中 7已停用 8失效")
     private String pointStatusValue;
 
     /**
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/account/XpOperationsUserWithRoleVO.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/account/XpOperationsUserWithRoleVO.java
index 47febf0..85038f9 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/account/XpOperationsUserWithRoleVO.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/account/XpOperationsUserWithRoleVO.java
@@ -24,4 +24,8 @@
 
     @ApiModelProperty(value = "和事故地点距离")
     private Double dis;
+
+    @ApiModelProperty(value = "车队名")
+    private String fleetName;
+
 }
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/MultiRouteAndFareVo.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/MultiRouteAndFareVo.java
index 608208c..94a3d7b 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/MultiRouteAndFareVo.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/MultiRouteAndFareVo.java
@@ -32,4 +32,5 @@
     private Double priceWaveThresholdPercent;
     @ApiModelProperty(value = "是否开启试运营(0=否,1=是)")
     private Integer operateFree;
+
 }
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/RouteAndFareVo.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/RouteAndFareVo.java
index ad932da..e338f9f 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/RouteAndFareVo.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/RouteAndFareVo.java
@@ -33,6 +33,8 @@
     @ApiModelProperty(value = "策略id")
     private Integer amapStrategy;
 
+    @ApiModelProperty(value = "交通信号灯")
+    private Integer trafficLights;
 
 
 }
diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/RouteOptionVo.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/RouteOptionVo.java
index cd55be8..77a95ea 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/RouteOptionVo.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/RouteOptionVo.java
@@ -27,6 +27,8 @@
 
     @ApiModelProperty("主策略对应的高德 strategy,用于下单/队列")
     private Integer primaryRoutePlanRule;
+    @ApiModelProperty(value = "导航策略名称")
+    private String primaryRoutePlanName;
 
     @ApiModelProperty("路线几何与耗时距离")
     private RouteVo route;
@@ -39,4 +41,5 @@
 
     @ApiModelProperty("优惠券不可用时的提示(无可用券时)")
     private String couponMessage;
+
 }
diff --git a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/TaskUtil.java b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/TaskUtil.java
index 7001364..c4b7a99 100644
--- a/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/TaskUtil.java
+++ b/xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/util/TaskUtil.java
@@ -19,7 +19,7 @@
     private MongoTemplate mongoTemplate;
 
     //删除过期的车辆定位数据
-    @Scheduled(cron = "0/30 * * * * ?")
+//    @Scheduled(cron = "0/30 * * * * ?")
     public void task() {
         log.info("执行删除无效的车辆定位数据");
         mongoTemplate.remove(Query.query(Criteria.where("addTime").isNull()), VehiclePosition.class);
diff --git a/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java b/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
index ec11618..6aad12d 100644
--- a/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
+++ b/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
@@ -1107,6 +1107,7 @@
         fareVo.setSystemDiscount(new BigDecimal(fareVo.getSystemDiscount() == null ? 0 : fareVo.getSystemDiscount()).setScale(2, RoundingMode.HALF_UP).doubleValue());
         routeAndFareVo.setFareEstimate(fareVo);
         routeAndFareVo.getXpPricingCard().setFinalFareStr(fareVo.getFinalFareStr());
+//        routeAndFareVo.setTrafficLights();//交通信号灯 todo 20260508 红绿灯功能还没有
         fareVo.setId(null);
         return routeAndFareVo;
     }
@@ -1136,7 +1137,7 @@
             throw new ServiceException("当前区域未开通服务", I18nKeyConstant.NO_CURRENT_REGION);
         }
 
-        StrategyPlanningConfig planningConfig = buildStrategyKindsForPlanning(userId, routeAndFareDto.getOpenCityId());
+        StrategyPlanningConfig planningConfig = this.buildStrategyKindsForPlanning(userId, routeAndFareDto.getOpenCityId());
         List<RouteStrategyKind> kinds = planningConfig.getKinds();
         Map<String, RouteVo> routeById = new LinkedHashMap<>();
         Map<String, Set<RouteStrategyKind>> strategiesById = new LinkedHashMap<>();
@@ -1186,6 +1187,7 @@
             opt.setStrategyLabels(labels);
             opt.setPrimaryStrategyLabel(resolveStrategyDisplayName(primary, planningConfig.getDisplayNames()));
             opt.setPrimaryRoutePlanRule(primary.getAmapStrategy());
+            opt.setPrimaryRoutePlanName(primary.getDisplayName());
             opt.setRoute(part.getRoute());
             opt.setFareEstimate(part.getFareEstimate());
             opt.setXpPricingCard(part.getXpPricingCard());
@@ -1195,6 +1197,15 @@
             opt.setOperateFree(operateFree);
             options.add(opt);
         }
+
+        // 根据 pathFingerprint 去重,保留第一次出现的路线
+//        options = new ArrayList<>(options.stream()
+//                .collect(Collectors.toMap(
+//                        RouteOptionVo::getPathFingerprint,
+//                        option -> option,
+//                        (existing, replacement) -> existing,
+//                        LinkedHashMap::new
+//                )).values());
 
         RouteStrategyKind userPref = resolveUserPreferredKind(userId).orElse(RouteStrategyKind.SMART);
         options.sort((a, b) -> compareRouteOptionByUserPreference(a, b, userPref, strategiesById));
@@ -1299,22 +1310,25 @@
     @Override
     public List<RoutePreferenceItemVo> listRoutePreferences(Long openCityId, String userId) {
         Set<String> enabledCodes = parseEnabledPreferenceCodes();
-        Optional<RouteStrategyKind> savedPref = resolveUserPreferredKind(userId);
-        Map<RouteStrategyKind, String> displayNames = buildStrategyKindsForPlanning(userId, openCityId).getDisplayNames();
+        Optional<RouteStrategyKind> savedPref = resolveUserPreferredKind(userId);//获取用户设置的路线偏好
+        List<XpRoutePlan> routePlans = findRoutePlans(openCityId);
+
         List<RoutePreferenceItemVo> list = new ArrayList<>();
-        int i = 0;
-        for (RouteStrategyKind k : RouteStrategyKind.orderedValues()) {
-            if (!enabledCodes.contains(k.name())) {
-                continue;
+        if(CollUtil.isNotEmpty(routePlans)){
+            int i = 0;
+            for (XpRoutePlan routePlan : routePlans) {
+                RoutePreferenceItemVo v = new RoutePreferenceItemVo();
+                RouteStrategyKind strategy = RouteStrategyKind.getStrategy(routePlan.getRoutePlanRule());
+                if(strategy != null){
+                    v.setCode(strategy.name());
+                }
+                v.setName(routePlan.getPlanName());
+                v.setEnabled(true);
+                v.setSortOrder(i++);
+                v.setAmapStrategy(routePlan.getRoutePlanRule());
+                v.setSelected(savedPref.isPresent() && strategy == savedPref.get());
+                list.add(v);
             }
-            RoutePreferenceItemVo v = new RoutePreferenceItemVo();
-            v.setCode(k.name());
-            v.setName(resolveStrategyDisplayName(k, displayNames));
-            v.setEnabled(true);
-            v.setSortOrder(i++);
-            v.setAmapStrategy(k.getAmapStrategy());
-            v.setSelected(savedPref.isPresent() && k == savedPref.get());
-            list.add(v);
         }
         return list;
     }
@@ -1346,11 +1360,17 @@
         return set;
     }
 
+    private List<XpRoutePlan> findRoutePlans (Long openCityId){
+        return xpRoutePlanMapper.selectList(new LambdaQueryWrapper<XpRoutePlan>().eq(XpRoutePlan::getOpenCityId, openCityId)
+                .eq(XpRoutePlan::getAuditStatus, 2));
+    }
+
     /**
      * 用户偏好策略优先请求,其余策略仍请求以便合并去重。
      */
     private StrategyPlanningConfig buildStrategyKindsForPlanning(String userId, Long openCityId) {
-        List<XpRoutePlan> xpRoutePlans = xpRoutePlanMapper.selectList(new LambdaQueryWrapper<XpRoutePlan>().eq(XpRoutePlan::getOpenCityId, openCityId));
+        List<XpRoutePlan> xpRoutePlans = xpRoutePlanMapper.selectList(new LambdaQueryWrapper<XpRoutePlan>().eq(XpRoutePlan::getOpenCityId, openCityId)
+                .eq(XpRoutePlan::getAuditStatus, 2));
         Map<RouteStrategyKind, String> displayNames = new LinkedHashMap<>();
         List<RouteStrategyKind> configuredKinds = new ArrayList<>();
         if (xpRoutePlans.isEmpty()) {
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
index 5cd2753..40847e7 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
@@ -3,6 +3,8 @@
 
 import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.xiaopeng.api.dto.account.XpOperationsUserPositionDTO;
@@ -14,6 +16,8 @@
 import com.xiaopeng.api.model.maintenance.XpErrorType;
 import com.xiaopeng.api.model.maintenance.XpTask;
 import com.xiaopeng.api.model.maintenance.XpTaskRule;
+import com.xiaopeng.api.model.vehicleConvoy.XpFleet;
+import com.xiaopeng.api.model.vehicleConvoy.XpFleetOperations;
 import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
 import com.xiaopeng.api.query.account.OptionalUsersPageListQuery;
 import com.xiaopeng.api.vo.XpTaskVO;
@@ -21,6 +25,7 @@
 import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO;
 import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
 import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.web.page.PageInfo;
 import com.xiaopeng.common.security.service.TokenService;
 import com.xiaopeng.evi.oss.service.AliOssService;
@@ -65,6 +70,7 @@
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -370,27 +376,64 @@
         Query query = Query.query(new Criteria().andOperator(
                 Criteria.where("location").withinSphere(circle)
         ));
+        // 增加时间查询条件:最近1分钟更新的数据
+        int  time = 10*60*1000;
+        Long oneMinuteAgo = System.currentTimeMillis() - time;
+        query.addCriteria(Criteria.where("updateTime").gte(oneMinuteAgo));
+        
         List<XpOperationsUserPositionDTO> vehiclePositions = mongoTemplate.find(query, XpOperationsUserPositionDTO.class);
-        Map<Long, Double> disMap = vehiclePositions.stream().collect(Collectors.toMap(XpOperationsUserPositionDTO::getId, XpOperationsUserPositionDTO::getDistance));
-
-        // 查询车队下面面所有人员id和up求交集
-        List<Long> data = xpFleetClient.idsByFleetName(query1.getFleet()).getData();
-
-        List<Long> ids = vehiclePositions.stream().map(XpOperationsUserPositionDTO::getId)
-                .filter(e -> data == null || data.isEmpty() || data.contains(e))
-                .collect(Collectors.toList());
-
+        if(CollUtil.isEmpty(vehiclePositions)){
+            throw new ServiceException("未查询到运维人员");
+        }
+        List<Long> data = null ;
+        if(StrUtil.isNotBlank(query1.getFleet())){
+            // 查询车队下面面所有人员id和up求交集
+            data = xpFleetClient.idsByFleetName(query1.getFleet()).getData();
+        }
+        //vehiclePositions根据距离升序排序
+        vehiclePositions.sort(Comparator.comparing(XpOperationsUserPositionDTO::getDistance));
+        //获取运维人员id
+        List<Long> ids = new ArrayList<>();
+        Map<Long, Double> disMap = new HashMap<>();
+        if (  CollUtil.isNotEmpty(data)  ) {
+            for (XpOperationsUserPositionDTO vehiclePosition : vehiclePositions) {
+                if(data.contains(vehiclePosition.getId())){
+                    ids.add(vehiclePosition.getId());
+                    disMap.put(vehiclePosition.getId(), vehiclePosition.getDistance());
+                }
+            }
+        }else{
+            for (XpOperationsUserPositionDTO vehiclePosition : vehiclePositions) {
+                ids.add(vehiclePosition.getId());
+                disMap.put(vehiclePosition.getId(), vehiclePosition.getDistance());
+            }
+        }
         query1.setIds(ids);
+        query1.setOrderByField(1);
         PageInfo<XpOperationsUserWithRoleVO> ret = operationUserClient.listByQueryIds(query1).getData();
 
         // 设置距离,然后排序
-
         if (ret == null || ret.getRecords() == null || ret.getRecords().isEmpty()) {
             return R.ok();
         }
+        if(CollUtil.isNotEmpty(ids)){
+            R<List<XpFleetOperations>> findListByUserIdsR = xpFleetOperationsClient.findListByUserIds(ids);
+            if(findListByUserIdsR.getCode() != R.SUCCESS || findListByUserIdsR.getData().isEmpty()){
+                throw new ServiceException("未查询该车队");
+            }
+            // 将查询结果转换为 Map,key 为 userId,value 为 XpFleetOperations 对象
+            Map<Long, XpFleetOperations> fleetOperationsMap = findListByUserIdsR.getData().stream()
+                    .collect(Collectors.toMap(XpFleetOperations::getOperationsUserId, Function.identity()));
+            
+            for (XpOperationsUserWithRoleVO record : ret.getRecords()) {
+                if(fleetOperationsMap.containsKey(record.getId())){
+                    record.setFleetName(fleetOperationsMap.get(record.getId()).getFleetName());
+                }
+            }
+        }
         ret.getRecords().forEach(e -> e.setDis(disMap.get(e.getId())));
-        List<XpOperationsUserWithRoleVO> sorted = ret.getRecords().stream().sorted(Comparator.comparing(XpOperationsUserWithRoleVO::getDis)).collect(Collectors.toList());
-        ret.setRecords(sorted);
+//        List<XpOperationsUserWithRoleVO> sorted = ret.getRecords().stream().sorted(Comparator.comparing(XpOperationsUserWithRoleVO::getDis)).collect(Collectors.toList());
+//        ret.setRecords(sorted);
         return R.ok(ret);
     }
 
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java
index 9bfa0e8..5ae6545 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java
@@ -69,7 +69,7 @@
     public R<String> add(@RequestBody @Valid XpVehicleModel dto) {
         // 根据名称查询车辆型号,验证是否已存在
         List<XpVehicleModel> existingModel = xpVehicleModelService.queryByName(dto.getName());
-        if (existingModel != null) {
+        if (CollUtil.isNotEmpty(existingModel)) {
             return R.fail("车辆型号名称已存在");
         }
         boolean b = xpVehicleModelService.save(dto);
@@ -91,7 +91,7 @@
         }
         if(!model.getName().equals(dto.getName())){
             List<XpVehicleModel> existingModel = xpVehicleModelService.queryByName(dto.getName());
-            if (existingModel != null) {
+            if (CollUtil.isNotEmpty(existingModel)) {
                 return R.fail("车辆型号名称已存在");
             }
         }
@@ -104,7 +104,7 @@
 
     @ApiOperation(value = "车型删除", tags = "管理后台-资产-车型管理")
     @DeleteMapping("/logan/inner/xpVehicleModel/deleteById")
-    public R<String> deleteById(@RequestParam String id) {
+    public R<String> deleteById(@RequestParam Long id) {
         /*
         1.判断车型是否被 车辆 xp_vehicle使用。
         2.判断车型是否被 定价管理 xp_pricing使用。
@@ -113,14 +113,14 @@
         if (vehicleCount > 0) {
             return R.fail("车辆型号已被车辆使用");
         }
-        R<Long> priceCountByVmidR = xpPricingClient.getPriceCountByVmid(id);
+        R<Long> priceCountByVmidR = xpPricingClient.getPriceCountByVmid(id+"");
         if (priceCountByVmidR.getCode() != R.SUCCESS || priceCountByVmidR.getData() == null) {
             return R.fail("根据车型获取定价策略失败");
         }
         if(priceCountByVmidR.getData()>0){
             return R.fail("车辆型号已被定价策略使用");
         }
-        boolean b = xpVehicleModelService.logicalRemoveById(id);
+        boolean b = xpVehicleModelService.removeById(id);
         if(b){
             return R.ok();
         }
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpVehicleModelMapper.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpVehicleModelMapper.java
index d109181..163aea2 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpVehicleModelMapper.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpVehicleModelMapper.java
@@ -27,6 +27,6 @@
      * @param id
      * @return
      */
-    int getVehicleCount(String id);
+    int getVehicleCount(Long id);
 
 }
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpVehicleModelService.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpVehicleModelService.java
index b2a5d7d..f9e65fb 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpVehicleModelService.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpVehicleModelService.java
@@ -16,7 +16,7 @@
 
     List<XpVehicleModel> queryList();
 
-    boolean logicalRemoveById(String id);
+    boolean logicalRemoveById(Long id);
 
-    int getVehicleCount(String id);
+    int getVehicleCount(Long id);
 }
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
index 81dbfe9..2a54996 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
@@ -312,6 +312,14 @@
         if(null != one){
             throw new ServiceException("巡游打卡规则名称已存在");
         }
+        // 校验同一运维人员是否已存在有效规则(未删除且非循环模式或时间在有效期内)
+        long count = this.count(new LambdaQueryWrapper<XpCruiseCheckInRule>()
+                .eq(XpCruiseCheckInRule::getOperationsUserId, dto.getRelationId())
+                .eq(XpCruiseCheckInRule::getDeleted, false));
+        if (count > 0) {
+            throw new ServiceException("该运维人员已存在有效的巡游打卡规则");
+        }
+
         XpCruiseCheckInRule xpCruiseCheckInRule = new XpCruiseCheckInRule();
         BeanUtils.copyProperties(dto, xpCruiseCheckInRule);
         xpCruiseCheckInRule.setDeleted(false);
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
index 1ef432c..e4d9b35 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -16,7 +16,6 @@
 import com.xiaopeng.api.feignClient.account.SysUserClient;
 import com.xiaopeng.api.feignClient.account.XpOperationUserClient;
 import com.xiaopeng.api.feignClient.account.XpOperationUserNotificationClient;
-import com.xiaopeng.api.feignClient.map.XpMapClient;
 import com.xiaopeng.api.feignClient.operation.SmsClient;
 import com.xiaopeng.api.feignClient.pushMessage.WebSocketMessageClient;
 import com.xiaopeng.api.feignClient.pushMessage.XpAliPushMessageClient;
@@ -68,6 +67,7 @@
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.util.Strings;
 import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
 import org.apache.shardingsphere.transaction.core.TransactionType;
 import org.redisson.api.RLock;
@@ -75,7 +75,6 @@
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.geo.Point;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
 import org.springframework.data.mongodb.core.query.Criteria;
@@ -296,6 +295,9 @@
             List<Long> userIds = xpOperationsRoleResult.getData().stream().filter(x -> ids.contains(x.getOperationsUserId()))
                     .map(XpOperationsRole::getOperationsUserId)
                     .distinct().collect(Collectors.toList());
+            if(CollUtil.isEmpty(userIds)){
+                throw new ServiceException("未配置车队运维人员");
+            }
             //获取首选人的实时定位,计算每个人到事故车辆位置的导航距离
             List<Operations> operationsList = new ArrayList<>();
             for (Long userId : userIds) {
@@ -1476,8 +1478,13 @@
         }
 
         List<XpTask.Reject> rejects = Optional.ofNullable(task.getExcluded()).orElse(new ArrayList<>());
-        XpTask.Reject reject = task.reject(msg);
-        rejects.add(reject);
+        if(msg != null && Strings.isNotBlank(task.getHandleUserId())) {
+            XpTask.Reject reject = task.reject(msg);
+            rejects.add(reject);
+            List<Long> id = Collections.singletonList(Long.parseLong(task.getHandleUserId()));
+            String roleName = xpOperationUserClient.listByIdsWithRole(id).getData().get(0).getRoleName();
+            reject.setRejectUserRoleName(roleName);
+        }
         task.setExcluded(rejects);
         task.setReassignmentStatus(1);
         task.setStatus(4);
@@ -1493,9 +1500,9 @@
                 .map(String::valueOf).collect(Collectors.joining(","));
 
 
-//        VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class);
-        VehiclePosition vehiclePosition = new VehiclePosition();
-        vehiclePosition.setPoint(new GeoJsonPoint(103.12615621, 30.264561));
+        VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vehicle.getVehicleVin())), VehiclePosition.class);
+//        VehiclePosition vehiclePosition = new VehiclePosition();
+//        vehiclePosition.setPoint(new GeoJsonPoint(103.12615621, 30.264561));
         String handlerUser = chooseNearestAvailableOperationsUser(belongUserIds, vehiclePosition);
         task.setHandleUserId(handlerUser);
         if(handlerUser == null) {
@@ -1505,9 +1512,6 @@
         }
         updateById(task);
         if(StringUtils.isNotBlank(task.getHandleUserId())){
-            List<Long> id = Collections.singletonList(Long.parseLong(task.getHandleUserId()));
-            String roleName = xpOperationUserClient.listByIdsWithRole(id).getData().get(0).getRoleName();
-            reject.setRejectUserRoleName(roleName);
             sendAccidentNotificationAsync(task, vehicle.getPlateNumber(), taskRule.getProcessingTimeLimit());
         }
     }
@@ -1563,7 +1567,7 @@
         task.setCreateTime(LocalDateTime.now());
         this.save(task);
         // 异步发送消息通知
-        sendAccidentNotificationAsync(task, vehicle.getPlateNumber(), taskRule.getProcessingTimeLimit());
+         sendAccidentNotificationAsync(task, vehicle.getPlateNumber(), taskRule.getProcessingTimeLimit());
     }
 
     @Override
@@ -1718,6 +1722,7 @@
     }
 
     @Override
+    @Transactional
     public void saveTask(SaveErrorTaskDto dto, Long reportUserId) {
 
         List<XpTask> saveTask = new ArrayList<>();
@@ -1748,6 +1753,10 @@
         }
         this.saveBatch(saveTask);
 
+        for (XpTask task : saveTask) {
+
+            reassign(task.getId(),null);
+        }
     }
 
     @Override
diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleModelServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleModelServiceImpl.java
index 5759af7..85831e3 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleModelServiceImpl.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleModelServiceImpl.java
@@ -29,7 +29,7 @@
     public List<XpVehicleModel> queryByName(String name) {
         return this.list(new LambdaQueryWrapper<XpVehicleModel>()
                 .eq(XpVehicleModel::getDeleted, 0)
-                .like(XpVehicleModel::getName, name));
+                .eq(XpVehicleModel::getName, name));
     }
 
     /**
@@ -42,13 +42,13 @@
     }
 
     @Override
-    public boolean logicalRemoveById(String id) {
-//        XpVehicleModel entity = this.getById(id);
-//        if (entity != null) {
-//            entity.setDeleted(true);
-//            return this.updateById(entity);
-//        }
-        return this.removeById(id);
+    public boolean logicalRemoveById(Long id) {
+        XpVehicleModel entity = this.getById(id);
+        if (entity != null) {
+            entity.setDeleted(true);
+            return this.updateById(entity);
+        }
+        return true;
     }
     /**
      * 获取指定车型ID关联的车辆数量
@@ -57,7 +57,7 @@
      * @return 车辆数量
      */
     @Override
-    public int getVehicleCount(String id){
+    public int getVehicleCount(Long id){
         return this.baseMapper.getVehicleCount(id);
     }
     
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/exportExcle/XpPointSituationReportExportExcel.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/exportExcle/XpPointSituationReportExportExcel.java
index 1a9fb3a..e834665 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/exportExcle/XpPointSituationReportExportExcel.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/exportExcle/XpPointSituationReportExportExcel.java
@@ -31,7 +31,7 @@
      * 现场情况说明
      */
     @ApiModelProperty("现场情况说明")
-    @Excel(name = "现场情况说明",width = 20)
+    @Excel(name = "异常情况说明",width = 20)
     private String sceneDescription;
 
 
@@ -40,7 +40,7 @@
     private String operationsUserName;
 
     @ApiModelProperty("上报时间")
-    @Excel(name = "序号",width = 20)
+    @Excel(name = "上报时间",width = 20)
     private String reportingTimeStr;
 
 }
diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointSituationReportServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointSituationReportServiceImpl.java
index 7812fb6..a964fbb 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointSituationReportServiceImpl.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointSituationReportServiceImpl.java
@@ -53,6 +53,9 @@
                 query.setOperationsUserIds(ListUtil.toList(0L));
             }
         }
+        if(query.getReportingTimeEnd() != null  ){
+            query.setReportingTimeEnd(query.getReportingTimeEnd().plusDays(1));
+        }
         // 创建分页对象
         PageInfo<XpPointSituationReportVo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
         // 调用Mapper查询
diff --git a/xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpPointSituationReportMapper.xml b/xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpPointSituationReportMapper.xml
index 55cb2e3..5f6c4f5 100644
--- a/xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpPointSituationReportMapper.xml
+++ b/xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpPointSituationReportMapper.xml
@@ -27,7 +27,39 @@
         <if test="query.pointNumber != null and query.pointNumber != ''">
             AND b.point_number LIKE CONCAT('%', #{query.pointNumber}, '%')
         </if>
-        <if test="query.fieldSituation != null and query.fieldSituation != ''">
+<!--        点位状态值 1待测试 2测试中 3测试不通过 4可运营 5待生效 6启用中 7已停用 8失效 -->
+        <if test="query.pointStatusValue != null ">
+          <choose>
+              <!-- verification_status 验证状态 1=待验证、2=验证中、3=已验证 4验证失败 5待生效 -->
+              <!-- operation_status 运营状态 1=待启用 2=启用中 3=已停用 4=已失效 -->
+              <when test="query.pointStatusValue == 1">
+                  AND b.verification_status = 1
+              </when>
+              <when test="query.pointStatusValue == 2">
+                  AND b.verification_status = 2
+              </when>
+              <when test="query.pointStatusValue == 3">
+                  AND b.verification_status = 4
+              </when>
+              <when test="query.pointStatusValue == 4">
+                  AND b.verification_status = 3
+              </when>
+              <when test="query.pointStatusValue == 5">
+                  AND b.verification_status = 5 and b.operation_status = 1
+              </when>
+              <when test="query.pointStatusValue == 6">
+                  AND b.verification_status = 5 and b.operation_status = 2
+              </when>
+              <when test="query.pointStatusValue == 7">
+                  AND b.verification_status = 5 and b.operation_status = 3
+              </when>
+              <when test="query.pointStatusValue == 8">
+                  AND b.verification_status = 5 and b.operation_status = 4
+              </when>
+          </choose>
+        </if>
+
+        <if test="query.fieldSituation != null  or query.fieldSituation == 0">
             AND a.field_situation = #{query.fieldSituation}
         </if>
         <if test="query.operationsUserId != null and query.operationsUserId != ''">
@@ -43,7 +75,7 @@
             AND a.reporting_time &gt;= #{query.reportingTimeStart}
         </if>
         <if test="query.reportingTimeEnd != null">
-            AND a.reporting_time &lt;= #{query.reportingTimeEnd}
+            AND a.reporting_time &lt; #{query.reportingTimeEnd}
         </if>
         ORDER BY a.create_time DESC
     </select>
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/test/OrderTest.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/test/OrderTest.java
index b79f97a..1e728cd 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/test/OrderTest.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/test/OrderTest.java
@@ -59,6 +59,7 @@
         vehiclePosition.setMileageRange(300f);
         vehiclePosition.setHasOrder(0);
         vehiclePosition.setOrderId(param.getId());
+        vehiclePosition.setAddTime(System.currentTimeMillis()+100000);
         mongoTemplate.save(vehiclePosition);
 
 
diff --git a/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PositionMsgHandler.java b/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PositionMsgHandler.java
index d272007..ac2a052 100644
--- a/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PositionMsgHandler.java
+++ b/xp-robotaxi-push-message-boot/src/main/java/com/xiaopeng/pushMessage/webSocket/handler/PositionMsgHandler.java
@@ -14,6 +14,8 @@
 import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Component;
 
+import java.time.LocalDateTime;
+
 @Component
 @Slf4j
 public class PositionMsgHandler implements BusinessMsgHandler{
@@ -47,12 +49,14 @@
             vehiclePosition.setLatitude(latitude);
             vehiclePosition.setLongitude(longitude);
             vehiclePosition.setLocation(location);
+            vehiclePosition.setUpdateTime(System.currentTimeMillis());
             mongoTemplate.save(vehiclePosition);
         }else{
             Update update = new Update()
                     .set("id", Long.parseLong(uid))
                     .set("latitude", latitude)
-                    .set("longitude", longitude);
+                    .set("longitude", longitude)
+                    .set("updateTime", System.currentTimeMillis());
             GeoJsonPoint location = new GeoJsonPoint(longitude, latitude);
             update.set("location", location);
             mongoTemplate.updateFirst(new Query(Criteria.where("id").is(Long.parseLong(uid))), update, XpOperationsUserPositionDTO.class);
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetOperationsController.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetOperationsController.java
index 27dd9ac..cb4fd2e 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetOperationsController.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetOperationsController.java
@@ -75,6 +75,20 @@
 
 
     /**
+     * 根据人员id 获取所属车队
+     *
+     * @param userIds 运维人员id
+     * @return
+     */
+    @PostMapping("/logan/inner/fleet-operations/findListByUserIds")
+    public R<List<XpFleetOperations>> findListByUserIds(@RequestBody List<Long> userIds){
+
+        List<XpFleetOperations> listByUserIds = xpFleetOperationsService.findListByUserIds(userIds);
+        return R.ok(listByUserIds);
+    }
+
+
+    /**
      * 根据运维人员ID查询关联的车队ID列表(内部接口)
      *
      * @param userId 运维人员ID
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/mapper/XpFleetOperationsMapper.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/mapper/XpFleetOperationsMapper.java
index 6ebbc07..b585bb9 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/mapper/XpFleetOperationsMapper.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/mapper/XpFleetOperationsMapper.java
@@ -2,6 +2,9 @@
 
 import com.xiaopeng.api.model.vehicleConvoy.XpFleetOperations;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,6 @@
  */
 public interface XpFleetOperationsMapper extends BaseMapper<XpFleetOperations> {
 
+    List<XpFleetOperations> findListByUserIds(@Param("userIds") List<Long> userIds);
+
 }
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpFleetOperationsService.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpFleetOperationsService.java
index b5d175e..51f6aed 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpFleetOperationsService.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpFleetOperationsService.java
@@ -3,6 +3,8 @@
 import com.xiaopeng.api.model.vehicleConvoy.XpFleetOperations;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 车队人员中间表 服务类
@@ -13,4 +15,5 @@
  */
 public interface IXpFleetOperationsService extends IService<XpFleetOperations> {
 
+    List<XpFleetOperations> findListByUserIds(List<Long> userIds);
 }
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetOperationsServiceImpl.java b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetOperationsServiceImpl.java
index 8458998..3a20259 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetOperationsServiceImpl.java
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetOperationsServiceImpl.java
@@ -6,6 +6,8 @@
 import com.xiaopeng.vehicleConvoy.service.IXpFleetOperationsService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 车队人员中间表 服务实现类
@@ -17,4 +19,10 @@
 @Service
 public class XpFleetOperationsServiceImpl extends ServiceImpl<XpFleetOperationsMapper, XpFleetOperations> implements IXpFleetOperationsService {
 
+
+    @Override
+    public List<XpFleetOperations> findListByUserIds(List<Long> userIds){
+        return  baseMapper.findListByUserIds(userIds);
+    }
+
 }
diff --git a/xp-robotaxi-vehicle-convoy-boot/src/main/resources/mapper/vehicleConvoy/XpFleetOperationsMapper.xml b/xp-robotaxi-vehicle-convoy-boot/src/main/resources/mapper/vehicleConvoy/XpFleetOperationsMapper.xml
index c53dfb8..65f7c90 100644
--- a/xp-robotaxi-vehicle-convoy-boot/src/main/resources/mapper/vehicleConvoy/XpFleetOperationsMapper.xml
+++ b/xp-robotaxi-vehicle-convoy-boot/src/main/resources/mapper/vehicleConvoy/XpFleetOperationsMapper.xml
@@ -2,4 +2,19 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.xiaopeng.vehicleConvoy.mapper.XpFleetOperationsMapper">
 
+
+
+
+
+
+    <select id="findListByUserIds" resultType="com.xiaopeng.api.model.vehicleConvoy.XpFleetOperations">
+        SELECT a.*,b.fleet_name
+        FROM xp_fleet_operations a
+        INNER JOIN xp_fleet b on b.id = a.fleet_id
+        where a.operations_user_id in
+            <foreach collection="userIds" item="userId" open="(" separator="," close=")">
+                #{userId}
+            </foreach>
+
+    </select>
 </mapper>

--
Gitblit v1.7.1