1.按照车型 计算价格(行程中修改目的地(获取路线和费用)、行程结束) 完成100%
2.车型管理端接口添加,并修改APP页面展示需要展示车型的代码
3.系统配置文件-行程中的配置 添加,并修改代码标记需要读取配置文件的地方
4.优化代码
7个文件已添加
21个文件已修改
508 ■■■■■ 已修改文件
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserController.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpPricingClientFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpSystemSettingClientFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpPricingClient.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpSystemSettingClient.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpVehicleModel.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpSystemSetting.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/vehicleConvoy/XpVehicle.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/controller/XpPricingController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/BootCommonService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/ActiveOrderServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpVehicleModelMapper.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/query/XpVehicleModelPageQuery.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpVehicleModelService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleModelServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpVehicleModelMapper.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPricingController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpSystemSettingController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/XpSystemSettingService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpCruisePlanServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpSystemSettingServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpTestPlanServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/ActiveOrderController.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpTestOrderServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-vehicle-convoy-boot/src/main/resources/mapper/vehicleConvoy/XpVehicleMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserController.java
@@ -84,7 +84,7 @@
    public R<Boolean> appUserGetPayPwd(HttpServletRequest request) {
        // uid已通过拦截器otp校验,可以直接使用
        String uid = request.getHeader("XP-Uid");
        //调用其他接口获取 免密结果
        //调用其他接口获取 免密结果 todo yyy
        Boolean is = true;
        return R.ok(is);
    }
@@ -98,7 +98,7 @@
    public R<?> appUserSetPayPwd(HttpServletRequest request) {
        // uid已通过拦截器otp校验,可以直接使用
        String uid = request.getHeader("XP-Uid");
        //调用其他接口设置免密结果
        //调用其他接口设置免密结果 todo yyy
        return R.ok();
    }
//-----------------------------------------------app接口------------------------------------------
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpPricingClientFallbackFactory.java
@@ -34,6 +34,12 @@
            }
            @Override
            public R<Long> getPriceCountByVmid(String vehicleModelId) {
                log.error("获取数据失败", cause);
                return R.fail("获取数据失败");
            }
            @Override
            public R<?> updateXpGeoQueryEntity(String orderId) {
                log.error("更新XpGeoQueryEntity失败", cause);
                return R.fail();
xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpSystemSettingClientFallbackFactory.java
@@ -2,6 +2,7 @@
import com.xiaopeng.api.feignClient.operation.XpSystemSettingClient;
import com.xiaopeng.api.model.operation.XpFeedbackType;
import com.xiaopeng.api.model.operation.XpSystemSetting;
import com.xiaopeng.common.core.domain.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
@@ -36,6 +37,11 @@
                log.error("获取反馈类型名称失败:{}", cause.getMessage());
                return R.fail(null);
            }
            @Override
            public R<XpSystemSetting> getSystemSettingOne() {
                return R.fail("获取系统配置失败");
            }
        };
    }
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpPricingClient.java
@@ -25,6 +25,14 @@
     R<XpPricing> getPricingByCid(@RequestParam(value = "cityId") Long cityId,@RequestParam(value = "vehicleModelId",required = false) String vehicleModelId);
    /**
     * 根据车型编码查询定价策略的数量
     * @param vehicleModelId 车型id
     * @return
     */
    @GetMapping("/logan/inner/v1/getPriceCountByVmid")
     R<Long> getPriceCountByVmid(@RequestParam(value = "vehicleModelId") String vehicleModelId) ;
    /**
     * 保存XpGeoQueryEntity
     */
    @PostMapping("/logan/inner/updateXpGeoQueryEntity")
xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpSystemSettingClient.java
@@ -2,8 +2,10 @@
import com.xiaopeng.api.factory.operation.XpSystemSettingClientFallbackFactory;
import com.xiaopeng.api.model.operation.XpFeedbackType;
import com.xiaopeng.api.model.operation.XpSystemSetting;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@@ -31,4 +33,9 @@
     */
    @GetMapping("/base/v1/getFeedbackTypeById/{id}")
    R<XpFeedbackType> getFeedbackTypeById(@PathVariable("id")Long id);
    @ApiOperation(value = "获取系统配置、热修复", tags = {"管理后台-系统"})
    @GetMapping("/api/v1/systemSetting/getOne")
    R<XpSystemSetting> getSystemSettingOne();
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpVehicleModel.java
New file
@@ -0,0 +1,39 @@
package com.xiaopeng.api.model.maintenance;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xiaopeng.common.core.web.domain.BaseModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("xp_vehicle_model")
@ApiModel(value="XpVehicleModel 对象", description="车型")
public class XpVehicleModel extends BaseModel {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.NONE)
    private Long id;
    @ApiModelProperty(value = "名称")
    @NotBlank(message = "名称不能为空")
    @Size(max = 50, message = "名称长度不能超过50个字符")
    private String name;
    @ApiModelProperty(value = "座位数")
    @NotBlank(message = "座位数不能为空")
    private String seat;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpSystemSetting.java
@@ -84,4 +84,18 @@
    @TableField("temperature_unit")
    private String temperatureUnit;
    @ApiModelProperty(value = "行程中剩余里程")
    private Integer xczSyDistance;
    @ApiModelProperty(value = "行程中剩余时间")
    private Integer xczSyTime;
    @ApiModelProperty(value = "行程中修改目地次数")
    private Integer xczCaCount;
    @ApiModelProperty(value = "行程中豁免时速 km/h")
    private Integer xczHmSpeedPerHour;
    @ApiModelProperty(value = "行程中豁免持续时间 分钟")
    private Integer xczHmDuration;
}
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/vehicleConvoy/XpVehicle.java
@@ -129,4 +129,8 @@
    @TableField(exist = false)
    private Long fleetId;
    @ApiModelProperty(value = "车型名称")
    @TableField(exist = false)
    private String vehicleModelName;
}
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/controller/XpPricingController.java
@@ -2,27 +2,23 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.dto.map.RoutePreferenceSaveDto;
import com.xiaopeng.api.dto.map.RouteStaleCheckDto;
import com.xiaopeng.api.dto.map.SelectNavigationRouteDto;
import com.xiaopeng.api.dto.order.OrderChangeDto;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.vo.operation.MultiRouteAndFareVo;
import com.xiaopeng.api.vo.operation.RoutePreferenceItemVo;
import com.xiaopeng.api.vo.operation.RouteStaleCheckVo;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.model.operation.XpPricing;
import com.xiaopeng.api.vo.HotFixInfoVo;
import com.xiaopeng.api.vo.operation.MultiRouteAndFareVo;
import com.xiaopeng.api.vo.operation.RouteAndFareVo;
import com.xiaopeng.api.vo.operation.RoutePreferenceItemVo;
import com.xiaopeng.api.vo.operation.RouteStaleCheckVo;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.controller.BaseController;
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.itinerary.dto.XpOrderDto;
import com.xiaopeng.itinerary.service.ActiveOrderService;
import com.xiaopeng.itinerary.service.IXpGeoQueryEntityService;
import com.xiaopeng.itinerary.service.XpPricingService;
import com.xiaopeng.api.vo.HotFixInfoVo;
import com.xiaopeng.itinerary.utils.ImageTagProcessor;
import com.xiaopeng.itinerary.vo.QueueStatusVo;
import com.xiaopeng.itinerary.vo.SaveOrderVo;
@@ -33,7 +29,6 @@
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.List;
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/BootCommonService.java
@@ -21,7 +21,7 @@
    private  XpVehicleClient xpVehicleClient;
    @Resource
    private XpOrderClient xpOrderClient;
