puzhibing
2026-04-29 67f37d5ff7418fd03158af226ab67b48019c7b06
修改bug和新增加流量接入部分接口
9个文件已添加
11个文件已修改
461 ■■■■■ 已修改文件
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpOfficialPartner.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpPricing.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/vehicleConvoy/XpVehicle.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpOfficialPartnerController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPricingController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpTradingStrategyController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpOfficialPartnerMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpOfficialPartnerService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpOfficialPartnerServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/OfficialPartnerVo.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/PricingInfoVo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpOfficialPartnerMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetVehicleController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/VehiclePositionDto.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpVehicleService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpOfficialPartner.java
New file
@@ -0,0 +1,42 @@
package com.xiaopeng.api.model.operation;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xiaopeng.common.core.web.domain.BaseModel;
import lombok.Data;
/**
 * 合作商
 */
@Data
@TableName("xp_official_partner")
public class XpOfficialPartner extends BaseModel {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 名称
     */
    private String name;
    /**
     * 品牌名称
     */
    private String brandName;
    /**
     * 品牌logo
     */
    private String logoUrl;
    /**
     * 应用APPKey
     */
    private String appKey;
    /**
     * 应用APPSecret
     */
    private String appSecret;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpPricing.java
@@ -81,15 +81,6 @@
    private String dynamicPricingJson;
//    public XpPricingDynamicPricesVo getDynamicPricingJsonObj() {
//        if(StringUtils.isNotEmpty(dynamicPricingJson)){
//            return JSONObject.parseObject(dynamicPricingJson, XpPricingDynamicPricesVo.class);
//        }
//        return null;
//    }
    @ApiModelProperty(value = "价格规则")
    @TableField("price_rule")
    private String priceRule;
@@ -99,4 +90,9 @@
    @TableField("is_dynamic_price")
    private Integer isDynamicPrice;
    @ApiModelProperty(value = "合作商id")
    @TableField("official_partner_id")
    private Integer officialPartnerId;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/vehicleConvoy/XpVehicle.java
@@ -120,6 +120,9 @@
    @ApiModelProperty(value = "车辆接单状态 1接单中 0空闲")
    private Integer state;
    @ApiModelProperty(value = "合作商ID")
    private Integer officialPartnerId;
    @ApiModelProperty(value = "运营区域")
    @TableField(exist = false)
    private String electronicName;
xp-robotaxi-automatic-pilot-boot/src/main/java/com/xiaopeng/automaticPilot/controller/OrderMissionController.java
@@ -330,9 +330,6 @@
                && mqttPublishDto.getCode()== 200){
            // 修改车子为接单状态
            xpVehicleClient.updateVehicleStatus(new UpdateVehicleStateDto(dto.getVin(), 1));
            // TODO[流量接入] 通过设置的URL发送订单和导航路线给运力
        }
        if(null != mqttPublishDto && mqttPublishDto.getCode() == 200){
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java
@@ -8,6 +8,8 @@
import com.xiaopeng.maintenance.model.query.XpVehicleModelPageQuery;
import com.xiaopeng.maintenance.service.IXpVehicleModelService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -138,8 +140,15 @@
    @GetMapping("/drainage/v1/vehicleModel/list")
    @ApiOperation(value = "查询可使用的车型列表", notes = "流量接入-基础信息")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "token", name = "token", required = true, paramType = "header")
    })
    public R<List<XpVehicleModel>> getVehicleModelList() {
        List<XpVehicleModel> list = xpVehicleModelService.queryList();
        return R.ok(list);
    }
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpOfficialPartnerController.java
New file
@@ -0,0 +1,50 @@
package com.xiaopeng.operation.controller;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.operation.service.IXpOfficialPartnerService;
import com.xiaopeng.operation.vo.OfficialPartnerVo;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * 引流接口
 */
