xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskController.java
@@ -56,9 +56,7 @@ import javax.annotation.Resource; import javax.validation.Valid; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.*; import java.util.stream.Collectors; /** @@ -331,16 +329,21 @@ List<XpOperationsUserPositionDTO> up = mongoTemplate.find(q, XpOperationsUserPositionDTO.class); Map<Long, Double> disMap = up.stream().collect(Collectors.toMap(XpOperationsUserPositionDTO::getId, XpOperationsUserPositionDTO::getDistance)); // 查询车队下面面所有人员id和up求交集 List<Long> data = xpFleetClient.idsByFleetName(query.getFleet()).getData(); List<Long> ids = up.stream().map(XpOperationsUserPositionDTO::getId) .filter(e -> data!=null && !data.isEmpty() &&!data.contains(e)) .filter(e -> data == null || data.isEmpty() || data.contains(e)) .collect(Collectors.toList()); query.setIds(ids); PageInfo<XpOperationsUserWithRoleVO> ret = operationUserClient.listByQueryIds(query).getData(); // 设置距离,然后排序 ret.getRecords().forEach(e -> e.setDis(String.valueOf(disMap.get(e.getId())))); List<XpOperationsUserWithRoleVO> sorted = ret.getRecords().stream().sorted(Comparator.comparing(XpOperationsUserWithRoleVO::getDis)).collect(Collectors.toList()); ret.setRecords(sorted); return R.ok(ret); } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/repo/XpOperationsUserRepository.java
@@ -19,7 +19,7 @@ * @param distance 距离范围 * @return 符合条件的实体列表 */ @Query("{ 'location' : { '$nearSphere' : ?0, '$maxDistance' : ?1 ,distanceFiled: 'distance'}, 'id' : { $in : ?2 } }") @Query("{ 'location' : { '$nearSphere' : ?0, '$maxDistance' : ?1, '$distanceField': 'distance' }, 'id' : { $in : ?2 } }") List<XpOperationsUserPositionDTO> findWithDistance( Point point, Integer distance, xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpTaskServiceImpl.java
@@ -1409,10 +1409,10 @@ Long fleetId = xpFleetVehicleClient.getFleetIdByVehicleId(vehicle.getId()).getData(); List<Long> roleIds = taskRuleRole.stream().map(XpTaskRuleRole::getRoleId).collect(Collectors.toList()); List<Long> ids = xpFleetOperationsClient.getOperationsIdsByFleetId(fleetId).getData();//TODO 空指针 List<Long> ids = xpFleetOperationsClient.getOperationsIdsByFleetId(fleetId).getData(); String belongUserIds = xpOperationUserClient.getXpOperationsRoleByRoleIds(roleIds).getData().stream() .map(XpOperationsRole::getOperationsUserId) .filter(ids::contains) .filter(e -> ids == null || ids.isEmpty() || ids.contains(e)) .filter(id -> !excludedUserIds.contains(id.toString())) .map(String::valueOf).collect(Collectors.joining(",")); @@ -1569,7 +1569,10 @@ // 让mongo根据[id in ids]返回距离排序的users // List<XpOperationsUserPositionDTO> users = mongoTemplate.find(new Query(Criteria.where("_id").in(ids)), XpOperationsUserPositionDTO.class); List<XpOperationsUserPositionDTO> XpOperationsUserPositionDTOs = repository.findWithDistance(new Point(vehiclePosition.getPoint().getX(), vehiclePosition.getPoint().getY()), 1000, ids); List<XpOperationsUserPositionDTO> XpOperationsUserPositionDTOs = mongoTemplate.find( new Query(Criteria.where("_id").in(ids).and("location").nearSphere(new GeoJsonPoint(vehiclePosition.getPoint().getX(), vehiclePosition.getPoint().getY())).maxDistance(1000 / 6378137.0)), XpOperationsUserPositionDTO.class ); boolean skipBusy = false;//TODO 获取系统配置,是否开启跳过忙碌