//    @Override 测试
//    @Override
    public XpOrder getXpOrder(Long orderId) {
        R<XpOrder> xpOrderR = xpOrderClient.queryOrderById(orderId);
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/ActiveOrderServiceImpl.java
@@ -6,11 +6,9 @@
import com.xiaopeng.api.dto.order.OrderChangeDto;
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.operation.XpPointClient;
import com.xiaopeng.api.feignClient.operation.XpSystemSettingClient;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
import com.xiaopeng.api.model.operation.XpElectronicFence;
import com.xiaopeng.api.model.operation.XpElectronicFenceArea;
import com.xiaopeng.api.model.operation.XpPoint;
import com.xiaopeng.api.model.operation.XpRoutePlan;
import com.xiaopeng.api.model.operation.*;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.vo.operation.RouteOptionVo;
import com.xiaopeng.api.vo.operation.RouteVo;
@@ -49,6 +47,8 @@
    private XpOpenCityMapper xpOpenCityMapper;
    @Resource
    private XpOrderClient xpOrderClient;
    @Resource
    private  XpSystemSettingClient xpSystemSettingClient;
    @Resource
    private  XpPricingService xpPricingService;
    @Resource
@@ -109,7 +109,13 @@
        if (xpOrderR.getCode() != R.SUCCESS || xpOrderR.getData() == null) {
            throw new ServiceException("订单不存在");
        }
        Integer orderChange = 2;//todo yyy 从配置文件读取 修改订单目的地次数
        //获取系统配置
        XpSystemSetting systemSetting = xpSystemSettingClient.getSystemSettingOne().getData();
        if(systemSetting == null){
            throw new ServiceException("获取行程配置错误");
        }
        Integer orderChange = systemSetting.getXczCaCount();// 从配置文件读取 修改订单目的地次数
        XpOrder order = xpOrderR.getData();
        //判断订单修改的次数
        if(order.getOrderChange() > orderChange){
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleModelController.java
New file
@@ -0,0 +1,133 @@
package com.xiaopeng.maintenance.controller;
import com.xiaopeng.api.feignClient.operation.XpPricingClient;
import com.xiaopeng.api.model.maintenance.XpVehicleModel;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.model.query.XpVehicleModelPageQuery;
import com.xiaopeng.maintenance.service.IXpVehicleModelService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
@Slf4j
@Api(tags = "车辆检测")
@RestController
@RequestMapping("")
public class XpVehicleModelController {
    @Autowired
    IXpVehicleModelService xpVehicleModelService;
    @Resource
    private XpPricingClient xpPricingClient;
    @ApiOperation(value = "列表", tags = "管理后台-列表")
    @PostMapping("/logan/inner/xpVehicleModel/pageList")
    public R<PageInfo<XpVehicleModel>> pageList(@RequestBody XpVehicleModelPageQuery query) {
        PageInfo<XpVehicleModel> pageInfo = xpVehicleModelService.pageList(query);
        return R.ok(pageInfo);
    }
    @ApiOperation(value = "根据ID查询", tags = "管理后台-根据ID查询")
    @GetMapping("/logan/inner/xpVehicleModel/getById")
    public R<XpVehicleModel> getById(@RequestParam String id) {
        if (id == null || id.isEmpty()) {
            return R.fail("参数错误");
        }
        XpVehicleModel model = xpVehicleModelService.getById(id);
        if (model == null) {
            return R.fail("数据不存在");
        }
        return R.ok(model);
    }
    @ApiOperation(value = "新增", tags = "管理后台-新增")
    @PostMapping("/logan/inner/xpVehicleModel/add")
    public R<String> add(@RequestBody @Valid XpVehicleModel dto) {
        // 根据名称查询车辆型号,验证是否已存在
        List<XpVehicleModel> existingModel = xpVehicleModelService.queryByName(dto.getName());
        if (existingModel != null) {
            return R.fail("车辆型号名称已存在");
        }
        boolean b = xpVehicleModelService.save(dto);
        if(b){
            return R.ok();
        }
        return R.fail("保存失败");
    }
    @ApiOperation(value = "编辑", tags = "管理后台-编辑")
    @PostMapping("/logan/inner/xpVehicleModel/edit")
    public R<String> edit(@RequestBody @Valid XpVehicleModel dto) {
        if(dto.getId() == null){
            return R.fail("参数错误");
        }
        XpVehicleModel model = xpVehicleModelService.getById(dto.getId());
        if(model == null){
            return R.fail("参数错误");
        }
        if(!model.getName().equals(dto.getName())){
            List<XpVehicleModel> existingModel = xpVehicleModelService.queryByName(dto.getName());
            if (existingModel != null) {
                return R.fail("车辆型号名称已存在");
            }
        }
        boolean b = xpVehicleModelService.updateById(dto);
        if(b){
            return R.ok();
        }
        return R.fail("保存失败");
    }
    @ApiOperation(value = "删除", tags = "管理后台-删除")
    @DeleteMapping("/logan/inner/xpVehicleModel/deleteById")
    public R<String> deleteById(@RequestParam String id) {
        /*
        1.判断车型是否被 车辆 xp_vehicle使用。
        2.判断车型是否被 定价管理 xp_pricing使用。
         */
        int vehicleCount = xpVehicleModelService.getVehicleCount(id);
        if (vehicleCount > 0) {
            return R.fail("车辆型号已被车辆使用");
        }
        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);
        if(b){
            return R.ok();
        }
        return R.fail("删除失败");
    }
    @ApiOperation(value = "列表查询", tags = "管理后台-列表查询")
    @PostMapping("/logan/inner/xpVehicleModel/list")
    public R<List<XpVehicleModel>> list() {
        List<XpVehicleModel> list = xpVehicleModelService.queryList();
        return R.ok(list);
    }
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/mapper/XpVehicleModelMapper.java
New file
@@ -0,0 +1,32 @@
package com.xiaopeng.maintenance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xiaopeng.api.model.maintenance.XpVehicleModel;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.model.query.XpVehicleModelPageQuery;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface XpVehicleModelMapper extends BaseMapper<XpVehicleModel> {
    /**
     * 分页查询
     * @param query
     * @param pageInfo
     * @return
     */
    List<XpVehicleModel> pageList(@Param("query") XpVehicleModelPageQuery query, @Param("pageInfo") PageInfo<XpVehicleModel> pageInfo);
    /**
     * 根据型号id获取车辆数量
     * @param id
     * @return
     */
    int getVehicleCount(String id);
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/query/XpVehicleModelPageQuery.java
New file
@@ -0,0 +1,17 @@
package com.xiaopeng.maintenance.model.query;
import com.xiaopeng.common.core.web.page.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "车型查询")
public class XpVehicleModelPageQuery extends BasePage  {
    @ApiModelProperty(value = "名称")
    private String name;
    @ApiModelProperty(value = "座位数")
    private String seat;
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpVehicleModelService.java
New file
@@ -0,0 +1,22 @@
package com.xiaopeng.maintenance.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaopeng.api.model.maintenance.XpVehicleModel;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.model.query.XpVehicleModelPageQuery;
import java.util.List;
public interface IXpVehicleModelService extends IService<XpVehicleModel> {
    PageInfo<XpVehicleModel> pageList(XpVehicleModelPageQuery query);
    List<XpVehicleModel> queryByName(String name);
    List<XpVehicleModel> queryList();
    boolean logicalRemoveById(String id);
    int getVehicleCount(String id);
}
xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleModelServiceImpl.java
New file
@@ -0,0 +1,65 @@
package com.xiaopeng.maintenance.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.model.maintenance.XpVehicleModel;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.mapper.XpVehicleModelMapper;
import com.xiaopeng.maintenance.model.query.XpVehicleModelPageQuery;
import com.xiaopeng.maintenance.service.IXpVehicleModelService;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class XpVehicleModelServiceImpl extends ServiceImpl<XpVehicleModelMapper, XpVehicleModel> implements IXpVehicleModelService {
    @Override
    public PageInfo<XpVehicleModel> pageList(XpVehicleModelPageQuery query) {
        PageInfo<XpVehicleModel> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<XpVehicleModel> list = this.baseMapper.pageList(query, pageInfo);
        pageInfo.setRecords(list);
        return pageInfo;
    }
    @Override
    public List<XpVehicleModel> queryByName(String name) {
        return this.list(new LambdaQueryWrapper<XpVehicleModel>()
                .eq(XpVehicleModel::getDeleted, 0)
                .like(XpVehicleModel::getName, name));
    }
    /**
     * 查询未删除的数据
     * @return
     */
    @Override
    public List<XpVehicleModel> queryList() {
        return this.list(new LambdaQueryWrapper<XpVehicleModel>().eq(XpVehicleModel::getDeleted, 0));
    }
    @Override
    public boolean logicalRemoveById(String id) {
        XpVehicleModel entity = this.getById(id);
        if (entity != null) {
            entity.setDeleted(true);
            return this.updateById(entity);
        }
        return false;
    }
    /**
     * 获取指定车型ID关联的车辆数量
     *
     * @param id 车型ID
     * @return 车辆数量
     */
    @Override
    public int getVehicleCount(String id){
        return this.baseMapper.getVehicleCount(id);
    }
}
xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpVehicleModelMapper.xml
New file
@@ -0,0 +1,28 @@
<?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.maintenance.mapper.XpVehicleModelMapper">
    <select id="pageList" resultType="com.xiaopeng.api.model.maintenance.XpVehicleModel">
        select id,
             name,
            seat,
            is_deleted,
            create_time,
            update_time,
            create_by,
            update_by
        from xp_vehicle_model
        where is_deleted = 0
        order by create_time desc
    </select>
    <select id="getVehicleCount" resultType="java.lang.Integer">
        select count(a.id)
        from xp_vehicle a
        where a.is_deleted = 0 and a.vehicle_model = #{id}
    </select>
</mapper>
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPricingController.java
@@ -92,6 +92,20 @@
        return R.ok(pricing);
    }
    /**
     * 根据车型编码查询定价策略的数量
     * @param vehicleModelId 车型id
     * @return
     */
    @GetMapping("/logan/inner/v1/getPriceCountByVmid")
    public R<Long> getPriceCountByVmid(@RequestParam(value = "vehicleModelId") String vehicleModelId) {
        LambdaQueryWrapper<XpPricing> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(XpPricing::getDeleted, 0);
        queryWrapper.eq(XpPricing::getVehicleModel, vehicleModelId);
        long count = xpPricingService.count(queryWrapper);
        return R.ok(count);
    }
    @GetMapping("/base/v1/mini-program/pricing/rules/{openCityId}")
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpSystemSettingController.java
@@ -101,6 +101,11 @@
            return R.ok(new CustomerServicePhoneVo(xpSystemSettingService.getCustomerServicePhone()));
        }
    }
    @ApiOperation(value = "获取系统配置、热修复", tags = {"管理后台-系统"})
    @GetMapping("/api/v1/systemSetting/getOne")
    public R<XpSystemSetting> getSystemSettingOne(){
        return R.ok(xpSystemSettingService.getSystemSettingOne());
    }
    @ApiOperation(value = "获取系统配置、热修复", tags = {"管理后台-系统"})
    @GetMapping("/api/v1/systemSetting")
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/XpSystemSettingService.java
@@ -39,6 +39,8 @@
     */
    Integer getOrderFinishTime();
    XpSystemSetting getSystemSettingOne();
    /**
     * 保存系统配置、热修复
     * @param xpSystemSetting
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpCruisePlanServiceImpl.java
@@ -239,7 +239,7 @@
            if (vehicle != null) {
                vo.setVehicleCode(vehicle.getVehicleCode());
                vo.setPlateNumber(vehicle.getPlateNumber());
                vo.setVehicleModel(vehicle.getVehicleModel());
                vo.setVehicleModel(vehicle.getVehicleModelName());
            }
            Long fleetId = vehicleFleetIdMap.get(planVehicle.getVehicleId());
            if (fleetId != null) {
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpSystemSettingServiceImpl.java
@@ -9,9 +9,7 @@
import com.xiaopeng.api.model.operation.XpSystemSetting;
import com.xiaopeng.operation.service.XpSystemSettingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.cache.RedisCache;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Objects;
@@ -63,6 +61,30 @@
        return 15;
    }
    @Override
    public XpSystemSetting getSystemSettingOne(){
        LambdaQueryWrapper<XpSystemSetting> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(XpSystemSetting::getDeleted, false);
        XpSystemSetting obj = super.getOne(queryWrapper, false);
        if(obj.getXczCaCount() == null){
            obj.setXczCaCount(2);
        }
        if(obj.getXczSyDistance() == null){
            obj.setXczSyDistance(800);
        }
        if(obj.getXczSyTime() == null){
            obj.setXczSyTime(5);
        }
        if(obj.getXczHmSpeedPerHour() == null){
            obj.setXczSyDistance(3);
        }
        if(obj.getXczHmDuration() == null){
            obj.setXczHmDuration(3);
        }
        return obj;
    }
    @Override
    public void saveSystemSetting(XpSystemSetting xpSystemSetting) {
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpTestPlanServiceImpl.java
@@ -269,7 +269,7 @@
            if (vehicle != null) {
                vo.setVehicleCode(vehicle.getVehicleCode());
                vo.setPlateNumber(vehicle.getPlateNumber());
                vo.setVehicleModel(vehicle.getVehicleModel());
                vo.setVehicleModel(vehicle.getVehicleModelName());
            }
            Long fleetId = vehicleFleetIdMap.get(planVehicle.getVehicleId());
            if (fleetId != null) {
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/ActiveOrderController.java
@@ -103,7 +103,7 @@
    /**
     * 分享行程接口3-订单信息
     */
    @ApiOperation(value = "分享行程接口3-订单查询实时轨迹路线")
    @ApiOperation(value = "分享行程接口3-订单信息查询")
    @GetMapping("/base/v1/mini-program/orderActive/share/orderInfo")
    @XpClientCheck(checkToken = false, checkOtpToken = false)
    public R<XpOrderDetailVO> shareOrderInfo(@RequestParam String orderId, HttpServletRequest request) {
@@ -136,7 +136,7 @@
            XpVehicle vehicle = xpVehicleR.getData();
            xpOrderDetailVO.setVehicleId(vehicle.getId());
            xpOrderDetailVO.setVehicleVin(vehicle.getVehicleVin());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModel());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModelName());
            xpOrderDetailVO.setVehicleColor(vehicle.getVehicleColor());
            xpOrderDetailVO.setPlateNumber(vehicle.getPlateNumber());
            xpOrderDetailVO.setVehiclePictures(vehicle.getVehiclePictures());
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -318,7 +318,7 @@
            XpVehicle vehicle = vehicleMap.get(order.getVehicleId());
            if (Objects.nonNull(vehicle)) {
                vo.setPlateNumber(vehicle.getPlateNumber());
                vo.setVehicleModel(vehicle.getVehicleModel());
                vo.setVehicleModel(vehicle.getVehicleModelName());
            }
        }