@RestController
@RequestMapping("/drainage")
public class XpOfficialPartnerController {
    @Resource
    private IXpOfficialPartnerService xpOfficialPartnerService;
    /**
     * 保存合作商信息
     * @param vo
     * @return
     */
    @PostMapping("/v1/officialPartner/save")
    @ApiOperation(value = "保存合作商信息", notes = "流量接入-基础信息")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "token", name = "token", required = true, paramType = "header")
    })
    public R<?> save(@RequestBody OfficialPartnerVo vo) {
        xpOfficialPartnerService.addOfficialPartner(vo);
        return R.ok();
    }
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPricingController.java
@@ -20,10 +20,14 @@
import com.xiaopeng.operation.query.PricingPageListQuery;
import com.xiaopeng.operation.service.*;
import com.xiaopeng.operation.utils.ImageTagProcessor;
import com.xiaopeng.operation.vo.OfficialPartnerVo;
import com.xiaopeng.operation.vo.PricingInfoVo;
import com.xiaopeng.operation.vo.PricingPageListVO;
import com.xiaopeng.operation.vo.SaveOrderVo;
import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
@@ -266,4 +270,18 @@
    }
//    /**
//     * 合作商添加计费策略 todo 现在的版本不支持手动选择车型
//     * @param vo
//     * @return
//     */
//    @PostMapping("/v1/pricing/save")
//    @ApiOperation(value = "保存计价规则", notes = "流量接入-基础信息")
//    @ApiImplicitParams({
//            @ApiImplicitParam(value = "token", name = "token", required = true, paramType = "header")
//    })
//    public R<?> save(@RequestBody PricingInfoVo vo) {
//
//        return R.ok();
//    }
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpTradingStrategyController.java
@@ -42,8 +42,6 @@
    @ApiOperation(value = "获取交易策略配置", tags = {"inner-交易策略配置"})
    @GetMapping("/logan/inner/xpOperationStrategy/getOne")
    public R<XpTradingStrategyDetailVO> getOne() {
        // TODO[流量接入] 这里需要判断是哪个三方车队的,获取到对应的交易策略
        XpTradingStrategyDetailVO detail = tradingStrategyService.queryDetail();
        return R.ok(detail);
    }
