xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/VehiclePositionVo.java
@@ -70,6 +70,10 @@ */ private Integer timeScore=0; /** * 航向,单位:度,北零顺时针。范围:[0-360)。0 => 北, 90 => 东, 180 => 南, 270 => 西 */ private Double course; /** * 价值分数 xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/vehicleConvoy/XpVehicleVO.java
File was renamed from xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/XpVehicleVO.java @@ -1,4 +1,4 @@ package com.xiaopeng.vehicleConvoy.model.vo; package com.xiaopeng.api.vo.vehicleConvoy; import com.fasterxml.jackson.annotation.JsonFormat; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; @@ -36,4 +36,7 @@ @ApiModelProperty(value = "车辆维修状态 1=取回 2=送修") private Integer maintenanceStatus; @ApiModelProperty(value = "方向角度") private Double direction; } xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/controller/ActiveOrderController.java
@@ -6,6 +6,7 @@ import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.operation.RouteAndFareVo; import com.xiaopeng.api.vo.operation.VehiclePositionVo; import com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.itinerary.service.ActiveOrderService; import com.xiaopeng.itinerary.service.XpPricingService; @@ -13,6 +14,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; @@ -80,35 +82,7 @@ return R.ok(); } @Resource XpVehicleClient xpVehicleClient; /** * 周围车辆点位查询 */ @ApiOperation(value = "周围车辆点位查询", notes = "", tags = {"小程序-周围车辆点位查询"}) @GetMapping("/api/v1/mini-program/nearby/cars") @XpClientCheck(checkToken = false, checkOtpToken = true) public R<List<XpVehicle>> carAround(@RequestParam double lon,@RequestParam double lat,HttpServletRequest request) { // TODO 需要车头方向 Point point = new Point(lon, lat); Distance distance = new Distance(3, Metrics.KILOMETERS); Criteria criteria = Criteria.where("point") .nearSphere(point) .maxDistance(distance.getNormalizedValue()); Query query = new Query(criteria); List<VehiclePositionVo> vehiclePositions = mongoTemplate.find(query, VehiclePositionVo.class); List<XpVehicle> xpVehicleList = vehiclePositions.stream() .sorted(Comparator.comparingDouble(VehiclePositionVo::getDistance)) .map(v -> xpVehicleClient.findByVehicleVin(v.getVin()).getData()) .filter(v -> v.getState() == 0) .limit(5) .collect(Collectors.toList()); return R.ok(xpVehicleList); } @Resource private MongoTemplate mongoTemplate; xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java
@@ -11,13 +11,13 @@ import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mongodb.client.MongoCollection; import com.xiaopeng.api.dto.operation.VehiclePositionByVinDto; import com.xiaopeng.api.dto.vehicleConvoy.ServiceVehicleListDto; import com.xiaopeng.api.dto.vehicleConvoy.UpdateVehicleStateDto; import com.xiaopeng.api.dto.vehicleConvoy.VehicleTemperatureDto; import com.xiaopeng.api.feignClient.maintenance.*; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.account.XpOperationsUser;import com.xiaopeng.api.model.maintenance.XpTask; import com.xiaopeng.api.model.maintenance.XpTaskRule; import com.xiaopeng.api.model.vehicleConvoy.XpFleet; @@ -25,6 +25,7 @@ import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.model.vehicleConvoy.XpVehicleAnnualRecord; import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; import com.xiaopeng.api.vo.operation.VehiclePositionVo; import com.xiaopeng.api.vo.vehicleConvoy.VehicleDoorStatusVo; import com.xiaopeng.api.vo.vehicleConvoy.VehicleStateVo; import com.xiaopeng.api.vo.vehicleConvoy.VehiclesCommandCallbackVo; @@ -40,7 +41,7 @@ import com.xiaopeng.vehicleConvoy.model.exportExcel.XpVehicleExportExcel; import com.xiaopeng.vehicleConvoy.model.importExcel.XpVehicleImportExcel; import com.xiaopeng.vehicleConvoy.model.query.*; import com.xiaopeng.vehicleConvoy.model.vo.XpVehicleVO; import com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO; import com.xiaopeng.vehicleConvoy.service.IXpFleetService; import com.xiaopeng.vehicleConvoy.service.IXpFleetVehicleService; import com.xiaopeng.vehicleConvoy.service.IXpVehicleAnnualRecordService; @@ -57,6 +58,9 @@ import org.springframework.context.MessageSource; import org.springframework.context.annotation.Lazy; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; @@ -64,6 +68,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -73,6 +78,7 @@ import java.time.LocalDateTime; import java.util.*; import java.util.regex.Pattern; import java.util.stream.Collectors; /** * <p> @@ -1156,4 +1162,38 @@ VehicleDoorStatusVo vehicleDoorStatus = xpVehicleService.getVehicleDoorStatus(orderId); return R.ok(vehicleDoorStatus); } @Resource XpVehicleClient xpVehicleClient; /** * 周围车辆点位查询 */ @ApiOperation(value = "周围车辆点位查询", notes = "", tags = {"小程序-周围车辆点位查询"}) @GetMapping("/api/v1/mini-program/vehicle/nearby") @XpClientCheck(checkToken = false, checkOtpToken = true) public R<List<XpVehicleVO>> carAround(@RequestParam double lon,@RequestParam double lat,HttpServletRequest request) { Point point = new Point(lon, lat); Distance distance = new Distance(3, Metrics.KILOMETERS); Criteria criteria = Criteria.where("point") .nearSphere(point) .maxDistance(distance.getNormalizedValue()); Query query = new Query(criteria); List<VehiclePositionVo> vehiclePositions = mongoTemplate.find(query, VehiclePositionVo.class); List<XpVehicleVO> xpVehicleList = vehiclePositions.stream() .sorted(Comparator.comparingDouble(VehiclePositionVo::getDistance)) .map(vp -> { XpVehicle xpVehicle = xpVehicleClient.findByVehicleVin(vp.getVin()).getData(); XpVehicleVO vo = new XpVehicleVO(); BeanUtils.copyProperties(xpVehicle, vo); vo.setDirection(vp.getCourse()); return vo; }) .filter(v -> v.getState() == 0) .limit(5) .collect(Collectors.toList()); return R.ok(xpVehicleList); } } xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/mapper/XpVehicleMapper.java
@@ -8,7 +8,7 @@ import com.xiaopeng.vehicleConvoy.model.query.VehicleExportQuery; import com.xiaopeng.vehicleConvoy.model.query.VehicleMapQuery; import com.xiaopeng.vehicleConvoy.model.query.VehiclePageQuery; import com.xiaopeng.vehicleConvoy.model.vo.XpVehicleVO; import com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO; import org.apache.ibatis.annotations.Param; import java.time.LocalDate; xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpVehicleService.java
@@ -1,6 +1,5 @@ package com.xiaopeng.vehicleConvoy.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.xiaopeng.api.dto.vehicleConvoy.ServiceVehicleListDto; import com.xiaopeng.api.dto.vehicleConvoy.VehicleTemperatureDto; @@ -11,10 +10,7 @@ import com.xiaopeng.vehicleConvoy.model.dto.*; import com.xiaopeng.vehicleConvoy.model.importExcel.XpVehicleImportExcel; import com.xiaopeng.vehicleConvoy.model.query.*; import com.xiaopeng.vehicleConvoy.model.vo.XpVehicleVO; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO; import java.util.List; xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
@@ -53,7 +53,7 @@ import com.xiaopeng.vehicleConvoy.model.dto.*; import com.xiaopeng.vehicleConvoy.model.importExcel.XpVehicleImportExcel; import com.xiaopeng.vehicleConvoy.model.query.*; import com.xiaopeng.vehicleConvoy.model.vo.XpVehicleVO; import com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO; import com.xiaopeng.vehicleConvoy.service.AsyncVehicleStateService; import com.xiaopeng.vehicleConvoy.service.IXpFleetVehicleService; import com.xiaopeng.vehicleConvoy.service.IXpVehicleAnnualRecordService; xp-robotaxi-vehicle-convoy-boot/src/main/resources/mapper/vehicleConvoy/XpVehicleMapper.xml
@@ -65,7 +65,7 @@ GROUP BY DATE(create_time) ORDER BY date ASC </select> <select id="pageList" resultType="com.xiaopeng.vehicleConvoy.model.vo.XpVehicleVO"> <select id="pageList" resultType="com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO"> SELECT <include refid="Base_Column_List"></include> FROM xp_vehicle <where> @@ -97,7 +97,7 @@ </select> <select id="findList" resultType="com.xiaopeng.vehicleConvoy.model.vo.XpVehicleVO"> <select id="findList" resultType="com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO"> SELECT a.* FROM xp_vehicle as a <where> a.is_deleted = 0 @@ -191,7 +191,7 @@ </where> ORDER BY create_time DESC </select> <select id="getVehiclePageList" resultType="com.xiaopeng.vehicleConvoy.model.vo.XpVehicleVO"> <select id="getVehiclePageList" resultType="com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO"> select xv.id, xv.vehicle_code, xv.vehicle_vin,