@@ -607,7 +607,7 @@
        if (Objects.nonNull(order.getVehicleId()) && vehicleMap.containsKey(order.getVehicleId())) {
            XpVehicle vehicle = vehicleMap.get(order.getVehicleId());
            vo.setPlateNumber(vehicle.getPlateNumber());
            vo.setVehicleModel(vehicle.getVehicleModel());
            vo.setVehicleModel(vehicle.getVehicleModelName());
        }
        // 车队信息
@@ -3465,7 +3465,7 @@
            R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(xpOrder.getVehicleId());
            XpVehicle vehicle = xpVehicleR.getData();
            xpOrderDetailVO.setVehicleVin(vehicle.getVehicleVin());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModel());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModelName());
            xpOrderDetailVO.setVehicleColor(vehicle.getVehicleColor());
            xpOrderDetailVO.setPlateNumber(vehicle.getPlateNumber());
            xpOrderDetailVO.setVehiclePictures(vehicle.getVehiclePictures());
@@ -3493,7 +3493,7 @@
            R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(xpOrder.getVehicleId());
            XpVehicle vehicle = xpVehicleR.getData();
            xpOrderDetailVO.setVehicleVin(vehicle.getVehicleVin());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModel());
            xpOrderDetailVO.setVehicleModel(vehicle.getVehicleModelName());
            xpOrderDetailVO.setVehicleColor(vehicle.getVehicleColor());
            xpOrderDetailVO.setPlateNumber(vehicle.getPlateNumber());