@@ -58,15 +56,6 @@
    @PostMapping("/api/v1/tradingStrategy/edit")
    public R<?> edit(@Validated @RequestBody XpTradingStrategyEditDTO dto) {
        tradingStrategyService.editStrategy(dto);
        return R.ok();
    }
    @ApiOperation(value = "三方车队的交易策略", tags = {"流量接入-信息录入-设置交易策略"})
    @PostMapping("/api/v1/xp-rt/strategy")
    public R<?> add(@Validated @RequestBody XpTradingStrategy dto) {//创建只接收部分可设置的参数的dto
        // 通过key认证是哪个三方车队
        tradingStrategyService.save(dto);
        return R.ok();
    }
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/mapper/XpOfficialPartnerMapper.java
New file
@@ -0,0 +1,7 @@
package com.xiaopeng.operation.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xiaopeng.api.model.operation.XpOfficialPartner;
public interface XpOfficialPartnerMapper extends BaseMapper<XpOfficialPartner> {
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpOfficialPartnerService.java
New file
@@ -0,0 +1,16 @@
package com.xiaopeng.operation.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaopeng.api.model.operation.XpOfficialPartner;
import com.xiaopeng.operation.vo.OfficialPartnerVo;
import org.springframework.web.bind.annotation.RequestBody;
public interface IXpOfficialPartnerService extends IService<XpOfficialPartner> {
    /**
     * 添加合作商
     * @param vo
     */
    void addOfficialPartner(OfficialPartnerVo vo);
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpOfficialPartnerServiceImpl.java
New file
@@ -0,0 +1,35 @@
package com.xiaopeng.operation.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.model.operation.XpOfficialPartner;
import com.xiaopeng.common.core.exception.ServiceException;
import com.xiaopeng.operation.mapper.XpOfficialPartnerMapper;
import com.xiaopeng.operation.service.IXpOfficialPartnerService;
import com.xiaopeng.operation.vo.OfficialPartnerVo;
import org.springframework.stereotype.Service;
@Service
public class XpOfficialPartnerServiceImpl extends ServiceImpl<XpOfficialPartnerMapper, XpOfficialPartner> implements IXpOfficialPartnerService {
    /**
     * 添加合作商
     * @param vo
     */
    @Override
    public void addOfficialPartner(OfficialPartnerVo vo) {
        XpOfficialPartner officialPartner = this.getOne(new QueryWrapper<XpOfficialPartner>().eq("app_key", vo.getAppKey()).eq("is_deleted", 0));
        if(null == officialPartner){
            throw new ServiceException("权限校验失败");
        }
        if(!officialPartner.getAppSecret().equals(vo.getAppSecret())){
            throw new ServiceException("权限校验失败");
        }
        XpOfficialPartner xpOfficialPartner = new XpOfficialPartner();
        xpOfficialPartner.setName(vo.getName());
        xpOfficialPartner.setBrandName(vo.getBrandName());
        xpOfficialPartner.setLogoUrl(vo.getLogoUrl());
        this.updateById(xpOfficialPartner);
    }
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/OfficialPartnerVo.java
New file
@@ -0,0 +1,20 @@
package com.xiaopeng.operation.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("合作商信息")
public class OfficialPartnerVo {
    @ApiModelProperty("合作商名称")
    private String name;
    @ApiModelProperty("合作商品牌名称")
    private String brandName;
    @ApiModelProperty("合作商品牌logo")
    private String logoUrl;
    @ApiModelProperty("应用APPKey")
    private String appKey;
    @ApiModelProperty("应用APPSecret")
    private String appSecret;
}
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/PricingInfoVo.java
New file
@@ -0,0 +1,10 @@
package com.xiaopeng.operation.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("定价信息")
public class PricingInfoVo {
}
xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpOfficialPartnerMapper.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xiaopeng.operation.mapper.XpOfficialPartnerMapper">
</mapper>
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetController.java
@@ -240,28 +240,4 @@
        return R.ok(xpFleetService.list());
    }
    @ApiOperation(value = "品牌信息", tags = {"流量接入-信息录入-品牌展示信息"})
    @PostMapping("/api/v1/xp-rt/brand-info")
    public R<?> JoinUs(
            @ApiParam(value = "车辆信息", required = true)
            @RequestBody BrandInfo brandInfo
    ) {
        //包含接收订单的URL
        XpFleet xpFleet = new XpFleet();
        XpOperationsUser operationsUser = new XpOperationsUser();
        operationsUser.setNickName(brandInfo.getOperationsUserName());
        operationsUser.setPhoneNumber(brandInfo.getPhoneNumber());
        operationsUser.setDeviceType(1);
        xpFleet.setFleetName(brandInfo.getBrandName());
//        xpFleetService.save(fleet);
        return R.ok();
    }
    XpOperationsUserClient xpOperationsUserClient;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpFleetVehicleController.java
@@ -60,29 +60,4 @@
        List<Long> vehicleIds = xpFleetVehicleService.listVehicleIdsByFleetId(fleetId);
        return R.ok(vehicleIds);
    }
    @ApiOperation(value = "添加车辆", tags = {"流量接入-信息录入-车辆"})
    @PostMapping("/api/v1/xp-rt/vehicle")
    public R<?> add(
            @ApiParam(value = "车辆信息", required = true)
            @RequestBody XpFleetVehicle fleetVehicle
            ) {
        xpFleetVehicleService.save(fleetVehicle);
        return R.ok();
    }
    @Resource
    MongoTemplate mongoTemplate;
    @ApiOperation(value = "车辆", tags = {"流量接入-信息录入-车辆"})
    @PostMapping("/api/v1/xp-rt/vehicle/info")
    public R<?> JoinUs(
            @ApiParam(value = "车辆位置信息", required = true)
            @RequestBody VehiclePosition vp
    ) {
        mongoTemplate.save(vp);
        return R.ok();
    }
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/controller/XpVehicleController.java
@@ -42,6 +42,7 @@
import com.xiaopeng.vehicleConvoy.model.importExcel.XpVehicleImportExcel;
import com.xiaopeng.vehicleConvoy.model.query.*;
import com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO;
import com.xiaopeng.vehicleConvoy.model.vo.VehiclePositionDto;
import com.xiaopeng.vehicleConvoy.service.IXpFleetService;
import com.xiaopeng.vehicleConvoy.service.IXpFleetVehicleService;
import com.xiaopeng.vehicleConvoy.service.IXpVehicleAnnualRecordService;
@@ -746,26 +747,7 @@
    }
    public static void main(String[] args) {
        String inspectionAttachments = "[{\"id\": \"d57c4ac4-acb0-451b-8e94-70f226331e0c\", \"url\": \"https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/552a3a31-e4dd-4a28-8748-fd8b87dd3055.png\", \"name\": \"测试.jpg\"}]";
        if (StringUtils.isNotBlank(inspectionAttachments)) {
            JSONArray jsonArray = JSONArray.parseArray(inspectionAttachments);
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                if (Objects.isNull(jsonObject)) {
                    continue;
                }
                jsonObject.put("url", "downloadUrl");
            }
            String jsonString = JSONArray.toJSONString(jsonArray);
            System.out.println(jsonString);
        }
    }
    /**
     * 根据围栏id查询空闲车辆
@@ -1204,35 +1186,24 @@
        return R.ok(xpVehicleList);
    }
    @ApiOperation(value = "上报车辆位置", notes = "", tags = {"流量接入-上报车辆位置"})
    @PostMapping("/api/v1/xp-rt/vehicle/position")
    public R<List<XpVehicleVO>> pushVehiclePosition(@RequestBody VehiclePosition vp) {
        // 更新到mongodb,用于被分配订单
        // 如果是接单中,更新导航路线
        return R.ok();
    }
    /**
     * {@Link OrderStatusEnum}
     * @param vp
     * 上报车辆实时位置信息
     * @param dto
     * @return
     */
    @ApiOperation(value = "更新车辆状态", notes = "", tags = {"流量接入-更新车辆状态"})
    @PostMapping("/api/v1/xp-rt/vehicle/status")
    public R<List<XpVehicleVO>> pushVehicleStatus(@RequestBody VehiclePosition vp) {
        // 前往接驾,等待上车,前往终点,到达终点等待下车,结束订单
        // 更新order状态
    @PostMapping("/drainage/v1/vehicle/reportVehicleLocation")
    @ApiOperation(value = "上报车辆实时位置信息", notes = "流量接入-基础信息")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "token", name = "token", required = true, paramType = "header")
    })
    public R<?> reportVehicleLocation(@RequestBody VehiclePositionDto dto){
        xpVehicleService.reportVehicleLocation(dto);
        return R.ok();
    }
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/VehiclePositionDto.java
New file
@@ -0,0 +1,61 @@
package com.xiaopeng.vehicleConvoy.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.index.GeoSpatialIndexType;
import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
@Data
@ApiModel("车辆位置信息")
public class VehiclePositionDto {
    /**
     * 车辆VIN
     */
    @ApiModelProperty(value = "车辆VIN")
    private String vin;
    /**
     * 车辆实时位置信息
     */
    @ApiModelProperty(value = "车辆经度")
    private Double longitude;
    @ApiModelProperty(value = "车辆纬度")
    private Double latitude;
    /**
     * 航向,单位:度,北零顺时针。范围:[0-360)。0 => 北, 90 => 东, 180 => 南, 270 => 西
     */
    @ApiModelProperty("车头北向夹角")
    private Double course;
    /**
     * 海拔 单位米
     */
    @ApiModelProperty("车辆海拔")
    private Float alt;
    /**
     * 当前速度
     */
    @ApiModelProperty("车辆速度")
    private Float speed;
    /**
     * 当前电量
     */
    @ApiModelProperty("车辆电量")
    private Integer currentElectricity;
    /**
     * 综合续航
     */
    @ApiModelProperty("车辆综合续航")
    private Float mileageRange;
    /**
     * 订单id
     */
    @ApiModelProperty("订单id")
    private Long orderId;
    /**
     * 总里程
     */
    @ApiModelProperty("总里程")
    private Long totalOdometer;
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/IXpVehicleService.java
@@ -5,12 +5,15 @@
import com.xiaopeng.api.dto.vehicleConvoy.VehicleTemperatureDto;
import com.xiaopeng.api.model.account.XpOperationsUser;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.operation.VehiclePositionVo;
import com.xiaopeng.api.vo.vehicleConvoy.VehicleDoorStatusVo;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.vehicleConvoy.model.dto.*;
import com.xiaopeng.vehicleConvoy.model.importExcel.XpVehicleImportExcel;
import com.xiaopeng.vehicleConvoy.model.query.*;
import com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO;
import com.xiaopeng.vehicleConvoy.model.vo.VehiclePositionDto;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@@ -243,4 +246,11 @@
     * @return
     */
    VehicleDoorStatusVo getVehicleDoorStatus(Long orderId);
    /**
     * 上报车辆实时位置
     * @param dto
     */
    void reportVehicleLocation(VehiclePositionDto dto);
}
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpVehicleServiceImpl.java
@@ -38,6 +38,7 @@
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
import com.xiaopeng.api.vo.operation.ElectronicFenceDetailVo;
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.api.vo.operation.VehiclePositionVo;
import com.xiaopeng.api.vo.vehicleConvoy.*;
import com.xiaopeng.common.core.constant.CacheConstants;
import com.xiaopeng.common.core.domain.R;
@@ -54,6 +55,7 @@
import com.xiaopeng.vehicleConvoy.model.importExcel.XpVehicleImportExcel;
import com.xiaopeng.vehicleConvoy.model.query.*;
import com.xiaopeng.api.vo.vehicleConvoy.XpVehicleVO;
import com.xiaopeng.vehicleConvoy.model.vo.VehiclePositionDto;
import com.xiaopeng.vehicleConvoy.service.AsyncVehicleStateService;
import com.xiaopeng.vehicleConvoy.service.IXpFleetVehicleService;
import com.xiaopeng.vehicleConvoy.service.IXpVehicleAnnualRecordService;
@@ -70,6 +72,7 @@
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -1446,4 +1449,43 @@
        vo.setTrunk(trunk_ajar_st_new == 5 ? 1 : 0);
        return vo;
    }
    /**
     * 上报车辆实时位置
     * @param dto
     */
    @Override
    public void reportVehicleLocation(VehiclePositionDto dto) {
        if(StringUtils.isEmpty(dto.getVin())){
            throw new ServiceException("无效数据");
        }
        if(null == dto.getLatitude() || null == dto.getLongitude()){
            throw new ServiceException("无效数据");
        }
        XpVehicle vehicle = this.getOne(new QueryWrapper<XpVehicle>().eq("vehicle_vin", dto.getVin()).eq("is_deleted", 0));
        if(null == vehicle){
            throw new ServiceException("无效数据");
        }
        VehiclePosition vehiclePosition = mongoTemplate.findOne(Query.query(Criteria.where("vin").is(dto.getVin())), VehiclePosition.class);
        if(null == vehiclePosition){
            BeanUtil.copyProperties(dto, vehiclePosition);
            vehiclePosition.setPoint(new GeoJsonPoint(dto.getLongitude(), dto.getLatitude()));
            vehiclePosition.setAddTime(System.currentTimeMillis());
            mongoTemplate.save(vehiclePosition);
        }else{
            Update update = new Update()
                    .set("point", new GeoJsonPoint(dto.getLongitude(), dto.getLatitude()))
                    .set("course", dto.getCourse())
                    .set("alt", dto.getAlt())
                    .set("speed", dto.getSpeed())
                    .set("currentElectricity", dto.getCurrentElectricity())
                    .set("mileageRange", dto.getMileageRange())
                    .set("orderId", dto.getOrderId())
                    .set("totalOdometer", dto.getTotalOdometer())
                    .set("addTime", System.currentTimeMillis());
            mongoTemplate.updateFirst(new Query(Criteria.where("vin").is(dto.getVin())), update, VehiclePosition.class);
        }
    }
}