@@ -3513,21 +3513,28 @@
     */
    private boolean isCancelShow(XpOrder xpOrder,String vehicleVin) {
        boolean isCancel = false;
        //获取系统配置
        XpSystemSetting systemSetting = xpSystemSettingClient.getSystemSettingOne().getData();
        if(systemSetting == null){
            throw new ServiceException("获取行程配置错误");
        }
        //获取配置文件
        int sylc = 800;//单位米 todo yyy 需要读取后台配置文件
        int sysj = 5;//单位分钟 todo yyy 需要读取后台配置文件
        int sylc = systemSetting.getXczSyDistance();  // 行程中剩余里程单位米  需要读取后台配置文件
        int sysj = systemSetting.getXczSyTime();//行程中剩余时间 单位分钟  需要读取后台配置文件
        // 减少3分钟 获取3分账内的 行程数据
        long minute =3;//todo yyy 需要读取后台配置文件
        Integer xczSpeedPerHour = systemSetting.getXczHmSpeedPerHour();//行程中豁免时速 km/h
        Integer xczHmDuration = systemSetting.getXczHmDuration();//行程中豁免持续时间 分钟  需要读取后台配置文件
        List<OrderTrajectory> orderTrajectories = queryOrderTrajectories(xpOrder.getId());
        if(!orderTrajectories.isEmpty()){// 减少3分钟 获取3分账内的 行程数据
            //3千米/小时 转换成分钟 50米/分钟
            BigDecimal suduDefault = new BigDecimal("3");//3千米/小时
            BigDecimal suduDefault = new BigDecimal(xczSpeedPerHour);//3千米/小时
            BigDecimal suduDefault1 = suduDefault.multiply(BigDecimal.valueOf(1000)) ;
            BigDecimal suduDefaultNew =suduDefault1.divide(BigDecimal.valueOf(60),2,RoundingMode.HALF_EVEN);
            LocalDateTime minutesBefore = LocalDateTime.now().minusMinutes(minute);
            LocalDateTime minutesBefore = LocalDateTime.now().minusMinutes(xczHmDuration);
            long milliseconds = DateUtils.getMilliseconds(minutesBefore);
            List<OrderTrajectory> orderTrajectoriesNew = new ArrayList<>();
            for (OrderTrajectory orderTrajectory : orderTrajectories) {
@@ -3540,7 +3547,7 @@
             */
            //计算行驶总距离和时长
            Double reduce = orderTrajectoriesNew.stream().map(OrderTrajectory::getDistance).reduce(0.0, Double::sum);
            BigDecimal xcsudu = new BigDecimal(reduce).divide(new BigDecimal(minute),2, RoundingMode.HALF_EVEN);//米/分钟
            BigDecimal xcsudu = new BigDecimal(reduce).divide(new BigDecimal(xczHmDuration),2, RoundingMode.HALF_EVEN);//米/分钟
            //特殊豁免:若系统检测到车辆在当前坐标时速 < 3km/h 且持续时间 > 3分钟(后台配置)(判定为极度拥堵或异常停滞),此时解除限制,允许用户修改目的地或新增途径点以寻找更近的下车位置。
            if(xcsudu.compareTo(suduDefaultNew)<0){
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpTestOrderServiceImpl.java
@@ -407,7 +407,7 @@
            XpVehicle vehicle = vehicleMap.get(order.getVehicleId());
            if (Objects.nonNull(vehicle)) {
                vo.setPlateNumber(vehicle.getPlateNumber());
                vo.setVehicleModel(vehicle.getVehicleModel());
                vo.setVehicleModel(vehicle.getVehicleModelName());
            }
        }
xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java
@@ -459,7 +459,7 @@
                    vo.setVehicleCode(vehicle.getVehicleCode());
                    vo.setPlateNumber(vehicle.getPlateNumber());
                    vo.setVehicleColor(vehicle.getVehicleColor());
                    vo.setVehicleModel(vehicle.getVehicleModel());
                    vo.setVehicleModel(vehicle.getVehicleModelName());
                    vo.setOperatingStatus(vehicle.getOperatingStatus());
                    vo.setVehicleType(vehicle.getVehicleType());
                    vo.setStatus(vehicle.getStatus());
xp-robotaxi-vehicle-convoy-boot/src/main/resources/mapper/vehicleConvoy/XpVehicleMapper.xml
@@ -12,6 +12,12 @@
          is_deleted, create_time, update_time, create_by, update_by
    </sql>
    <select id="selectById" resultType="com.xiaopeng.api.model.vehicleConvoy.XpVehicle">
        SELECT  a.*,b.name as vehicleModelName
        FROM xp_vehicle a
        left join xp_vehicle_model b on a.vehicle_model = b.id
        WHERE a.id = #{id}
    </select>
    <!-- 统计在线车辆数(operatingStatus=1 运营中) -->
    <select id="countOnlineVehicles" resultType="java.lang.Long">
        SELECT COUNT(*)